Faculdades e compiladores

Aqui em Curitiba, praticamente todos os cursos de informática superiores tem a disciplina de compiladores.

[quote=davidbuzatto]Quem falou que eu estou comparando carros com programação realmente não entendeu a analogia.
Pena…[/quote]

Pegando um gancho, não é bem assim. Eu não preciso saber como o ar condicionado funciona, mas deveria saber que se uso o ar, o carro consome mais combustivel e em alguns casos perde potencia. Isso eu deveria saber, e os programadores tem que saber isso tbm. É por essas e outras que vejo código tosco, mal escrito por ai. Não preciso saber como foi implementado o HashSet ou o ArrayList do Java, mas tenho que saber como funcionam para poder escolher qual o melhor para resolver meu problema.

a sim, e pra não desviar o curso (mais ainda), eu fiz sistemas e tive teoria da computação. Boa matéria, achop que acrescenta muito mais conteudo que compiladores (que não tive, logo não posso falar nada além do que pesquisei a respeito)

[quote=mario.fts][quote=davidbuzatto]Quem falou que eu estou comparando carros com programação realmente não entendeu a analogia.
Pena…[/quote]

Pegando um gancho, não é bem assim. Eu não preciso saber como o ar condicionado funciona, mas deveria saber que se uso o ar, o carro consome mais combustivel e em alguns casos perde potencia. Isso eu deveria saber, e os programadores tem que saber isso tbm. É por essas e outras que vejo código tosco, mal escrito por ai. Não preciso saber como foi implementado o HashSet ou o ArrayList do Java, mas tenho que saber como funcionam para poder escolher qual o melhor para resolver meu problema.[/quote]

concordo em genero numero e grau… e o exemplo (aproveitando o do davidbuzatto) foi bem feito sim… claro que programar não é como dirigir (obvio aliais, isso foi uma metafora), mais em ambos os casos não é necessário conhecer como a ferramenta é produzida, mais é altamente indicado possuir o conhecimento de como utiliza-lo da melhor forma.

A questão não é ter-se a disciplina de compiladores, ela é mais uma disciplina complicada, nada mais do que isso, não é isso que vai agregar o suficiente pro cara ser um bom programador, mais tempo dedicado a disciplinas de lógicas seria mais util por exemplo que mais compiladores, ou mais IA (se a intenção é criar programadores que fazem menos código ruim), uma disciplina referente a “boas praticas” abordando design patterns, anti-patterns e até identação do código seria mais util…

A disciplina de compiladores não acho que seja tão essencial assim (2 anos de compiladores por exemplo é muita coisa), mas que é necessário conhecer um pouco sobre a ferramenta, isso sim é importante… concordo que a matéria deve existir (eu tive essa materia mesmo o curso que fiz tendo sido sistemas de informação).

ps, sou contra esses excessos referentes a compiladores, de considerar que a materia vai fazer alguém programar melhor a tal ponto, ou se te-la tanto assim como o cs.santos disse, mas isso não é devido a não gostar do assunto, meu proprio TCC foi referente a isso, mas sim por considerar estas coisas como exageros…

não não…eu estava no lugar certo mesmo…não me adaptaria em sistemas de informação…acho meio que tediosa as coisas que se estudam la…eu gostei do curso…é que teoria da computação realmente eu detesto cara, é uma das unicas que eu não curti nda nda…e em conjunto com compiladores, sou tb da opinião que deve-se ter uma noção, mas apenas por conhecimento msm, pois será muito raro de aplicar no mercado de trabalho.

vou assumir que isso não foi uma intenção de “flame” sobre a minha opinião, porem eu realmente acho q foi extrema perda de tempo assisitir akelas aulas, e nem por isso eu não penso em evoluir e buscar conhecimento.

Não, não foi flame. Só que infelizmente vc há de concordar que a maioria das pessoas com esse pensamento têm esse perfil. Pelo menos é o que eu vejo, ainda mais pq eu trabalhei em inúmeros ambientes altamente burocráticos. Enfim… se pareceu que foi uma afronta a você, me desculpe.

Não, não foi flame. Só que infelizmente vc há de concordar que a maioria das pessoas com esse pensamento têm esse perfil. Pelo menos é o que eu vejo, ainda mais pq eu trabalhei em inúmeros ambientes altamente burocráticos. Enfim… se pareceu que foi uma afronta a você, me desculpe.
[/quote]

sem problemas…é que pareceu com certo duplo sentido…mas entendi seu ponto de vista. Realmente acontece isso sim que vc flw, na minha sala tinham muitos, mas esses ai não se interessam por materia nenhuma…rsrsrsrs

abraços

Eu sinto falta nos cursos é de mais aulas de fundamentos básicos. Seja de hardware ou de software mesmo.

Dá para notar, aqui no GUJ, que “converter coisas para bytes” é um processo místico para muitas pessoas. Aliás, o mundo dos “bytes” parece ser de algo desconhecido, mítico, que existe na entranha dos sistemas.

