Faculdades e compiladores

Vocês acham que a qualidade dos profissionais aumentaria dramaticamente se as faculdades tivessem uma disciplina somente para compiladores? Geralmente isso é visto em pós-graduação, mas acredito que isso é essencial para qualquer um. Talvez assim existisse menos idéias erradas com linguagens, pois as pessoas entenderiam como aquele texto é transformado em bytes.

Existe uma diferença entre entender o que é uma closure e como funciona uma closure. Quando você sabe como funciona é possível ter uma idéia muito melhor a respeito do valor de determinadas features e entender seus custos, seja em termos de tempo de CPU ou de desenvolvedor.

[quote=Thiagosc]Vocês acham que a qualidade dos profissionais aumentaria dramaticamente se as faculdades tivessem uma disciplina somente para compiladores? Geralmente isso é visto em pós-graduação, mas acredito que isso é essencial para qualquer um. Talvez assim existisse menos idéias erradas com linguagens, pois as pessoas entenderiam como aquele texto é transformado em bytes.

Existe uma diferença entre entender o que é uma closure e como funciona uma closure. Quando você sabe como funciona é possível ter uma idéia muito melhor a respeito do valor de determinadas features e entender seus custos, seja em termos de tempo de CPU ou de desenvolvedor.

[/quote]

Na faculdade onde me formei tive essa matéria. Meu professor era um cara altamente qualificado, mas a matéria em sim é bem difícil e não me agregou muita coisa.

[quote=Thiagosc]Vocês acham que a qualidade dos profissionais aumentaria dramaticamente se as faculdades tivessem uma disciplina somente para compiladores? Geralmente isso é visto em pós-graduação, mas acredito que isso é essencial para qualquer um. Talvez assim existisse menos idéias erradas com linguagens, pois as pessoas entenderiam como aquele texto é transformado em bytes.

Existe uma diferença entre entender o que é uma closure e como funciona uma closure. Quando você sabe como funciona é possível ter uma idéia muito melhor a respeito do valor de determinadas features e entender seus custos, seja em termos de tempo de CPU ou de desenvolvedor.

[/quote]
Bem Thiago, depende do curso que você faz. Em Ciência da Computação normalmente existe uma disciplina de compiladores. Uma teória e uma de laboratório. Entretando, em Sistemas de Informação isso normalmente não acontece, pois como um compilador funciona, teoricamente, não é problema de um analista de sistemas.
Outra coisa, não se iluda que você vai aprender como um closure funciona. Uma disciplina de compiladores vai tratar de aspectos mais formais e ser um pouco mais alto nível. No laboratório vc faz algo que funciona e que gera código, mas não vai aprender como funciona tudo.

Eu sinceramente não concordo quando vc diz que entender como funciona uma closure é melhor que saber o que é uma closure (ou qualquer outra funcionalidade da linguagem). Um desenvolvedor não tem que se preocupar necessariamente como as coisas funcionam dentro da plataforma que usa. Tem que se preocupar que funcionam e pronto e como usar. É claro, se vc precisa de algo com um comportamento muito diferente, vc vai precisar ir mais a fundo, mas de modo geral isso é perda de tempo.

[]´s

Essa talvez seja a principal diferença da Ciência da Computação para o Sistema de Informação.

Ciência estuda a teoria e “como as coisas funcionam”.
Sistemas estuda como se usa.

Me corrijam se estiver errado.

A diferença teoricamente é por aí mesmo.

Mas lembre que os nomes de cursos não necessariamente são condizentes com o conteúdo que eles ensinam, já que não tem uma regulamentação clara do que cada curso deveria ensinar.

Eu fiz ciencia da computação e tive a matéria de compiladores. Muito interessante diga-se de passagem.

++

No caso da minha faculdade a matéria não foi muito a fundo, mas mais por falta de interesse da grande maioria dos alunos (e de conhecimento também) do que por outra coisa. Mas é um dos assuntos que eu mais gosto, tanto que acabei comprando dois livros referentes ao assunto depois do término da cadeira.

No mais, concordo com o David Buzatto.

Eu acho que não.

