Executando verificação de segurança...
2

Que comentário edificante, com certeza não é crítica destrutiva, mas uma excelente afunilamento e a maneira correta de olhar para minha publicação. Muito obrigado pelo baita complemento!

Sobre alguns pontos:

Fundamentos, fundamentos mesmo, talvez você saiba. Tem o detalhamento de fundamentos. Isso quase ninguém sabe tudo.

Sei que existem diferentes níveis de abordagem para os fundamentos, mais baixo nível (detalhado, esmiúçado e/granular) e o mais alto nível, meu objetivo no artigo foi tentar ser o mais imparcial possível quanto ao nível, mas não tem jeito, tópicos que pra mim são importantes se eu pensar com minha cabeça mais backend com certeza irei pecar quando alguém com a cabeça de fronted ler.

Mas, com as breves descrições o objetivo era esclarecer que estes "fundamentos" estão em ambas as vertentes (backend, frontend, middle-end, etc) e níveis diferentes (top, down, middle, etc).

E também você tem razão em dizer que nem tudo o que eu trouxe são fundamentos de programação, neste compilado meu intuito era trazer o que eu achava de mais útil para a pessoa pensar em ter como pontapé inicial, sendo disciplinas fundamentais, habilidades fundamentais e maneiras fundamentais de pensar... mas de fato, nem tudo seria um fundamento de programação. Ex. Prática é um fundamento comportamental, Compreensão de Problemas é um fundamento disciplinar, Objeto é um fundamento mais abstrato, Classes já é mais específico, Sistema Operacional é um fundamento de alto nível, já o terminal é mais baixo nível e mesmo assim ele tem outros fundamentos compondo ele.

Já posso agradecer, até porque ajudará o que eu estou fazendo ser melhor.

Fico muito feliz que eu possa ter colaborado para sua missão, com certeza estou muito curioso para saber sobre o que você costuma compartilhar em suas redes sobre "Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente." e se eu pude ajudar pelo menos com uma partezinha mínima se quer deste processo ficarei ainda mais feliz!

E tenho que dizer que o fundamento é básico, não é algo avançado.

Aqui tenho um contra-ponto a dizer: Existem níveis diferentes de abstrações, logo dependendo do nível de fundamento que estamos falando e o nível de domínio do assunto que desejamos ter... às vezes só precisamos saber trocar o óleo do carro e outras vezes precisaremos sujar nossas mãos no óleo para trocar o escapamento, são níveis diferentes de compreensão e fundamentos diferentes. O interessante aqui é entender que um fundamento é base para outros fundamentos.

Só mais um complemento neste tema fundamentos, estamos alicerçados nos fundamentos de nossos antepassados e por isso é incrível saber a história de como as coisas aconteceram, porque tal autor tomou tal decisão pra isso ou aquilo e com base nisso aprender a tomar boas decisões também.

Fundamentos não são teoria chata.

Concordo demais, como tudo na vida, fundamentos são aprendidos também e eles podem ser aprendidos de maneira divertida, seguindo o mesmo processo de aprendizado que qualquer ferramenta. Mas, este comentário me gerou um ponto interessante: Será que crianças quando estão no processo de aprendizado aprendem quais fundamentos para o início de sua vida? Por exemplo, aprender, falar, andar, enfim.... isso é muito interessante!

treina o erro.

Isso é matador. Não teria melhor benefício para o fundamento do que este, de não errar, de não propagar o erro e de não deixar ser enganado pelo errado.

Eu não gosto do termo "lógica de programaçao", mesmo amplamente usado.

Eu procurei em inglês (Programming Logic) e encontrei esta página How to Improve Your Programming Logic. Mesmo assim, neste ponto concordo com você de que o termo Lógica de Programação é ambíguo, não consistente e não faz sentido. Pensando nisto, inclui ele nessa lista de fundamentos como inter fundamento necessário para ter a crítica de sequenciar os passos de maneira lógica, tomando decisões a cada tarefa e entendo se vale ou não esmiúçar aquela tarefa, com o objetivo de resolver determinado problema. Em miúdos, Lógica de Programação (que não consigo pensar numa identificação melhor e mais genérica) é o pensamento de analítico de solução do problema, enquanto Algoritmo é a implementação desta resolução.

Não sei se eu classificaria pseudocódigo como fundamentos

