Para onde caminha a programação?

Não é preciso ser-se engº informático para se saber programar. Até crianças podem aprender a programar usando, por exemplo o LOGO.

Não seria antes, LEGOS? Com LEGOS sei que programam, LOGO nem sei o que é...

Ola pessoal, gostaria de fazer uma pergunta minima.
Em que consiste a programacao?

Por acaso é uma boa pergunta, muitos dizem que é criar uma aplicação, eu cá acho que programação é tudo o que envolve a estrutura de uma aplicação, desde o desenho à sua implementação.

abraços, HecKel
 
E para complicar ainda mais, há quem tenha jeito para fazer algoritmos, mas não saiba programar, enquanto que há quem saiba programar, mas não tenha jeito nenhum para fazer algoritmos... :D
 
Pode até ser uma comparação estupida ... mas umas das comparações que faço entre liguagens de alto nivel e as de mais baixo nivel é a seguinte....

É como fazer uma sopa ... se usarmos uma sopa pre-feita da knorr como base e depois puser-mos mais umas batatas lá para dentro e uns feijões pode-mos ficar com uma boa sopa sem muito trabalho :002:...

Agora sera que a sopa vai se comparar a uma sopinha caseira feita por alguém que sabe?!... a sopa caseira demora mais tempo, e a mais probilidades de a fazer-mos mal se não souber-mos bem cozinhar .... agora para boms cozinheiros...

Sera que paga-mos mais num restaurante por uma boa sopa caseira ou pro uma pre-feita?..

PS: Isto é só uma comparação ... programar não é mesma coisa que fazer sopas :lol:...
 
Acima de tudo é preciso ter um nível elevado de abstracção para se ser um bom programador.
Senão nunca se compreenderia os conceitos abordados em linguagens como C, Haskell e outras...nem se compreenderia a arquitectura interna de um pc.
Não me venham com tretas de que não é preciso saber como funciona um pc por dentro porque dessa perspectiva, nunca saberiam interpretar código Assembly em IA32 e MIPS, muito menos, escrever instruções equivalentes, nem saberiam explicar a gestão da memória em Linux ou Windows.
Ah, e pergunto a esses filósofos, quantos deles é que conseguiriam implementar uma calculadora em VHDL sem saber o que é uma ALU, Unidade de Controlo, Stack, blablabla...
E não falo só de Assembly e VHDL, falo também de C (como se pode perceber a noção de alocação de memória, casts, aritmética de apontadores, etc sem perceber a arquitectura do computador para a qual se destina a aplicação?!) e outras linguagens em que se pode trabalhar com instruções ao nível da máquina.
Porque de web toda a gente pesca, até os mais nabos fazem meia dúzia de scripts da treta.
Porque é que acham que há muito boa gente que não gosta de C, Assembly e isso?
Porque não basta ser um mero utilizador da net, tem que se saber pensar sobre os problemas, tem que se ter métodos e, esses métodos de raciocínio não se aprendem de um dia para o outro.
E para quem estava a falar sobre a eficiência dos programas.
É óbvio que não basta a um programa ser funcional, tem de ser eficiente.
Por exemplo, eu tive de fazer um GPS em Prolog. Uma das tarefas do GPS era encontrar um caminho X entre A e B, alternativo a um caminho já existente mas que se encontrava bloqueado pelo trânsito.
Isto em Prolog é extremamente simples de fazer.
No entanto, este processo pode demorar 2 segundos (aplicando bem os "cuts" [para quem conhece a sintaxe]), ou pode demorar mais de 5 minutos!! (se estivermos a considerar um mapa decente, e não um projecto de 5 ou 6 ruas...)

@Steelboy19

Quem sabe fazer algoritmos, sabe programar: Basta aprender a sintaxe de uma qualquer linguagem.
Quem não sabe fazer algoritmos, PENSA que sabe programar, ponto final. Fazer a+b=c isso também os tais "putos" fazem. Implementar uma espécie de memória com heaps e stacks à mistura, isso nem todos conseguem...

Resumindo, há uma grande diferença entre O PROGRAMADOR que faz o código-base para os (vá lá) programadorezinhos, que aproveitam o que os outros fazem para criar janelinhas com mensagens do "All your base are belong to us!".
Os primeiros programam, os segundos "Pogramam"...
 
