Como iniciar na programação! - Thread dos candidatos a n3rds :D

Porquê começar com C para depois passar a VB .NET? Começar no mais difícil e depois passar ao mais fácil? Acho que deves começar logo por VB (e ASP .NET, já que é para Web...)
Sim. Sou a favor disso.
Repara, se começares pelo princípio, pela teoria, pelo mais fundamental (fora o Assembly), ficas com conhecimentos que te permitem compreender o que estás, no fundo, a fazer em linguagens de mais alto nível. Ok, no C tens pointers e no VB não precisas deles, mas é bastante melhor saberes que eles existem e como trabalham do que ires para VB feliz e contente, para depois, quando fores para C, não perceberes pevas daquilo por ser tão complicado. Acredita no que te digo - eu ja passei (=estou a passar) por isso, e a melhor maneira que arranjei para me adaptar à sintaxe do C sem ter de saber a linguagem foi aprender PHP e Javascript. Pelo menos nisso já estou à vontade, mas passar para C ainda promete ser um grande desafio. Tudo porque comecei no VB.
 
Vou ter de discordar. Não interessa saber sobre apontadores.
Basta saber que eles existem, que são uma enorme confusão e que provocam memory leaks e segmentation faults se não forem utilizados correctamente, o que leva tempo a aprender e a por em código. Basta saber que isso tudo é automagicamente tratado e não corres nenhum desses riscos sem necessidade de aprenderes o que quer que seja sobre * e &.
E se o teu problema foi a sintaxe de C... Não sei se aprendeste VB6 ou VB .NET. Se aprendeste VB6... Bem, VB6 é um aglomerado de "coisas" que só faz mal a quem usa. VB .NET... é uma linguagem ORIENTADA A OBJECTOS! C não é. Faz diferença.
O objectivo aqui não é aprender C no final. É aprender a programar para Web, com ASP e bases de dados. Nem quero pensar em usar bases de dados em C........
Se pensares bem, podemos usar o teu argumento para aprender Assembly antes de C. Porque assim sabes que o que realmente acontece quando fazes v é um LEA... Aprendendo assim
ficas com conhecimentos que te permitem compreender o que estás, no fundo, a fazer em linguagens de mais alto nível.
E podemos repetir, agora para opcodes, e depois para circuitos com portas lógicas... E repetir novamente...
Assim chegamos a...
PARA APRENDER A PROGRAMAR DEVE COMEÇAR-SE POR PERCEBER AS INTERACÇÕES BÁSICAS ENTRE PARTÍCULAS SUBATÓMICAS QUE ESTÃO NA BASE DOS EFEITOS ELECTROMAGNÉTICOS.
Não.
 
Última edição:
Acho que interessa saber tudo o que se puder saber. Eu quero seguir carreira de programação no futuro, e, na minha opinião, todo o conhecimento é pouco. O fundamental é saber programar, mas ao saber programar em linguagens de baixo nível, é quase automático conseguir programar em linguagens de alto nível. Já o contrário não é assim tão simples.
Basicamente, eu sei programar em VBs, Delphis, PHPs, Perls, etc. mas se quiser programar Assembly ou C, tá quieto. Já se tivesse começado por C, não teria estas complicações.

Claro que para aprender a programar para a web, ASP ou PHP dão para o gasto, mas isso não é tudo o que há na programação. Se eu quiser desenvolver um sistema operativo, nem VB nem Delphi me servem para nada. Se eu quiser fazer uma distro de Linux, não vai ser o ASP que me vai ajudar em alguma coisa. Mas se souber C, estou lançado.

Comecei com QBasic, segui para Pascal (top-down), e só depois é que passei para VB (algo parecido com OO). Aprendi PHP e Perl (top-down). Quando tiver um computador que suporte o IDE, vou ver se aprendo VB.NET (OO). E no entanto, estou consciente de que C é que é importante aprender, e não consigo fazer quase nada em C. Sei bastante pouco sobre esta linguagem, e a falta de um manual decente também não ajuda nada. A única coisa que fiz em C foi uma aplicação do método da bissecção para demonstrar o raciocínio iterativo num relatório de Matemática.
Quase que aposto que se te mostrasse o source, ficarias horrorizado, já que eu não conheço boas práticas na programação em C; só as que me parecem óbvias.