Poucos sabem o que é encoding, ou mesmo quais os mais comumente usados. A maioria não tem noção de como uma data é representada na maior parte das linguagens, e não sabe fazer calculos simples de conversão de tempo.

É difícil abordar assuntos como elegância de código e padrões de projetos em faculdade. Os alunos tem muitas dúvidas, em coisas mais fundamentais. Geralmente, buscamos elegância só depois de sanar essas dúvidas, até porque, para compreender a beleza de um código elegante, é necessário entender as suas implicações e, muitas vezes, ter degladiado um pouco para alterar um código amarrado.

Outra coisa, é que eu acho que as faculdades deveriam ser bastante rigorosas nas disciplinas de programação. E não deveriam passar alunos com dúvidas, principalmente as fundamentais.

Nossa, nem me fala nisso. Na minha faculdade era o contrário. A maioria dos alunos queriam professores frouxos que dessem trabalhinhos bunda pra poder pegar o 10 e ir pra casa felizes. Achava isso péssimo.

Aí quando a gente finalmente teve Java, entrou um professor que obrigou todo mundo a pensar. Eu adorava. Na primeira prova todo mundo ficou aterrorizado, porque não era a baba que queriam. Muita gente acabou se dando mal, e até tentaram argumentar com o coordenador de CC pra tirar o professor, mas não teve jeito.

[quote=marcosalex]São dois mercados distintos, e os dois precisam de gente. Se alguem quiser alguma coisa simples, ou pouco mais que um CRUD não é necessário que o cara conheça Estrutura de Dados e é saudável que tenha ferramentas like VB, Delphi ou até Access pra esse público.
[/quote]

Todo desenvolvedor precisa saber o que é uma lista ligada ou hashtable. Que história é essa?

Patterns são um produto de linguagens de programação deficientes. Conhecimentos de compiladores ajudaria sim a alguém a entender que a linguagem que está usando não é suficientemente boa e por isso precisa dessas muletas chamadas “patterns”.

Alguém que não conhece desenvolvimento de linguagens e compiladores acha normal a existência de patterns.

Patterns são um produto de linguagens de programação deficientes. Conhecimentos de compiladores ajudaria sim a alguém a entender que a linguagem que está usando não é suficientemente boa e por isso precisa dessas muletas chamadas “patterns”.

Alguém que não conhece desenvolvimento de linguagens e compiladores acha normal a existência de patterns.[/quote]

Por favor, poderia explicar em que vc se baseia para dizer isso?

[quote=renamed][quote=Thiagosc]Patterns são um produto de linguagens de programação deficientes. Conhecimentos de compiladores ajudaria sim a alguém a entender que a linguagem que está usando não é suficientemente boa e por isso precisa dessas muletas chamadas “patterns”.

Alguém que não conhece desenvolvimento de linguagens e compiladores acha normal a existência de patterns.[/quote]

Por favor, poderia explicar em que vc se baseia para dizer isso?[/quote]

Porque em qualquer linguagem de programação adequada haveria a possibilidade de abstrair qualquer tipo de repetição de modo que não há a necessidade de se recorrer a “padrões de projeto”.

Se não é possível abstrair repetições, e logo é necessário estabelecer “padrões” comuns que nada mais são do que convenções adotadas por desenvolvedores, então é sinal de que a linguagem em questão não fornece as ferramentas necessárias.

[quote=Thiagosc][quote=renamed][quote=Thiagosc]Patterns são um produto de linguagens de programação deficientes. Conhecimentos de compiladores ajudaria sim a alguém a entender que a linguagem que está usando não é suficientemente boa e por isso precisa dessas muletas chamadas “patterns”.

Alguém que não conhece desenvolvimento de linguagens e compiladores acha normal a existência de patterns.[/quote]

Por favor, poderia explicar em que vc se baseia para dizer isso?[/quote]

Porque em qualquer linguagem de programação adequada haveria a possibilidade de abstrair qualquer tipo de repetição de modo que não há a necessidade de se recorrer a “padrões de projeto”.

Se não é possível abstrair repetições, e logo é necessário estabelecer “padrões” comuns que nada mais são do que convenções adotadas por desenvolvedores, então é sinal de que a linguagem em questão não fornece as ferramentas necessárias.[/quote]

poderia citar um exemplo de linguagem? não conheço nenhum caso onde não exista nenhuma necessidade de patterns, seja eles quais forem.

[quote=mario.fts]
poderia citar um exemplo de linguagem? não conheço nenhum caso onde não exista nenhuma necessidade de patterns, seja eles quais forem.[/quote]

Lisp é um exemplo onde todas as repetições podem ser abstraídas. Desde a criação de getters e setters até a criação de seqüências de instruções.