Não me venham com tretas de que não é preciso saber como funciona um pc por dentro porque dessa perspectiva, nunca saberiam interpretar código Assembly em IA32 e MIPS, muito menos, escrever instruções equivalentes, nem saberiam explicar a gestão da memória em Linux ou Windows.

Sim, para se programar em assembler é necessário conhecer a arquitectura, mas apenas uma fracção muito pequena de utilizadores precisa de programar em assembler. Lembro-me de ler, acerca do "velhinho" compilador Watcom C/C++ que o código-máquina produzido pelo mesmo era mais optimizado e eficiente do que o código-máquina produzido em assembler, mas não sei se é verdade.

Resumindo, há uma grande diferença entre O PROGRAMADOR que faz o código-base para os (vá lá) programadorezinhos, que aproveitam o que os outros fazem para criar janelinhas com mensagens do "All your base are belong to us!".
Os primeiros programam, os segundos "Pogramam"...


Sim, isso não se pode chamar programação, mas em última análise, e a não ser que se trabalhe exclusivamente em assembler, tem-se sempre que utilizar alguma espécie de biblioteca criada por outros. Eu já escrevi um motor 3d, e um simulador de voo, tudo em Qbasic, e não é por isso que me acho mais 'programador' que todos aqueles que usam o OpenGL. A maior parte dos programadores não tem (nem tem de ter, na minha opinião) conhecimentos aprofundados sobre, por exemplo, a álgebra das rotações para criar as suas aplicações.

Mas realmente percebo o que queres dizer, e concordo que realmente isso não é programar. Mas com todos os RADs que andam por aí é cada vez mai fácil criar aplicações; de qualquer modo é fácil separar as aplicações com janelinhas que não servem para nada das aplicações que realmente são úteis, acho eu...:)
 
Isto para mim há dois tipos de programador: os que sabem programar e os que pensam que sabem.

Os que sabem programar, já passaram por assembly, C e conhecem profundamente o funcionamento das máquinas. Sabem que um algoritmo eficiente é fundamental para criar uma aplicação boa e que por norma é melhor criar grande parte das suas funções de raiz em vez de usarem libs já feitas. Áh, e os que sabem programar mesmo, aprendem outras linguagens de programação muito facilmente.

Os que pensam que sabem, sacam umas libs feitas aí às três pancadas, copy paste de umas cenas que encontram na nete puf, fáz-se o chocapic! Por vezes vá lá, até dão uns toques de pé esquerdo e fazem algumas coisas de raiz, e quase que aspiram a programador que sabe.

Em suma, programas de grau profissional e com qualidade só feitos por alguém que saiba e seja cursado. O resto é conversa da treta.
 
Para aqueles que desconhecem a génese e a natureza da programação (e o facto de ela ser completamente independente e anterior aos modernos computadores), aqui estão algumas informações interessantes sobre uma das primeiras máquinas programáveis (construída em 1206):

Al-Jazari's machine was originally a boat with four automatic musicians that floated on a lake to entertain guests at royal drinking parties. It had two drummers, a harpist and a flautist. Professor Sharkey's machine has just the one drummer with a drum, cymbals, bells and no body. The flautist is replaced with an Irish penny whistle. He says he wouldn't risk taking this to any drinking parties round here.
The heart of the mechanism is a rotating cylindrical beam with pegs (cams) protruding from it. These just bump into little levers that operate the percussion. The point of the model is to demonstrate that the drummer can be made to play different rhythms and different drum patterns if the pegs are moved around. In other words it is a programmable drum machine.


http://www.shef.ac.uk/marcoms/eview/articles58/robot.html
 
Por acaso é bastante interessante isso. Blaise Pascal tem sido referido como um dos primeiros programadores graças à sua máquina de calcular, mas não fazia ideia que a noção de máquina programável já vinha de trás ;)

Sobre o futuro..., porque me cheira que Java é cada mais uma tendência? Apesar de a M$ já ter o .NET como plataforma (e o mono transpor o .NET para unix), tenho ideia que o Java vai ficar sempre um passo à frente...

abraços, HecKel
 
Sobre o futuro..., porque me cheira que Java é cada mais uma tendência? Apesar de a M$ já ter o .NET como plataforma (e o mono transpor o .NET para unix), tenho ideia que o Java vai ficar sempre um passo à frente...

abraços, HecKel