Tudo depende daquilo que uma pessoa quer para o seu futuro. Eu não quero ser simplesmente um programador; quero ser um bom programador, e para isso, é bom conseguirmos abstraírmo-nos de uma linguagem, e inclusive saber escolher a melhor para o fim pretendido. Afinal, se eu quiser desenvolver um password cracker - bruteforcer, a velocidade é fundamental, e se o fizer em VB6 devo ter um milionésimo da velocidade que conseguiria obter se o fizesse em C. Claro que há-de ser mais fácil de o programar em VB6. Simplesmente não devo fazê-lo, e é preciso ter algum conhecimento sobre as linguagens em causa para saber escolher a melhor.

Para teres uma ideia, a única coisa que sei de memory leaks é que o Firefox as tem, e de segmentation faults, é que quando existem, o código está passível de um buffer overflow, que por sua vez é quando se tenta escrever mais do que o espaço que está alocado para um buffer. E eu, que gosto da área da segurança, gostava de um dia conseguir compreender como trabalham alguns exploits, mas enquanto não souber Assembly nem C, isso nunca vai acontecer.

E isto tudo veio porque a linguagem de programação que melhor manipulo é o VB6. Se um dia eu quiser fazer alguma coisa de jeito, não vou longe assim. Por isso é que sou da opinião que é sempre bom começar por linguagens de baixo nível. Não por Assembly (também não exageremos), mas por C.
 
Saber programar. A questão é que se começares em baixo nível (C), ou tens alguém que sabe e te ensina, ou vais acabar por aprender a programar MAL. Vais aprender a fazer "atrocidades" com apontadores. É difícil (e chato!) programar correctamente com apontadores (coisas relativamente grandes, pelo menos). Sem um método rigoroso, acaba por cair-se em vários pitfalls da linguagem. Um autodidacta raramente segue um método rigoroso.

Memory leaks acontecem quando se deixa memória alocada sem referência. A maneira mais simples provocar uma é com malloc() sem atribuir o valor de retorno a nenhuma variável. Mas geralmente é algo tão inocente como
Código:
p1 = p2;
Onde p é um apontador que apontava para memória alocada dinamicamente (com malloc, por exemplo). Assim essa memória não foi libertada, e agora está completamente inacessível. Não basta certificar que existe um free para cada *alloc. No exemplo anterior, mesmo que tivessemos um free(p) mais à frente, continuavamos com o mesmo problema. Debugar cenas destas pode ser um pesadelo.
O Firefox tem. E montes e montes de software (mesmo comercial). São uma praga. Tudo porquê? C.

Segmentation faults é exactamente o que referiste. Aceder a memória que não foi alocada. Por exemplo:
Código:
p1 = p2;
free(p2);
p1 -> campo
p1 e p2 são apontadores. Este exemplo é bastante simples, mas serve bem para exemplificar.