Se as pessoas soubessem como algo funciona não existiriam discussões de qual linguagem é a melhor por exemplo, pois elas entenderiam o que uma feature acarreta e saberiam que existem n outras linguagens que implementam aquela feature.

OK Thiago. Se eu falar A vc vai falar B mesmo. Imagine um carro. Se ele tem ar condicionado, vc precisa saber com ele funciona? Vc precisa saber que tem o ar e como usá-lo. Enfim, não vou discutir.
Espero que esse tópico não vire um flamewar (como alguns outros dos seus tópicos).

[]´s

Desenvolvedores não são motoristas e precisam saber como as coisas funcionam. Uma linguagem de programação é muito mais importante do que um simples acessório, afinal de contas não é necessário ar-condicionado para um carro funcionar.

Interessante é que alguns fazem piada dos desenvolvedores de VB, como se eles só arrastassem e soltassem botões, mas e vocês? Vocês realmente sabem algo além dos javadocs? Não seria isso uma forma de VBizar o desenvolvimento de software?

Quem não conhece compiladores não é melhor do que um desenvolvedor VB.

[quote=davidbuzatto]OK Thiago. Se eu falar A vc vai falar B mesmo. Imagine um carro. Se ele tem ar condicionado, vc precisa saber com ele funciona? Vc precisa saber que tem o ar e como usá-lo. Enfim, não vou discutir.
Espero que esse tópico não vire um flamewar (como alguns outros dos seus tópicos).

[]´s[/quote]

Tb não quero criar um flamewar, mas não gosto de exemplos deste tipo q vc deu!

Ser programador nada tem a ver com ter carros ou qlq coisa do tipo!

É por achar que basta um conhecimento superficial das coisas que cada dia mais nossa profissão entra em descrédito e querem pagar cada vez menos.

É claro que não precisa chegar ao extremo de escovar bits e conhecer Assembly por exemplo, mas quanto mais profundo for o conhecimento de um programador melhor, e teoria de compiladores é o mínimo que um bom programador precisa saber.

Do jeito que a coisa tá indo daqui a pouco vão falar: “Programador não precisa conhecer Estrutura de Dados não”, se é que já não falaram.

Olhem os livros que o pcalcado lê por exemplo e veja se são livros de quem se contenta em saber apenas usar alguma coisa: http://www.flickr.com/photos/pcalcado/3704263002

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. São pessoas que podem cobrar até 200 reais pra fazer um ‘sisteminha’, isso não afeta o mercado de desenvolvedores.

Defender que até pra coisas simples seja necessário um profissional capacitado é o que faz os desenvolvedores Java terem essa fama de querer fazer tudo na mão e não gostar de nada prático.

O outro mercado é o de aplicações Enterprise, que a pessoa precisa ter realmente conhecimento técnico e área em que a grande maioria daqui trabalha, por isso nem precisa explicar.

Lembrem-se que programar não se resume a compilação.

Se seguirmos essa teoria, toda vez que quiséssemos persistir nossos dados em uma base de dados, deveríamos ter que estudar mais a fundo o SGBD, como ele se encarrega de arrumar seus índices, seu dicionário de dados, qual a forma mais eficiente de se criar uma procedure e uma trigger…

Lembrando também que há a fase de modelagem. Portanto, deveríamos estudar a fundo o desenvolvimento da UML, bem como os Diagrama de Sequencia, Diagrama de Classe, Diagrama de Casos de Uso, Diagrama de Estado, Diagrama de Comunicação etc…

Além disso, devemos testar nosso software. Portanto, devemos estudar a fundo como criar criar massas de testes automatizadas com eficiência.

Ah, e se quiséssemos que nossa aplicação acessasse a rede, deveríamos estudar a fundo os procolos utilizados, bem como a topologia da rede.
Sem falar que a comunicação entre computadores se baseia em conceitos matemáticos como a lei da refração (fibras óticas) e Serie de Fourrier.

Com isso, a faculdade de informática não só demoraria mais tempo, como criaria um profissional utópico, que saberia tudo de tudo e não direcionado a uma área específica da informática, como o mercado exige.

[quote=renamed]Lembrem-se que programar não se resume a compilação.