Pelo menos aqui em Portugal o .NET está presente em muitas empresas de engenharia de software, o marketing que a microsoft faz junto dessas empresas é impressionante.

Mas penso que o Java está cada vez mais em força, saiu à pouco tempo a nova versão do J2EE, JEE5, que parece trazer muitas novidades no desenvolvimentos de aplicações empresarias Java existindo muitos tipos de servidores aplicacionais com esta implementação, uns free (Sun, JBoss) outros nem por isso (IBM Websphere, Oracle, ...) .
 
Ó meu deus... acho que por momentos tive uma alucinação e vi algures q C ia morrer :lol:

Todas as linguagens têm o seu propósito e nenhuma vai morrer (quanto mt evoluir um pouco e mudar de nome....)

As linguagens de baixo nível vão ser smp necessárias para programas que precisem de uma boa optimização (web servers, drivers, sistemas de controlo de tempo real, daemons, etc...). Por outro lado as linguagens orientadas por objectos são óptimas para interfaces gráficas porque não necessitam de grande performance e são mt rápidas para produzir resultados...

O problema é que normalmente um programador de baixo-nivel facilmente consegue aprender e usar uma linguagem web-based agora o contrário já não é verdade... É isto que alguns users estavam a tentar dizer com os "putos" e "programadorzecos"... Isso irá smp ser um calcanhar de aquiles e não são flexíveis....

Isto posteriormente leva a algumas abominações interessantes como por exemplo um grande cg render chamado sunflow que é feito em JAVA! meu deus... eu comecei a fazer um port pra C++ e ganhei um boost da ordem dos 50-60%... imaginem se passa-se para C!

Desenganem-se aqueles que pensam que só porque sabem fazer umas coisas em java, php, c# ou asp que se podem intitular de grandes programadores... Se algum dia vos mandarem fazer uma base de dados personalizada e leve acham que vão pegar em linguagens OOP ou em SQL?!?! Nunca, isso era um completo suicídio e o que mais me irrita é que mts empresas cometem esse suicídio... Vejam por exemplo o caso simples da acer que manda umas m*rd*s de apps de origem com os portateis para gestao de energia, redes, backuos, etc que ocupam cerca de 450MB de ram e deixam o pc num caracol... sinceramente akilo mete nojo....

[]
 
Bem..., deixa lá responder a ver se esta thread não morre no meio das threads de dúvidas :P
Todas as linguagens têm o seu propósito e nenhuma vai morrer (quanto mt evoluir um pouco e mudar de nome....)

Mas ao evoluir ao ponto de mudar de nome..., é quase como morrer, não? Olha o caso do BCPL, deu origem à Linguagem B e que por sua vez deu origem à Linguagem C. Destas 3 só vejo a C a ser utilizada, se calhar muitos nem sabia a origem do C. É curioso..., que nunca chegaram à linguagem P :P

As linguagens podem deixar de ser utilizadas ao ponto de se poder dizer que morreram. Evoluir e mudar de nome, para mim, é criar uma linguagem nova.

O problema é que normalmente um programador de baixo-nivel facilmente consegue aprender e usar uma linguagem web-based agora o contrário já não é verdade... É isto que alguns users estavam a tentar dizer com os "putos" e "programadorzecos"... Isso irá smp ser um calcanhar de aquiles e não são flexíveis....

Salvo erro eu fui um dos que usou a expressão putos, mas não foi nesse contexto. Até discordo do mesmo, um programador de uma linguagem de baixo nível chega aos objectos e nem sabe o que fazer.

Eu chamo putos aos programadores que usam o estilo de programação à martelo, funciona tá bom! Infelizmente isto acontece cada vez mais é no mundo WEB, nem as normas respeitam e o que interessa é o visual. Vamos ver o código fonte e aquilo parece uma tempestade no deserto. Nada perceptível e só temos é vontade de cuspir terra..

Desenganem-se aqueles que pensam que só porque sabem fazer umas coisas em java, php, c# ou asp que se podem intitular de grandes programadores... Se algum dia vos mandarem fazer uma base de dados personalizada e leve acham que vão pegar em linguagens OOP ou em SQL?!?! Nunca, isso era um completo suicídio e o que mais me irrita é que mts empresas cometem esse suicídio...
Antes de contra-argumentar isto :P O que queres dizer com criar uma base de dados personalizada? Criar um SGBD? Ou criar apenas algumas tabelas e usá-las?