Quase que aposto que se te mostrasse o source, ficarias horrorizado, já que eu não conheço boas práticas na programação em C; só as que me parecem óbvias.
Tocaste na ferida. Boas práticas na programação em C. C não foi desenhado com esse objectivo. Já C++... Para lá caminha. Linguagens como Java (há quem diga, eu não) e .NET (C#, VB), sim. Alguém que comece em C, muito dificilmente vai adquirir boas práticas.
scanf e printf. De certeza que já usaste. Mas usas os valores de retorno dessas funções? Ninguém usa (nem eu!). A scanf em particular, é uma das piores. Muitas vezes vêem-se statements como: scanf("%s", x); Problema -> o utilizador pode escrever o que quiser. Com o tamanho que quiser. Se o array x só tem espaço para 10 elementos, a scanf não vai verificar isso. Se o utilizador escrever vinte caracteres, a scanf vai escrever 10 em x (sem \0 a terminar...) e o resto no que quer que esteja para lá de x na memória. Se não "existir" nada, segmentation fault. Se existir... pior ainda. O utilizador acabou de alterar outras variáveis do teu programa.
É fácil de ficar "horrorizado" com código C de muito boa gente.

Tudo depende daquilo que uma pessoa quer para o seu futuro. Eu não quero ser simplesmente um programador; quero ser um bom programador, e para isso, é bom conseguirmos abstraírmo-nos de uma linguagem, e inclusive saber escolher a melhor para o fim pretendido.
Para isso deves ignorar linguagens de programação. Deves aprender algoritmos. Correção, complexidade, entre outras cenas. Também ajuda a escrever bons programas fazer análise prévia, com ferramentas com o UML, por exemplo.

E isto tudo veio porque a linguagem de programação que melhor manipulo é o VB6. Se um dia eu quiser fazer alguma coisa de jeito, não vou longe assim.
VB6 não é nada bom para aprender qualquer coisa. VB6 é bom para quem quer fazer "umas coisas" sem perder muito tempo nem ter de aprender coisas chatas.
E VB6 não é OO! VB6 é, no máximo, orientado a eventos. Em VB6 não existem conceitos fundamentais em OO como inheritance e cenas do género.

Sorry se foi agudo no post anterior.....

E quanto a fazer cenas de jeito... Não sei o que queres dizer com isso, mas hoje em dia só aplicações muito específicas é que requerem o uso de linguagens de baixo nível, como drivers ou outras coisas relacionadas com hardware ou SOs. Aplicações com necessidade CRÍTICA de velocidade... C++ consegue igualar C na boa. E é OO.
É óbvio que as linguagens que são compiladas para linguagens intermédias para posterior interpretação (Java, Python) são lentas. A plataforma .NET é ligeiramente diferente: as linguagens de alto nível (C#, VB) são compiladas para MSIL (Microsoft Intermediate Language). Quando o programa corre, cada função (o termo correcto é método) chamada é compilada para linguagem-máquina e é então executada. A primeira chamada a uma função é sempre um pouco mais lenta, mas posteriormente, é muito mais rápida, já que a compilação Just-In-Time (é assim chamada) oferece possibilidades de optimização que não estariam disponíveis em tempo de compilação. E ao contrário de Java, após o pequeno atraso no início, está a correr código nativo e não a ser interpretada outra linguagem.
Para fazer uma distro de Linux não precisas de escrever grande código. Só se quiseres reescrever o kernel ou assim. A maior parte das distros que existem por aí são apenas colecções de pacotes.
 
Última edição:
Saber programar. A questão é que se começares em baixo nível (C), ou tens alguém que sabe e te ensina, ou vais acabar por aprender a programar MAL. Vais aprender a fazer "atrocidades" com apontadores. É difícil (e chato!) programar correctamente com apontadores (coisas relativamente grandes, pelo menos). Sem um método rigoroso, acaba por cair-se em vários pitfalls da linguagem. Um autodidacta raramente segue um método rigoroso.
Então está explicado porque é que eu não consigo avançar sozinho :P

Memory leaks acontecem quando se deixa memória alocada sem referência. A maneira mais simples provocar uma é com malloc() sem atribuir o valor de retorno a nenhuma variável. Mas geralmente é algo tão inocente como
Código:
p1 = p2;
Onde p é um apontador que apontava para memória alocada dinamicamente (com malloc, por exemplo). Assim essa memória não foi libertada, e agora está completamente inacessível. Não basta certificar que existe um free para cada *alloc. No exemplo anterior, mesmo que tivessemos um free(p) mais à frente, continuavamos com o mesmo problema. Debugar cenas destas pode ser um pesadelo.
O Firefox tem. E montes e montes de software (mesmo comercial). São uma praga. Tudo porquê? C.
Hmm ... percebi. Era o que eu tinha deduzido, com algumas diferenças.
Aí acho que entrava alguma metodologia na forma de mexer nessas variáveis. Penso que qualquer grande projecto tenha de ter preparadas de antemão algumas formas de manipular essas variáveis. Com um bom plano por trás, acho que esses problemas seriam mais difíceis de acontecer; mas isso também sou eu, que só consigo idealizar a situação.
A minha forma de programar envolve criar funções (Subs e Functions) para quase tudo, e ir usando-as à medida que são necessárias. Se um espaço é alocado na memória, tem de ter algum objectivo, e para eu alterar o apontador para ele, então ele deve ter deixado de ser necessário. Logo, porque é que não se faz logo o free? E para que é que quererei alterar o apontador, para ele apontar para outra localização?

Não podes culpabilizar uma linguagem por isso. Se existem erros desses, de certeza que é por falhas dos programadores. Para programas complexos, o ideal é terem um plano à altura.

Segmentation faults é exactamente o que referiste. Aceder a memória que não foi alocada ou já foi libertada. Por exemplo:
Código:
p1 = p2;
free(p2);
p1 -> campo
p1 e p2 são apontadores. Este exemplo é bastante simples, mas serve bem para exemplificar.
Aqui era mesmo exactamente o que tinha deduzido :P
As segmentation faults que vi costumam usar o scanf, precisamente como descreveste mais abaixo no teu post.


Tocaste na ferida. Boas práticas na programação em C. C não foi desenhado com esse objectivo. Já C++... Para lá caminha. Linguagens como Java (há quem diga, eu não) e .NET (C#, VB), sim. Alguém que comece em C, muito dificilmente vai adquirir boas práticas.
É preciso uma linguagem estar desenhada para ter boas práticas para elas existirem? O que eu quis dizer com "boas práticas" é "não reinventar a roda" e saber ter o código bem planeado; não ter código repetido (a menos que seja estritamente necessário)... explicar é difícil, mas no fundo, é um pouco tentar arranjar um ponto em que não escrevemos código confuso, e em que conseguimos fazer código optimizado. Acho que isso é possível fazer em qualquer linguagem - basta conhecê-la.

scanf e printf. De certeza que já usaste. Mas usas os valores de retorno dessas funções? Ninguém usa (nem eu!). A scanf em particular, é uma das piores. Muitas vezes vêem-se statements como: scanf("%s", x); Problema -> o utilizador pode escrever o que quiser. Com o tamanho que quiser. Se o array x só tem espaço para 10 elementos, a scanf não vai verificar isso. Se o utilizador escrever vinte caracteres, a scanf vai escrever 10 em x (sem \0 a terminar...) e o resto no que quer que esteja para lá de x na memória. Se não "existir" nada, segmentation fault. Se existir... pior ainda. O utilizador acabou de alterar outras variáveis do teu programa.
Buffer overflows. Quando tentei aprendê-los, era o scanf que se utilizava. Até aqui eu percebi tudo, mas para conseguir saber compreender o resto (o que é que faz aquele exploit?), tenho de aprender ASM.

VB6 não é nada bom para aprender qualquer coisa. VB6 é bom para quem quer fazer "umas coisas" sem perder muito tempo nem ter de aprender coisas chatas.
E VB6 não é OO! VB6 é, no máximo, orientado a eventos. Em VB6 não existem conceitos fundamentais em OO como inheritance e cenas do género.
Eu comecei a mexer no QBasic aos 7 anos. Nessa altura, tudo o que sabia era-me mostrado pelo poderosíssimo F1 (e alguns conhecimentos de Inglês), e não fazia a menor ideia que havia muito mais para além do BASIC. Bem vistas as coisas, ninguém esperava que eu um dia quisesse fazer daquilo o meu futuro.

Se soubesse mais cedo, também não tinha forma de começar com o C, dada a complexidade da linguagem (e o facto de não ter internet e por ser em MS-DOS), mas com um bom manual, tudo é possível (foi com Bible's que aprendi a programar PHP e Perl)

Depois de conhecer a sintaxe do C, sinceramente, deixei de gostar da sintaxe do VB. É falar muito para fazer o mesmo.
Código:
Dim i as Integer
For i = 1 To 10
print i
Next i
vs
Código:
int i;
for(i=1;i<=10;i++) {
printf("%d\n",i);
}
(acho que é assim que se faz em C)
Acho a segunda sintaxe bem melhor.

Isto resume-se ao mesmo - se quiser fazer um futuro em programação, então saber C é um must.
Se quiser programar para fazer alguma coisa bonita, então qualquer linguagem de alto nível chega, como o VB.
Programar para a WEB? Eu ia para o PHP, mas dizem que ASP tem mais saída no mercado de trabalho.
Tudo depende daquilo que uma pessoa quer, e não se deve apontar exclusivamente para uma linguagem.

Para o davidoff, que queria programar para a web, com bases de dados e afins, eu apontava mais para PHP ou ASP, mas é precisamente porque ele prefere programar para a web do que executáveis. E nesse aspecto, é bem melhor ele preocupar-se em estudar bem a linguagem que utilizar para evitar possíveis falhas de segurança no planeamento (já vi com cada login em PHP...) como a nível de bases de dados (o belo do SQL Injection). Para ele sim, acho inútil aprender C.

Mas quando me dizem que "querem programar" (para o futuro), invariavelmente respondo C ou Perl (porque gostei da linguagem).

edit -
E quanto a fazer cenas de jeito... Não sei o que queres dizer com isso, mas hoje em dia só aplicações muito específicas é que requerem o uso de linguagens de baixo nível, como drivers ou outras coisas relacionadas com hardware ou SOs. Aplicações com necessidade CRÍTICA de velocidade... C++ consegue igualar C na boa. E é OO.
É óbvio que as linguagens que são compiladas para linguagens intermédias para posterior interpretação (Java, Python) são lentas. A plataforma .NET é ligeiramente diferente: as linguagens de alto nível (C#, VB) são compiladas para MSIL (Microsoft Intermediate Language). Quando o programa corre, cada função (o termo correcto é método) chamada é compilada para linguagem-máquina e é então executada. A primeira chamada a uma função é sempre um pouco mais lenta, mas posteriormente, é muito mais rápida, já que a compilação Just-In-Time (é assim chamada) oferece possibilidades de optimização que não estariam disponíveis em tempo de compilação. E ao contrário de Java, após o pequeno atraso no início, está a correr código nativo e não a ser interpretada outra linguagem.
Para fazer uma distro de Linux não precisas de escrever grande código. Só se quiseres reescrever o kernel ou assim. A maior parte das distros que existem por aí são apenas colecções de pacotes.
Por vezes sigo-me pelo que o meu pai me diz. Na empresa onde ele trabalhava, usavam maioritariamente C++ e Delphi para as aplicações, com o auxílio de VBScript; ASP e MSSQL Server para o lado web. Ele também me contou os problemas que tiveram com o SQL Server da Microsoft, mas aí eu já estaria a fugir ao tópico.
Pelo que eu vi, a necessidade de velocidade e capacidade de resposta é constante em ambientes de produção (isto, lado web).

Quanto ao Linux, o que me referia era: se eu quisesse reinventar o linux (:P), teria de saber C e ASM.
 
Última edição:
Qual o programa?

Boas pessoal! Estava a pensar a começar a programar mas não sei qual o melhor programa. Alguém por aqui podia-me dizer qual o melhor e fácil, sendo gratuito? Agradecia a dica. Cumps para todo o pessoal.:o
 
muito bom trabalho..por acaso ia procurar isto...bela informação!! Obrigado, teoricamente vou começar a fazer progamas...mais do que estranho...fazemos coisas num dia, o que centenas de pessoas no passado faziam num mes....(como por exemplo uma calculadora()
 
Site

Bom dia.

Gostaria de possivelmente contribuir com o tópico com o site: http://www.escolavirtual.org.br/
Neste site possui aulas online de alguns cursos de programação entre outros relacionados a informática. Tudo gratuito.

Não sei programar, mas vou tentar aprender com alguns links que encontrei aqui e com este site acima.
 
Só apenas discordo com :"um IDE é uma ferramenta que te dá dicas sobre como programar, tem algumas ferramentas úteis a um programador" --> IDE é apenas o Desing da aplicação através da qual desenvolves o teu código.;) Podes ter uma IDE tão básica como um NOTEPAD ou bem mais avançada tal como o VISUAL STUDIO.
O ECLIPSE (mt conhecido pela comunidade de programadores) não é mais que uma IDE e que pode ser adptada para editar qualquer app ;)

De resto este artigo tá excepcional p/quem quer dar ao dedo!
;)
 
IDE é apenas o Desing da aplicação através da qual desenvolves o teu código.;) Podes ter uma IDE tão básica como um NOTEPAD ou bem mais avançada tal como o VISUAL STUDIO.
Um IDE é muito mais que isso, e o Notepad não é um IDE. http://en.wikipedia.org/wiki/Integrated_development_environment

O Notepad é um simples editor, apenas isso. Queres um editor com funções de IDE (ou melhor, um IDE simplista)? Sugiro o Geany para uma mão cheia de linguagens. http://geany.uvena.de/
 
Boas, eu queria começar a aprender alguma coisa coisa de programação, que linguagem recomendam para começar?
Tal como já foi referido diversas vezes, em diversos tópicos, não há uma linguagem "boa" para se começar, mas pela minha experiencia (que ainda não é muita, mas já é alguma), é bom começar-se por C, que não é nada dificil de se perceber
Vai a este tópico, que tem uns livros e sites bons para se começar
 
Boas, eu sou novo neste Forum, mas ja programo a uns 3 anos, não é muito, mas ja sei umas coisas... ao contrario do que muitos disseram neste topico, qualquer linguagem que se utilize, é boa para entrar no mundo da programação, depende sim do paradigma que se utiliza, eu comecei com Pascal (muitos perguntam: "ainda se usa?", ou "o que é isso") e foi um bom principio... mas como o paradigma actual, muito utilizado é o OO (object oriented), sugiro que comecem com Java: funciona em qualquer plataforma, seja windows, linux, mac... logo que tenha a JVM instalada claro, e o site da SUN possui um tutorial, gratuito, muito bom para aprender http://java.sun.com/docs/books/tutorial/...pa quem nao gosta de ingles, é bom que comece a gostar tambem...
Cumps.
 
Boas, eu sou novo neste Forum, mas ja programo a uns 3 anos, não é muito, mas ja sei umas coisas... ao contrario do que muitos disseram neste topico, qualquer linguagem que se utilize, é boa para entrar no mundo da programação, depende sim do paradigma que se utiliza, eu comecei com Pascal (muitos perguntam: "ainda se usa?", ou "o que é isso") e foi um bom principio... mas como o paradigma actual, muito utilizado é o OO (object oriented), sugiro que comecem com Java: funciona em qualquer plataforma, seja windows, linux, mac... logo que tenha a JVM instalada claro, e o site da SUN possui um tutorial, gratuito, muito bom para aprender http://java.sun.com/docs/books/tutorial/...pa quem nao gosta de ingles, é bom que comece a gostar tambem...
Cumps.


Boas, e achas Java melhor que pascal para quem está a começar?
 
Boas, e achas Java melhor que pascal para quem está a começar?

sim, o tutorial que falei esta muito detalhado, tem tudo muito bem explicado desde as coisas mais basicas que se devem saber para programar... depois tem a vantagem de ser multi-plataforma, o netbeans, a ferramenta da SUN da para programar em multiplas linguagens (C, C++, Ruby, etc)... e quem começa com java, aprende o paradigma OO...outras linguagens tornam-se mais faceis de aprender, tipo C#... mas é claro, é a minha opinão...

ATENÇAO, eu não tinha lido todos os post deste topico.... os meus recentes post referem-se a minha experiencia, o facto de se fazer "asneiras" com apontadores em C, fazer codigo tipo esparguete, entre outras coisas...é perfeitamente normal para quem começa a programar, toda a gente que sabe programar ja o fez, pelo menos acho eu... e continuo a defender que o que se deve aprender sao os paradigmas, é claro que uma boa ferramenta de desenvolvimento ajuda, mas sabendo o paradigma, teoricamente so e preciso aplica-lo na sintaxe da liguagem a utilizar...

bota remedio
 
Última edição pelo moderador:
Back
Topo