[Editorial em discussão] Programadores que não sabem programar? - Arquivo da Revista - Portugal-a-Programar
[Editorial em discussão] Programadores que não sabem programar?
Por vbmaster, 21 de Janeiro de 2008 em Arquivo da Revista
Serve este tópico para aplicar uma velha ideia de se dar aos utilizadores a possibilidade de comentar e dissertar sobre o assunto do editorial da revista tal como se fosse outro thread qualquer do fórum. Aqui fica.
Enquanto lia alguns dos tópicos mais populares do ano no que toca à programação na popular comunidade digg (www.digg.com), deparei-me com um artigo intitulado "Why Can't Programmers... program!", em que se referia que na maior parte das entrevistas de emprego a programadores precedidas de recolha de currículos, a maior parte dos entrevistados não superava algumas das mais básicas tarefas solvidas com recurso a uma linguagem de programação, da ordem das que alguém que começou a programar há dias tenta fazer.
Pode-se argumentar que bons programadores são desde logo assediados pelas empresas enquanto tiram os seus cursos, não precisando deste género de entrevistas, mas mesmo os que não conseguem tal sorte, não me parece, pelo menos em Portugal, que falhassem em questões básicas sobre programação, como no exemplo dado no artigo original: pedir ao programador que faça um output de todos os números de 1 a 100, excepto os múltiplos de 3, que seriam imprimidos como "Fizz" e os de 5 que seriam "Buzz" (os múltiplos de ambos como "FizzBuzz").
Ou há algo de errado no mundo, ou há algo de errado nesta profissão. Será que com a divulgação dos mais diversos tutoriais e snippets na web com a característica comum de quererem dar a solução em vez de explicar como se chega a tal, a profissão de programador começa a ter, dentro de si, uma larga percentagem de indivíduos que, na mais fiel das denominações, seriam intitulados programadores do "desenrasque"? Mas mais surpreendente do que haver tal percentagem é de facto ter programadores dessa ordem empregados. Terá a programação já se especializado assim tanto que nem a reprovação na concepção do mais básico algoritmo seja indicador de mau programador? Será preocupante se sim, pois teremos muitos dos nossos serviços do dia a dia mantidos e assegurados por programadores que numa possível situação inesperada não saberão tomar as medidas adequadas para resolver o problema.
No entanto, o mundo emprega-os...
[1] http://www.digg.com/programming/Why_Can_t_Programmers_Program
Seria o mesmo que imaginar um veterano não conseguir emprego numa entrevista por se ter esquecido dum pormenor (função) básico num simples problema dado.
E sim... aqueles que tenham andado a praticar exercícios de programação antes das entrevistas teriam sido colocados à frente dos verdadeiros programadores.
"Chumbá-los" por não se lembrarem de partes específicas, no caso do Java, seria errado.
Para já, as bibliotecas e funções Java são inúmeras. Até os mais especializados nesta linguagem concerteza podem ter dúvidas acerca duma ou doutra função.
Não lhes bastaria rever a matéria para se relembrarem de todos os conceitos? Enquanto que aqueles que passaram na entrevista pelos ditos simples exercícios precisariam de tempo para aprenderem conceitos necessários para esse trabalho?
Queria ver a cara dos empregadores ao verem que os seus "empregadores especializados" só dão erros de lógica
A exagerar claro :biggrin:
Qualquer "verdadeiro programador" não falha exercícios básicos, sejam eles quais forem e não se esquece de um pormenor.
Com os alunos das universidades a aprenderem a linguagem XYZ em vez de aprenderem a programar, com o ensino de POO através do uso de uma linguagem, com a completa desconsideração dos alunos por coisas tão simples como algoritmos, modelação, planeamento... sim acho perfeitamente normal. Programação é algo agnóstico da linguagem, tal como o é POO, modelação, algoritmia, etc..
Não me espanta, aliás, sendo aluno de engª informática à 7 anos, e tendo visto a evolução dos cursos e ofertas/procuras de emprego bem como as alterações que ocorreram no sistema de ensino cada vez mais será essa a realidade. Actualmente valoriza-se a escola que passar mais alunos, é o resultado.
Se pegarem em todos os alunos que estão no mesmo ano que eu, garanto-vos que 3/4 não sabe a diferença entre um objecto e uma classe, 95% não faz o minímo planeamento do que vai programar, 80% não nunca fez um algoritmo durante o tempo do curso e 99% passa a matemática à rasca.
Quando vemos alunos que terminaram a licenciatura, 5 anos, com média de 17 a fazerem perguntas sobre questões básicas, nada disso me espanta mais. E não, não foi um só aluno.
Knitter a nível de eng Informática não sei se é bem assim pelo menos no meu caso.
Eu tive três cadeiras só de algoritmos numa usávamos Java em outra C mas tínhamos de ser nós a implementar tudo á mão, Lista ligadas, HasTables, Filas, ABP, AVL, RBT, B-Tree, Trie, algoritmos de sort e sei lá que mais a esse nível posso dizer que sei como cada um funciona embora na hora de usar muitas vezes recorra a APIs mas é importante saber como funciona para saber o que usar e nisso pelo menos o meu curso deu forte.
Alias tive um prof que dizia que lá não aprendíamos linguagens de programação mas sim aprendíamos a programar, e de certa forma é verdade tirando POO pouco mais aprendi de Java lá e tudo o que sei fora isso por pesquisa própria.
Quanto à matemática à rasca prefiro não falar nisso lol.
Um ponto negativo no meu curso não sei como será no exterior é cadeiras de programação poderem ser passadas sem saber programar, não são muitas mas pelo menos umas 2 ou 3 basta tirar positiva acima de 13 na teoria e tens a cadeira feita mesmo sem a pratica. "Como eu gostava que fosse ao contrário "
Pronto é assim a vida.
99% passa a matemática à rasca
Isso é realmente mau...
Num aspecto concordo contigo. Antes das linguagem devemos saber descodificar o problema, desenhar algoritmos e o programa antes de passar para a parte prática.
Saber a algoritmia, a modelação de sistema e estruturas de dados pode funcionar teoricamente. Mas não vais dizer que não te esqueces dum único pormenor. Que cada vez que um "verdadeiro programador" desenvolve um código ele não vá dar algum erro. E isso deve se a algum "pormenor" que tenhamos esquecido.
95% não faz o minímo planeamento do que vai programar, 80% não nunca fez um algoritmo durante o tempo do curso e 99% passa a matemática à rasca.
Não me admira. Estou a tirar um Curso Profissional de Informática de Gestão e estou no 2º ano que equivale ao 11º ano de escolaridade e a maioria dos alunos não sabe fazer a regra de 3... A programação sabem escrever "writeln('nem sei o que ando aqui a fazer');" no pascal e pouco mais... E acho que não é preciso dizer mais nada, e no entanto, não têm módulos em atraso!
Como é que não sabem o básico do básico e não têm módulos em atraso? Simples!
Trabalho de aula = 45 % da nota
Exames = 45 % da nota
Comportamento e afins = 10% da nota
Trabalho de aula ? Basta estarem 90m para fazerem um programar a dizer "Olá mundo." e pronto têm dezoitos e pronto
Exames ? Com notas de quatro e cinco...
Comportamento ? Basta estarem caladinhos(as) nas aulas para fácilmente terem mais um dezoito e assim está feito um dez sem saber programar. E depois, quando chegarem a uma entrevista? Quando perguntarem tipo: "Então e o que é que sabes?", "Sei abrir o pascal e portar-me bem".
E é este o mundo em que estamos, e depois os ministros vêm dizer que as notas estão a subir... Pois estão... Já não é preciso fazer nada para se tirar boas notas :s
Infelizmente é bem verdade o que dizes TheGlorious, vejo isso na minha escola todos os dias...
No meu caso também é como disse o magician. Demos as bases de muita coisa, a aplicação depois de criarmos essa bases até era o menos pois depois de as fazer, compreender o seu objectivo torna-se relativamente fácil. Mas cadeiras que envolvam programação não estou a ver nenhuma que seja possível passar só com a teoria, pois os trabalhos ainda pesam bastante na nota. Além de que os exames de cadeiras de programação são em grande parte programar no papel.
Matemática lol mesmo caso não posso falar muito.
O que me preocupa no meu caso não é tanto o ensino superior mas sim o secundário pois o facto de alunos de informática virem com matemática B diz bastante do quanto foi facilitado a passagem para o ensino superior. O problema é que depois quando lá chegam não estão preparados, agora tem que se perguntar que alunos tiveram matemática B para terem umas explicações extras.
Na minha opinião, pricipalmente nos cursos profissionais as notas deviam estar dividas em: 90% para os exames e 10% para comportamentos, trabalho de aula e afins.
Agora há 10% para bom comportamento?!?! Devia era ser -1% por cada aula de mau comportamento.
Tenho amigos que já apanharam recém-licenciados com problemas graves de conceitos e lógica, mas pessoalmente até hoje nunca apanhei portanto não posso falar. Mas posso comentar alguns pontos do artigo.
Eu acho que em Portugal as entrevistas são um pouco fracas e deixam facilmente passar alguém sem conhecimentos técnicos apropriados. Um entrevistando tem que passar pelo menos por 3 entrevistadores diferentes, desde alguém que faz uma entrevista puramente psicológica até alguém com um estatuto de "guru" técnico. E em alguma parte da entrevista sim, é preciso pedir ao entrevistando que construam um algoritmo em pseudo-código para fazer qualquer coisa, e não pode ser algo trivial, tem que ser algo que faça a pessoa pensar um pouco. Até hoje só vi uma empresa fazer entrevistas deste tipo, e já não existe.
Temos naturalmente que admitir que as pessoas têm diferentes graus de aptidão para programador, e algumas não a têm de todo, ainda que inclinadas para vertentes técnicas. Talvez o problema seja a sociedade precisar cada vez mais de mais programadores e já termos ultrapassado a percentagem dos "bons programadores", restando então começar a empregar os menos bons. Até o Google tem "problemas" desses.
Como já aqui alguém disse, não se aprende a programar na linguagem X ou Y, a "algoritmia" é agnóstica a linguagens de programação. Quem souber programar conceptualmente, qualquer bom programador, aprende uma linguagem nova em relativamente pouco tempo; só precisa de aprender a *sintaxe* da nova linguagem (a menos que a linguagem siga um paradigma desconhecido para o programador; aí ele aprende o paradigma e depois aprende a "exprimir-se" na linguagem).
Mas para se ser um bom programador não basta ter os conceitos de programação. É preciso ainda conhecer e saber bem como funciona um computador. Em teoria o computador devia ser apenas a máquina que corre o programa, mas na prática há limitações e precisamos de coisas que funcionem.
Eu acho ainda que tendo em conta a facilidade de acesso que há hoje em dia a informação, não é um "mau curso" que impede qualquer pessoa que tenha um verdadeiro gosto por programação de ser um bom programador. Aqueles que ficam "coxos" por causa do "curso ser mau" é porque se acomodaram àquilo que lhes enfiaram pela goela nas aulas. É preciso ser-se curioso, experimentar, ler, investigar. E, espantem-se, é preciso dispender tempo. A maior parte das coisas práticas que fazem com que realmente se resolvam problemas não se aprende nas aulas e muitas vezes nem nos livros.
Comentários ao português: "solvidas"?
Focando apenas a forma como se ensina e avalia (e deixando várias outras polémicas de escolhas tecnológicas e outras), acho se deveriam utilizar métodos de ensino que estimulassem mais autonomia do aluno na aprendizagem e que a iniciativa no acto da aprendizagem fosse muito maior do lado do estudante, com base num impulso inicial do professor e de uma orientação e acompanhamento continuo do lado do professor. Acho que de momento a iniciativa está exclusivamente do lado do professor e o aluno é demasiado passivo, é quase como uma cria de ave que fica à espera que os progenitores cacem e levem os alimentos à sua boca. Eu não acho que seja assim que pode haver boa aprendizagem.
Quanto às percentagens na ponderação das notas, tendo em conta que também acho que não se deveria ensinar da forma que ensino, acho que os exames finais deveriam pesar pouco (mas não ser irrelevantes). Acredito na avaliação continua e como tal nenhuma componente deve ter à partida uma percentagem que defina demasiado a nota. E acho que o comportamento não deve ser considerado. O comportamento deve ser apenas tido em conta para os aspectos puramente disciplinares e se o aluno for de facto um problema para toda a turma, deve ser punido disciplinarmente da forma mais adequada (chumbo, suspensão, expulsão, outra forma mais adequada ao caso), no entanto o comportamento não é medida da aprendizagem da matéria.
Pegando de novo na questão dos exames, devo acrescentar que toda a minha vida vi alunos a tirarem notas nos exames e em testes sem que de facto soubessem a matéria, apenas a decoraram para essas avaliações e 5 minutos depois, já tinham esquecido. E claro ainda há as cabulas e a copia. Dar demasiada importância a este tipo de avaliação incentiva este tipo de comportamentos desfavoráveis a um ensino de qualidade.
Voltando agora à questão do ensino...
Desde pequenos que não se ensina a pensar e a falar. Estas duas coisas são essenciais. Só um pensamento baseado numa utilização correcta da linguagem é que pode ser correctamente estruturado e comunicado, só um pensamento com base em lógica correcta é que faz sentido.
Isto de que falei associado à falta de incentivo ao pensamento abstracto e à imaginação enquanto crianças, são algumas das grandes razões para os problemas de ensino. Depois há o facilitismo. Há uma cultura de facilitismo em que os professores dão notas que os alunos não merecem, só para não "estragar a vida" ao aluno.
Em todas as profissões há bons e maus. E vão haver bons e maus a serem empregados.
Os bons, mais cedo, ou mais tarde ganham vantagem sobre os maus, quer por serem reconhecidos como tal, quer por terem iniciativa e criarem eles próprios a solução para o seu emprego. Pelo que em já quase 10 anos de mercado de trabalho é isso que acontece na maior parte dos casos.
Falco, apenas concordo com os dois últimos parágrafos.
Pois, estando a falar de um Curso de Programação só vai para lá quem realmente quer aprender a programar e aprender várias linguagens, por isso a motivação não pertence ao Professor, mas sim aos Alunos.
Quanto às notas... A programação não se decora, logo quem sabe sabe, quem não sabe não sabe, é simples!
No que diz respeito a alunos ajudados é puramente verdade, pois dou-vos já uma situação da minha turma.
Em vários teste que tive 20, a Professora nunca me deu 20 no módulo alegando que eu não trabalhava nas aulas, mas o que é certo é que sabia as coisas. E a alunos que nem 7 tiraram no teste a Professora deu notas deliciosas de 9,5, alegando que se esforçam nas aulas, estão sempre calados, etc etc.. Mas, que isso interessa se não sabem as coisas?
E depois é o que se vê, depois dizem que há maus Programadores licenciados e com diplomas, pois há...
Isto é que eu nunca percebo... o meu curso parece igual ao teu e nunca vi mais nada que C#. e depois html e php. Nada de Pascal nem nada do género... Talvez por isso tenhamos andado uns dois meses no primeiro ano a aprender a sintaxe do Console.WriteLine ...
No ensino, mesmo nos cursos de informática, não se ensina só programação. Ensina-se muito mais coisas, como Português, Matemática, etc... Muitas destas coisas influenciam bastante a capacidade de pensar e isto é essencial, é o fundamento de tudo.
Eu estava a falar do ensino em geral. Não acho que o fundamental dos problemas seja um problema especifico da área da informática, mas sim do ensino em todas as áreas. Há problemas que são específicos do ensino de informática, mas se fossem só esses estávamos nós muito melhor.
Note-se que a minha formação em informática até ao 11º, foi totalmente informal. O curso do secundário era o Curso de Carácter Geral do Agrupamento de Ciências Naturais. Alguns informáticos da minha família ensinaram-me o fundamental, e bases de programação um pouco depois de aprender a ler escrever, depois aprendi o resto lendo muito, praticando e conversando com muitos amigos que também se dedicavam à informática. Ainda durante o 11º comecei em paralelo um Curso Profissional de Técnico de Informática (que na verdade bastante que era pouco diferente de um curso de analista programador). Depois do secundário e do curso profissional, tive formação superior em informática (ao mesmo tempo que já trabalhava para me sustentar). Por isso tenho uma experiência bastante ampla do ensino, que me dá uma visão pouco comum de como funcionam as coisas, não só numa área muito específica e restrita (informática), mas um pouco mais ampla (as ciências naturais) que a maioria (embora hajam outros com experiência em várias áreas).
Quanto à questão do ensino de sintaxe de linguagens... Acho que exceptuando no ensino da primeira linguagem (que na minha opinião deveria ser o C, pois permite introduzir a maior parte dos conceitos básicos e evoluir depois para C++, que trás permite introduzir a POO), acho que faz pouco sentido, isso deveria ser das coisas que os alunos deveriam aprender por si próprios e os professores deveriam funcionar apenas como orientadores (garantindo que eles aprendem tudo o que é necessário e esclarecendo dúvidas). Mas para isto o que tem de mudar é o paradigma do ensino.