Inseri pseudocódigo na lista pensando na maneira mais simples que qualquer pessoa poderia resolver um problema com código sem ao menos ter conhecimento bruto de semântica das linguagens de programação, somente tendo o conhecimento de sua linguagem natural e algumas poucas regras estabelecidas e a partir daí criar algoritmos.

É mais uma forma simplista de pensar como construir algoritmos para resolver problemas, pensando assim, também poderia ter incluído Dividir pra Conquistar e por aí vai, mesmo assim, minha ideia era ser genérico o suficiente para utilizar em todos os aspectos na tecnologia, especificamente para programação.

tem muito material errado.

Sem dúvida alguma, tentei ser o mais imparcial possível e até deixei no início da publicação para pesquisarem e ponderarem sobre estes tópicos e principalmente, quando se aprofundarem neste tópico, procurar materiais de boa qualidade, com base em instuições bem conceituadas, com pessoas bem estabelecidas e com conteúdo comprovadamente correto, pois não adianta só aprender qualquer fundamento, tem que ser os fundamentos corretos e com o conteúdo correto.

Eu iria só no nível mais alto.

Até tentei nivelar, mas, fui pensando nos meus diferentes momentos de estudos, desde inciante até agora - um iniciante com um pouco mais de compreensão disso - e percebi que alguns fundamentos estão presentes em níveis diferentes também, por exemplo o Gerenciamento de Memória, este é um assunto que é possível olhar o nível baixo como um espaço na memória, que a memória poderia estar em qualquer lugar, como cache, armazenamento randomico em registradores, memória persistente ou etc, ou olhar mais alto nível de complexidade mais ainda sim um fundamento, como um GC ou então alocação dinâmica e estática, e por aí vai... este assunto é gigante e tem fundamentos importantes pra todo o lado.

O que fala de objetos...

Concordo, objetos não são fundamentos, são abstrações de fundamentos e é mais um conceito do mundo real do que de fato um fundamento, inclusive irei remover este cabra da lista.

Versionamento é importante

Aqui tenho um contra-ponto: Versionamento é importante como um fundamento, pois existem diversos tipos de códigos, arquivos, estruturas e atualizações, correções ou remoções que precisam ser controlados, rastreados e organizados de certa forma e ter essa compreensão é fundamental para melhorar sua programação e avançar em outros tópicos. Talvez não seja fundamento o processo de versionar por exemplo com o git no github, mas este fundamento vai além do git. Existe o versionamento semântico, versionamento de api, versionamento de código, versionamento de arquivos e pastas e em conjunto a este conceito, também incluo backups e suas estratégias, organização de todos estes conteúdos e seus arquivos correspondentes, disponibilidade dessas informações, etc. Entendo o versionamento como um fundamento abrangente e muito necessário, até mesmo como um dos primeiros fundamentos.

Não tome isso como críticas

@maniero, já te acompanho a muito tempo e sei que todas suas análises críticas ou não são preciosas, trazendo mais qualidade em pontos que jamais nem chegariamos perto de pensar, então mesmo sendo crítica ou não, pra mim este seu complemento é muito valioso! Muito obrigado por isso mister.

Carregando publicação patrocinada...
2

Em miúdos, Lógica de Programação (que não consigo pensar numa identificação melhor e mais genérica)

Se o pensamento/documento é do tipo:
Se isso então aquilo senão aquele outro fim se
que eu acho que são a maioria dos documentos, então o termo que mais se adequaria seria Lógica de programação imperativa.

Um problema que eu acho interessante para brincar com lógica é o SEND + MORE = MONEY.

1

Na realidade quando falo Lógica de Programação é diferente do Paradigma de Programação utilizado, na realidade, quando expressei lógica de programação é o pensamento que irá decidir entre utilizar um Paradigma ou outro em detrimento da resolução de tal problema. Ou seja, é como se a Lógica fosse a mentalidade de decisão das melhores coisas para resolução de um problema e o Paradigma é uma ou outra maneira de resolver determinado problema. Digamos assim:

Existe um problema (Problema e Domínio) -> Análiso o problema pensando nas soluções possíveis (Lógica de Programação) -> Escolho uma maneira de me expressar para resolver tal problema (Paradigma de Programação) -> Penso na maneira mais simples de representar a resolução deste problema (Pseudocódigo) -> Gero um algoritmo que será a minha implementação do pseudocódigo (Algoritmo) -> Se quiser posso pular pra implementação com linguagem formal (Linguagem de Programação).