Se seguirmos essa teoria, toda vez que quiséssemos persistir nossos dados em uma base de dados, deveríamos ter que estudar mais a fundo o SGBD, como ele se encarrega de arrumar seus índices, seu dicionário de dados, qual a forma mais eficiente de se criar uma procedure e uma trigger…

Lembrando também que há a fase de modelagem. Portanto, deveríamos estudar a fundo o desenvolvimento da UML, bem como os Diagrama de Sequencia, Diagrama de Classe, Diagrama de Casos de Uso, Diagrama de Estado, Diagrama de Comunicação etc…

Além disso, devemos testar nosso software. Portanto, devemos estudar a fundo como criar criar massas de testes automatizadas com eficiência.

Ah, e se quiséssemos que nossa aplicação acessasse a rede, deveríamos estudar a fundo os procolos utilizados, bem como a topologia da rede.
Sem falar que a comunicação entre computadores se baseia em conceitos matemáticos como a lei da refração (fibras óticas) e Serie de Fourrier.

Com isso, a faculdade de informática não só demoraria mais tempo, como criaria um profissional utópico, que saberia tudo de tudo e não direcionado a uma área específica da informática, como o mercado exige.[/quote]

Ok cara, não vale a pena discutir uma coisa dessas. Cada profissional sabe o que é melhor para si próprio e estuda o que achar que tem que estudar.

Abraços.

Na boa, para aplicações normais tambem acho desnecessario, nós temos que saber usar e da melhor maneira, e pra isso não necessita saber sobre compiladores, talvez pra games, app’s realtime, ou que necessitem de muita performance, como pesquisa cientifica, calculos de iterações entre moleculas e afins.

Agora dizer que estudar compiladores vai mudar a vida de quem faz CRUD’s e regras de negocios, é um pouco exagerado.

Quem falou que eu estou comparando carros com programação realmente não entendeu a analogia.
Pena…

sou formado em ciencia da computação e tive praticamente 2 anos dessa materia…começa com 1 ano de teoria da computação (pior materia que existe) onde se aprende analisar complexdade de algoritmos, fazer analise lexica, grafos, etc…depois tive mais 1 ano de compiladores e interpretadores…

sou da opinião que para ser programador no Brasil não precisa disso em nada, eu não uso nada nada disso no trampo. Foi uma grande dor de cabeça e perda de tempo estudar tanto tempo isso.

Nossa, poderia citar aqui várias matérias (e temas) que estavam entre as minhas favoritas: Linguagens Formais e Autômatos, Teoria de Grafos, Arquitetura de Computadores, Compiladores, Sistemas Operacionais… entre outras que agora não lembro, mas que seguem o mesmo estilo. Até hoje me arrependo de não ter ido mais a fundo nessas matérias.

Claro que cada um tem uma opinião e respeito a sua, mas particularmente fico um pouco triste quando vejo alguém pensando dessa forma. Acho que no seu caso teria sido mais recomendado ter feito uma outra faculdade mais “alto nível” do que Ciência da Computação, como Sistemas de Informação (ou Tecnologia da Informação, como era na minha faculdade).

Em tempo #1: realmente não uso no meu trabalho praticamente nenhum desses conhecimentos adquiridos na faculdade, mas de forma alguma encaro isso como tendo sido uma perda de tempo. Pelo contrário, é o tipo de assunto que eu gosto e acho que abre meu leque de conhecimentos.

Em tempo #2: a grande maioria dos meus colegas de faculdade também tinham essa opinião de que essas matérias eram pura perda de tempo. Por acaso (ou não) praticamente todos eles são mais daquele perfil de não se importarem em evoluir, de assumir a evolução técnica e a busca pelo conhecimento de coisas novas como um desafio, se contentam em arrumar um emprego onde possam ficar anos e anos na mesma função, ganhando um salário não mais do que mediano (ou seja, estagnação) e por acaso também (ou não) a maioria ainda está nesse esquema e vivem chorando miséria.

Enfim, é uma questão pessoal isso. Cada um com seu cada um.

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

É verdade. O que mostra que você não foi muito preciso no que escreveu…
Pena…