Se for a primeira, calo-me já e dou-te razão, apesar de saber que é possível.

Sobre a parte dos grandes programadores, existem em todos os níveis e em todas as linguagens, até podem ser uma m3rda noutras linguagens..., mas podem ser fenomenais em determinada linguagem/área.

abraços, HecKel
 
Nem mais, o que para um é ser um bom programador para o vizinho do lado é igual a 0, não se pode generalizar ao ponto de dizer que só se é programador quem já passou por determinada linguagem, ou que trabalho com X. Ninguem consegue ser bom a tudo, mas no fundo o que interessa nesta área são as bases, as rotinas de trabalho que temos e que a nós mesmos nos impomos.

Um bom programador é aquele que se esforça por não ter redundância de código, por optimizar o melhor que sabe no momento e, que procura sempre alargar os seus conhecimentos, nem que seja apenas na sua área. Lá por saber 1001 linguagens, isso não quer dizer nada, porque o que interessa mesmo são os resultados e a rapidez com que se consegue mostrar os mesmos.
 
O bom programador tenta optimizar o máximo do código, isso é verdade..... alguns conseguem outros não, já agora deixo aqui um exemplo do calculo do produto interno, feito de 3 maneiras diferentes.

float inner_product_1(){
float acc = 0;
for(int i = 0 ; i<N ; ++i){
acc += X*Y;
}
return acc;
}


float inner_product_2(){
float acc = 0;
for(int i = 0 ; i<N ; i+=2){
acc += X*Y;
acc += X[i+1]*Y[i+1];
}
return acc;
}


float inner_product_3(){
float acc0 = 0, acc1 = 0;
for(int i = 0 ; i<N ; i+=2){
acc0 += X*Y;
acc1 += X[i+1]*Y[i+1];
}
return acc0 + acc1;
}


Quando o código é compilado e traduzido para linguagem máquina de modo a que o CPU o compreenda, um destes códigos tem menos um clock por iteração do que os outros dois. Num for com muita informação, traz consequências ao nivel do desempenho.

Como vocês sabem não é a frequência do CPU que determnina o desempenho, mas sim a fórmula:

Processor Performance = IPC x Clock Frequency,

IPC = Instrunctions per clock, depende do programa que se está a executar.
 
Mas ao evoluir ao ponto de mudar de nome..., é quase como morrer, não? Olha o caso do BCPL, deu origem à Linguagem B e que por sua vez deu origem à Linguagem C. Destas 3 só vejo a C a ser utilizada, se calhar muitos nem sabia a origem do C. É curioso..., que nunca chegaram à linguagem P :P

As linguagens podem deixar de ser utilizadas ao ponto de se poder dizer que morreram. Evoluir e mudar de nome, para mim, é criar uma linguagem nova.

Por acaso no outro dia vi umas curiosidades da B mt interessantes como o facto de ter de declarar os parametros de uma função como variáveis locais (se tivesse prevalecido acabariam-se as duvidas de uma vez por todas no que diz respeito à história de passagem por referencia e por valor :-D). Mas tirando essa ou outra particularidade aquilo era praticamente igual a C o que no final de contas, quem programa em B acaba por programar em C num instante... Isto para demonstrar que quem sabe uma linguagem que não se preocupe em ir a correr aprender outra que esteja mais na "moda" que passado algum tempo volta outra linguagem da moda quase idêntica à q trabalha actualmente...

Salvo erro eu fui um dos que usou a expressão putos, mas não foi nesse contexto. Até discordo do mesmo, um programador de uma linguagem de baixo nível chega aos objectos e nem sabe o que fazer.

Não concordo... eu não me considero nenhum génio e aprendi c#/JAVA/C++ num ápice (atenção, utilizando objectos de forma decente)...

Antes de contra-argumentar isto :P O que queres dizer com criar uma base de dados personalizada? Criar um SGBD? Ou criar apenas algumas tabelas e usá-las?

Se for a primeira, calo-me já e dou-te razão, apesar de saber que é possível.

Tava mesmo a referir-me a uma SGDB... Só não usei essa sigla pro pessoal perceber melhor... Tava mesmo a referir-me aos casos em que se tem de gerir várias ligações de diferentes users, gerir politicas de segurana, backups, etc... fazer isto numa linguagem interpretada era no mínimo suicida em caso de bases de dados extensas e com grande fluxo de dados (digo-o de experiência própria) :P
E mesmo em casos mais simples como um simples server de LineageII se borra todo com "meia dúzia" de players...