Talvez, os passos acima estão em ordens diferentes, com algumas pequenas nuânces, mas essa é a ideia que quis expressar quando citei Lógica de Programação como fundamento.

E como disse, não sei como representar isso com outra nomenclatura mais simples, talvez Lógica Computacional, talvez Decisão Analítica, etc...

2

Já que o assunto é fundamentos, vamos aos fundamentos. Primeiro seria o que é programação imperativa.

Como nas referências do teu artigo tem um link Lógica de programação, por onde começar? , resolvi dar uma olhada. Ok, 13 minutos dá para deixar rolando. Tem muita coisa no vídeo que está citado no teu artigo. Mas, basicamente é o que eu escrevi: Lógica de programação para linguagens imperativas.

A primeira dica é: Nunca diga qualquer linguagem. A menos é claro, que você realmente conheça todas as linguagens e saiba do que está falando.

O primeiro exemplo de "pseudo linguagem" é um C traduzido. O segundo é um Pascal traduzido (não sei o motivo de terem trocado := por <- ; poderiam deixar apenas =). Depois mostra um código em Java. E depois Swift. Todas são imperativas, confere? É, mas Java e Swift são OO. Ok, nenhum impedimento. A receita de bolo também é um exemplo imperativo. Tem os ingredientes (ovos, farinha, etc.), os procedimentos seguindo uma ordem (misturar, bater, cozer) e servir. Troca os ingredientes por variáveis e constantes, os procedimentos pela transformação das variáveis inicias e o resultado por um relatório que é a mesma coisa. Então, um programa é apenas uma receita de bolo bem detalhada.

Depois são apresentados alguns outros conceitos (constantes, variáveis, for, while, etc.) e diz que precisa dominar estes conceitos para qualquer linguagem de programação.

Lembras do que eu escrevi ali em cima? Nunca diga isso. Existem diversas linguagens/paradigmas que o que foi ensinado não é aplicável. É possível citar APL, Prolog entre outras. Não vou colocar exemplos aqui para não sujar o tópico. Mas podes ver um exemplo neste link.

Espero ter auxiliado em alguma coisa.

1

Olá @guaracy, agora entendi! Realmente a maioria dos exemplos e a forma das explicações que trouxe aqui se referem ao paradigma imperativo e você tem razão em apontar isso, muito obrigado. Você tem sugestões de fundamentos para outros paradigmas de programação? Em Prolog por exemplo utiliza variável também? Em Lisp tem o conceito de classes também?

Acredito que essa colaboração não sujará a publicação, mas será uma das melhores contribuições para este tema, tenho certeza disso. Muito obrigado mais uma vez pelo apontamento tão importante!!!

2

De uma forma geral, as linguagens podem associar nomes a valores. Chamando de variável, associa-se ao conceito de mutabilidade.

tot = 0
for valor in lista
  tot = tot + valor

No caso acima, tot é uma variável. Em Prolog, depois de atribuir um valor para tot ele não poderá mais ser alterado dentro do escopo. Teria um comportamento parecido com o de uma constante. Já em linguagens funcionais, uma expressão do tipo a = a + 1 nem faz muito sentido. É como uma função recursiva.

Lisp é uma linguagem que pode ter quase tudo. Em Lisp tem o CLOS (implementado no SBCL). De qualquer forma, a definição de linguagem orientada a objetos pode ser meio polêmica. Se não me engano, Clojure não implementa OO. Como tem gente que não gosta de OO mesmo

1

estamos alicerçados nos fundamentos de nossos antepassados e por isso é incrível saber a história de como as coisas aconteceram, porque tal autor tomou tal decisão pra isso ou aquilo e com base nisso aprender a tomar boas decisões também.

Eu adoro isso. IMHO, falta um pouco mais de ver esss coisas em todo mundo.

Existem lugares usando o termo de lógica de progranmação em inglês, mas não tem sendo usado como por aqui, cheio de luvros com isso no título, o que deu legitimidade para ele, sem ser bom. Se bobear por lá pegou vicio daqui :D

Obrigado por todo reply.

#tamojunto

2

Eu adoro isso. IMHO, falta um pouco mais de ver esss coisas em todo mundo.

Valorizar nossos antepassados é valorizar os fundamentos que eles nos deixaram como legado (no sentido bom da palavra) e realmente falta estimas neste sentido.

Eu que agradeço mais uma vez nobre!!!