A vantagem é que por exemplo o desenvolvedor não precisa se preocupar em saber que quando fizer X precisa também gerar métodos Y e Z com a seguinte nomenclatura. Mas tudo é feito automaticamente e sem emporcalhar o código assim como é em Java, onde o Eclipse gera código para você mas fica tudo lá no arquivo, ocupando espaço e atrapalhando a leitura.

[quote=Thiagosc][quote=mario.fts]
poderia citar um exemplo de linguagem? não conheço nenhum caso onde não exista nenhuma necessidade de patterns, seja eles quais forem.[/quote]

Lisp é um exemplo onde todas as repetições podem ser abstraídas. Desde a criação de getters e setters até a criação de seqüências de instruções.

A vantagem é que por exemplo o desenvolvedor não precisa se preocupar em saber que quando fizer X precisa também gerar métodos Y e Z com a seguinte nomenclatura. Mas tudo é feito automaticamente e sem emporcalhar o código assim como é em Java, onde o Eclipse gera código para você mas fica tudo lá no arquivo, ocupando espaço e atrapalhando a leitura.[/quote]

Me corrije se eu entendi errado sua colocação: nesse caso você não poderia simplesmente colocar o método public? Se é só pra ler e gravar a propriedade e você não quer gerar código, qual a diferença?

Sobre Teoria da Computação: talvez você não tenha tido um bom professor. Eu adorei a matéria, assim como Compiladores e fiz meu mestrado nessa área. Teoria da Computação você entende porque tem problemas que nunca poderão ser resolvidos por um programa e aprende a analisar a complexidade de algoritmos. Facilita entender por exemplo, porque em algumas situações um algoritmo exponencial tem mais performance que um logaritmico e outros problemas que parecem simples, mas se você fizer muitas iterações ele vai ‘lá em baixo’ a performance, da mesma forma que é possível entender porque tem compiladores mais rápidos e porque RISC consegue otimizar a performance sem se preocupar com novo processador.

[quote=Thiagosc]
Lisp é um exemplo onde todas as repetições podem ser abstraídas. Desde a criação de getters e setters até a criação de seqüências de instruções.
…[/quote]

não, eu estava me referindo a patters de design, como strategy, chain of responsability, factory, dao, activerecord e etc. getters e setters eu nem considero um padrão. se for assim, ruby tbm gera eles automaticamente, não precisaria partir pra lisp

[quote=marcosalex]Me corrije se eu entendi errado sua colocação: nesse caso você não poderia simplesmente colocar o método public? Se é só pra ler e gravar a propriedade e você não quer gerar código, qual a diferença?

Sobre Teoria da Computação: talvez você não tenha tido um bom professor. Eu adorei a matéria, assim como Compiladores e fiz meu mestrado nessa área. Teoria da Computação você entende porque tem problemas que nunca poderão ser resolvidos por um programa e aprende a analisar a complexidade de algoritmos. Facilita entender por exemplo, porque em algumas situações um algoritmo exponencial tem mais performance que um logaritmico e outros problemas que parecem simples, mas se você fizer muitas iterações ele vai ‘lá em baixo’ a performance, da mesma forma que é possível entender porque tem compiladores mais rápidos e porque RISC consegue otimizar a performance sem se preocupar com novo processador.
[/quote]

Não sei o que Teoria da Computação tem a ver com o meu comentário. Explique, o que isso tem a ver?

E, corrigindo-o, esse foi apenas um exemplo. Pode-se criar qualquer coisa, desde implementação de métodos de forma diferente ou até classes dessa forma automática, o que é impossível em Java (e também é em C++ ou C# ou Ruby, etc).

[quote=mario.fts][quote=Thiagosc]
Lisp é um exemplo onde todas as repetições podem ser abstraídas. Desde a criação de getters e setters até a criação de seqüências de instruções.
…[/quote]

não, eu estava me referindo a patters de design, como strategy, chain of responsability, factory, dao, activerecord e etc. getters e setters eu nem considero um padrão. se for assim, ruby tbm gera eles automaticamente, não precisaria partir pra lisp[/quote]

Sim, todo e qualquer pattern, como strategy, factory, dao, etc, podem ser gerados automaticamente. É possível criar definições de classes, implementar métodos ou funções, etc, em tempo de compilação. Qualquer pattern pode ser abstraído em Lisp, o que não é possível em linguagens inferiores.

O problema é que quando nesse tipo de liberdade o termo “patterns” perde o sentido. “Patterns” só existem porque as linguagens que usamos são deficientes. Um modo interessante de se programar que é usado em Lisp é o desenvolvimento de forma iterativa, onde a aplicação é desenvolvida gradualmente após várias iterações onde adiciona-se funcionalidade e refatora-se o código. Nesse caso as repetições seriam removidas antes mesmo que viessem a configurar um “padrão de projeto”. É outro mundo.

Thiagosc e sua diarréia mental.
Fico impressionado como uma coisinha de nada vira um rebuliço desses.
Então patterns existem pq as linguagens são deficientes… Aff…

Ok, parei, não falo mais nada.