[]
 
Bem, apesar de este tópico não estar a falar disto há um conceito de marketing que também é aplicado ao nível do negócio informático, o time to market.

Quando um cliente pede uma solução, a preocupação imediata não é se é optimizada, mas sim se é funcional e estupidamente bonita. E sim estamos a falar de alguns segmentos da banca também, todo o sistema transacional a nivel dos sistemas centrais tem que ser feito com linguagens de baixo nivel, senão era mesmo suicidio, mas todas as aplicações descentralizadas que são web-based e com frontends que variam do aspx ao jsp, ou jsf. Aí toda a logica de negocio é feita em java, C# ou mesmo .Net.

A programação é uma necessidade para solucionar um problema dum cliente, e aquele que apresentar uma solução com resultados em menos tempo e com um orçamento mais reduzido tem previlegio sobre os restantes. Todos sabemos que programar em alto nivel encurta o timing de programação, e isso é deveras importante hoje em dia. As linguagens de baixo nivel não vão morrer pq são fundamentais, vitais até em determinadas áreas de negócio, e por esse prisma nem penso sequer que vão baixar de importancia. Contudo, as necessidades emergentes são ao nivel de linguagens de alto nivel e essas sim, tem incrementado o volume de negocios e vão aumentar exponencialmente nos próximos anos.

Não adianta falar em que C faz uma rotina mais rapidamente que em Vb.Net, por exemplo, porque para o cliente isso não é transparente, apenas os resultados o são. E se estamos a falar em ganhar x milisegundos por rotina, também temos que perceber que o cliente se calhar não tem essa noção, portanto, isso não é uma preocupação dele. Será sim se o sistema rebentar, mas isso pode rebentar ao nivel de qq linguagem. Também pode ser mais lento, mas o hardware hoje culmata essas falhas. O maior problema nem é ao nivel de sobrecarga nos servidores, mas ao nivel de sessões transportadas na rede. Esse sim é talvez o maior problema.

Portanto, há sectores onde se aplica umas e outras. Não há maus e bons programadores só pq não programaram em Assembly, ou C. Até porque quem programa em Assembly dificilmente se orienta a programar em linguagens direccionadas a objectos.

Há bons e maus programadores de alto nível e de baixo nivel, e isso não se determina pelo percurso de linguagens ou pelo grau academico. A única mais valia que um percurso académico pode oferecer, é na sensibilidade de abordagem que pode ter, ou no nivel de abstração como se falava à pouco. Basicamente saber a melhor forma de fazer as coisas, saber como orientar um projecto que integra várias tecnologias, por exemplo. E isso sim, pode ser mto mais importante do que saber que a rotina X demora mais n microsegundos que a rotina Y só pq tá feito em Java em vez de C.
 
Última edição:
Lol, para coisas pesadas as coisas passam de micro-segundos para horas, dias e anos ;)

E independentemente da linguagem, um bom algoritmo é sempre muito importante. Por exemplo, algoritmos de ordenação, há uns quantos, mas se fosses usar o mais rasca para ordenar milhões de itens, aquilo demorava-te vários anos. Usando o melhor demora-te apenas alguns minutos ;)
 
Eu percebo-te Demio ;)

E é claro que tens razão, o que eu tentei transmitir é que cada linguagem tem um espaço, e não se pode relativizar as coisas ao ponto de que X é que é bom e o resto não presta.

Uma boa algoritmia é fundamental e no caso de se usar frameworks há que saber usá-las, já que elas existem com multiplas funcionalidades não há que reinventar a roda pq já alguem o fez por nós com codigo optimizado. Mas no mercado as coisas não são assim tão lineares como isso, infelizmente e vê-se por aí muitas barbaridades.
 
Lol, para coisas pesadas as coisas passam de micro-segundos para horas, dias e anos ;)

E independentemente da linguagem, um bom algoritmo é sempre muito importante. Por exemplo, algoritmos de ordenação, há uns quantos, mas se fosses usar o mais rasca para ordenar milhões de itens, aquilo demorava-te vários anos. Usando o melhor demora-te apenas alguns minutos ;)

qual radix quê? bubblesort nisso :msmiley1:
 
Back
Topo