[Preciso de Ajuda]Desenvolvendo conhecimento

Olá a todos, sou uma pessoa com 29 anos e estudo de forma curiosa a area de tech a uns 15 anos de forma meio generalizada, e hoje por não ter tido uma conhecimento formado de forma muito coesa, noto que falho em compreender assuntos principalmente de escopo iniciante, pois eles mais me pareccem um letramento do que uma forma de pensar. Por exemplo já estudei sobre o padrão MVC, POO, lógica de programação, e sempre estudo sobre lógica, mas não somento do ambito da programação pois estudo filosofia para melhorar meu modo de pensar, e ver o mundo. Atualmente estudo python para ser minha linguagem mãe,mas já programei em C, C++, C#, java, js, portugol, scrath, para entender a logica de programação de forma abrangente, muitas dos estudos que fiz em outras linguagens foi por "improdencia" e para tentar compreender a função real de uma linguagem, a de abstrair a construção do que a maquina precisa para uma forma fácil de ler. Mas não consigo efetivamente criar um fluxo de trabalho para uma pratica adequada, sempre que vou ler sobre um topico da documentão do python, parece que me falta algum conhecimento e se torna vago o estudo, hoje em dia me vejo com problemas para entender módulos e packages, pois algumas premissas que aprendi ao longo do tempo parecem serem invalidadas ou conflitantes. Acredito que seja por conta dos campos que estudei, que tratam certos pensamento de forma um pouco diferente do ato de escrever código, e gostaria de entender melhor algum fluxo para tornar os estudos mais coesos, já cursei 3 anos d engenharia de computadores, e acabo vendo muito as coisas por uma ótica matematica, simplesmente lógica, onde certos comando podem ser refeito com blocos de código já outros atraves de libs, mas não consigo evidenciar de forma sucinta isso em diagramas. Caso alguem possa me trazer alguma orientação em relação a essa situação serei muito grato, estou procurando experiência em projetos freelancer, já que hoje meu curriculo não está me permitindo entrar na area, e ainda não sei o que é q impede, mas estou fazendo um curso na EBAC, e em breve terei consultoria com profissionais de RH para entender melhor a defti do meu curriculo.

Lendo o seu pedido de ajuda, dá a impressão de que você já possui um entendimento de como a lógica de programação funciona e consegue escrever funções específicas para determinados requisitos. No entanto, parece ter dificuldade em compreender conceitos mais abstratos.

Esse tipo de dúvida é muito comum. Eu mesmo estive em uma situação semelhante quando terminei minha graduação e melhorei quando comecei meu primeiro emprego.

Uma pergunta para você: já desenvolveu algum projeto para alguém, mesmo que seja para si mesmo?

Estou perguntando isso porque tenho a impressão de que você gosta muito do conhecimento estruturado, mas há alguns conceitos que só aprendemos quando trabalhamos em algum projeto que atinge massa crítica, para que os conceitos mais avançados e abstratos façam sentido.

Por exemplo, você mencionou módulos em Python. Se trabalhar em um projeto pequeno, os módulos não ajudam muito. Você observará os benefícios dos módulos em projetos um pouco maiores. Da mesma forma, existem vários padrões de projeto que só ajudam em projetos de certo tamanho.

Minha sugestão é tentar desenvolver alguma aplicação de certa complexidade. Evite os aplicativos simples de lista de tarefas. Tente algo como um jogo simples ou um banco de dados simples em arquivo, algo de dificuldade mediana para você poder aplicar seus conhecimentos.

É esatamente nesse ponto que estou consigo entender o sentido das coisas ditas, e dado ao fato de eu não ter encontrado muitos conteudos para estruturação clara de diagramas me dificulta a fazer projetos de médio e grande porte, o desafio me estimula. Tenho grandes dificuldades de comunicação por não me dar muito bem em meios sociais, isso me impediu muito, hoje por notar estou buscando ajuda, não sei se há uma forma "correta" de usar os elementos de diagramção(a mais simplificada, pois sei que há um padrão UML, que foi abstraido da ciencia de gestão para facilitar a comunicação), mas na hora de fazer uma exemplificação minha cabeça da tilte, pois não é feito exatamente para que só eu entenda mas para que outros também possam ler, e nesses casos sempre acabo seguindo o caminho mais complexo, sei que já consegui uma base rasuavel para desnvolver, porem todos os programas que tento planejar inicialmente me parecem sempre quenos ou grandes de mais para o ponto que estou. Os programas que já produzi foram sites e alguns programas rodando apenas em linha de comando, alguns poucos usando GUI, mas pequenos como calculadoras e cadastros de produtos. Uma unica vez comecei a pensar em programa que resolveria um problema mais real, porem acabei por sair da empresa que me gerou o insite, e acabei perdendo os requisitos por falta de tempo de plajar, do momento que houve a ideia até a saida. Ficarei grato se houver alguma sujestão de projeto, pois estou me sentindo andando em circulos.
Vou preparar algo mais elaborado para voce este fim de semana. Tem muita gente perguntando sobre ideas para projetos pessoais / portifolio para initiciantes. Eu vou criar algo para a galera se inspirar :)
I like this!!!
Gravei um video no youtube: https://youtu.be/2Ev8QYgQaiM Montei um projeto no GitHub para tentar guiar o pessoal com esta mesma duvida. Neste projeto eu quebro os requerimentos de um aplicativo de emprestimo de items que pode ser usado como referencia para projetos pessoais / portfolio. No projeto eu uso ao menos um fluxograma e um diagrama de classes super basico para demonstrar como eles podem ajudar no deselvolvimento. Eu concordo que em exemplos simples como este os diagramas sao opcionais, mas o intuito foi demonstrar como um processo de desolvimento ocorre no mundo real. Espero ter ajudado. Abrs

Acredito que um bom começo é investir em uma graduação em Análise e desenvolvimento de sistemas

O que te falta é a base. É muito difícil aprender base na internet ou sozinho.

A base que se refere, ela seria o que?Quais temas? Pois já fiz alguns cursos que fazem parte da grade, e quanto estava na curso de engenharia, me senti sendo levado a ser algo como um gestor não um desenvolvedor, o que me fez desisti, e procurar sempre ver livros e temas que vem de uma grade, confeço que até hoje nunca estudei binário da forma mais indicada, e no presente momento não consigo inciar um curso, mas tenho sim a pretenção, sempre fui auto de data, e consigo absorver bem, de dado a isso estou buscando solidificar melhor minhas bases e conhecimento
base seriam: Algoritmos estrutura de dados logica booleana redes sistemas operacionais e hardware
Poderia me indicar leituras, para cada um dos temas, sempre faço o possível para aprender, estou utilizando o método faynman para melhorar minha compreenção, assim consigo dissernir melhor minhas dúvidas.
Não saberia indicar. Pode ver com alguem que está fazendo graduação e pede pra te mandar a bibliografia recomendada. não é o melhor método mas dá um norte
Vou verificar os livros da minha antiga graduação, acredito que há, uma lista de livros

Olá, poderia me tirar algumas dúvidas?

  • Você diz que falha em compreender assuntos principalmente de escopo iniciante, pois eles mais me parecem um letramento do qeu uma forma de pensar. Pode explicar melhor isso ?
  • Você diz que se vê com problemas para entender módulos e packages. Quais problemas você está tendo ?
  • Você também diz que algumas premissas que aprendi ao longo do tempo parecem serem invalidadas ou conflitantes.. Pode dar um exemplo mais concreto ?
  • acabo vendo muito as coisas por uma ótica matematica, simplesmente lógica, onde certos comando podem ser refeito com blocos de código já outros atraves de libs, mas não consigo evidenciar de forma sucinta isso em diagramas. Pode dar um exemplo aqui também ?
1 - Quando aprendemos lógica de programação é notavél que ela é ensinada de uma forma a mudar sua ótica de mundo, quando vemos um um desing de projeto, avaliamos formas de fazer o uso da lógica de forma "fragmentada", toda vez que vou começar um assunto novo é como se ele estivesse levemente desconectado da realidade, tal como estamos sendo letrados, onde parece que por já sabermos falar aquele conhecimento é inútil, foi neste sentido. 2 - Em compreender em quais casos é valido utilizar aquele conhecimento e não só usado para dizer "Olha, eu sei usar este recurso". 3 - Conceitos de privacidade em um código por exemplo é algo que me deixa meio confuso, pois se é tão simples editar um código como essa segurança se estábelece em um sistema, entendo parcialmente o que a máquina faz por trás, mas ainda sim me parece ser algo que conflita com a facilidade de editar um código o que tornaria ele inseguro apesar das premisas de segurança adotada. 4 - Usando um exemplo comum com iniciantes, quando temos um numero rasuavelmente grande de comparações normalmente utilizamos if de forma desenfreada, quando muitas vez um swite case pode ser mais eficas, sempre que vou estudar ou fazer algum programa e vejo algum trexo que funciona, mas me parece ter ficado exagerado na quantidade de código procuro por comandos que possam fazer o mesmo com menos escrita, para facilitar a leitura do código. Não sei se consegui ser muito claro
1 - Você descrevendo me parece que você tem dificuldade em conectar um conhecimento novo a um conhecimento que você já tem. É isso mesmo? 2 - Entendo e acredito que isso tenha bastante relação com o comentário do `raf`. Você tem trabalhado em projetos pequenos e esse tipo de coisa (módulos e packages) faz muito sentido quando você trabalha em projetos maiores e com mais pessoas além de você. 3 - Quando você fala de privacidade, entendo que esteja falando de níveis de acesso (público, protegido e privado) e respondo com isso em mente. Caso não seja, por favor me corrija. A questão da privacidade (que também tem um impacto maior em projetos maiores) tem mais relação com a propagação de alterações. Se um método é privado sei que posso alterar ele com segurança pois não irá impactar outra parte do código fora da classe atual. Quando você altear um método público (tipo do parametro, quantidade de parametros, nome, retorno...) você precisa ajustar todo o código que usa aquele método e dependendo dos ajustes eles irão se propagar pela sua base de código. E isso tem um custo. Alterações demandam testes e muitas alterações demandam muitos testes. 4 - Entendo e sua lógica faz bastante sentido. Mas não entendi a conexão com a necessidade de evidenciar isso na forma de diagramas. Em outras respostas você cita a necessidade de desenhar diagramas. Isso facilita o seu aprendizado e entendimento ? Ou é algo que você acredita que precisa fazer pois foi dessa forma que você aprendeu ?
1 - corretissímo, principalmente por não ter feito muitos projetos que exigam ser quebrados em menores parte para crescer. 2 - Consegui ter essa conciencia através da postagem. 3 - Capitou a ideia muito bem. 4 - A questão dos diagramas é algo que me facilita a não me perder, e sinto que isso pode me ajudara a criar programas mais complexos, que provavélmente pode começar a me ajudar na questão das abstrações, e também facilitaria na hora de tentar divulgar a ideia para tentar encontrar pessoas que estejam estudando temas parecidos ou pessoas dispostas a trazerem comentários de uma forma mais rápida quanto ao projeto e não necessáriamente o código.
Já pensou em contribuir com projetos open source? Aqui no próprio tabnews frequentemente aparece alguém que iniciou um projeto e solicita ajuda para evoluir. Penso que seria uma forma de você exercitar essa visão, ganhar mais experiência e enriquecer seu curriculo. Pelo que você fala, você estuda e escreve bastante código. Mas como programador passamos mais tempo lendo que escrevendo código. Principalmente código de outras pessoas. Acredito que isso vá te ajudar a dar sentido no conhecimento que hoje parece desconectado da realidade. Quanto aos diagramas já deu uma olhada no https://c4model.com/?
Que site sensacional, ainda não tinha visto. Ainda não participei de nem um projeto, justamente por não fazer parte de grupos, e não ter entendido como chegar a esses projetos, e alguns dos que eu conhecia senti receio de mexer pelo grau de complexidade, me da um pouco de nó por não conseguir ter uma certeza que to indo pelo caminho adequado. Os projetos opensource que aparecem por aqui, as pessoas costumam por no titúlo que se trata ou é necessário vasculhar? Pelo que consegui reuinir de informações até agora, me fizeram pensar em projeto que tenho interesse em trabalhar de forma open source, uma interface interativa para jogadores de Dungoes & Dragon, mas não conseguir identificar um padrão eficiente de desenvolvimento para seguir, algo que fizesse coessão com o desenvolvimento da ideia e a implementação. Em suma é um projeto relativamente simples, mas que tenho ciencia de que ele precisar ser bem modularizado e que exige uma nivel de privacidade adquado de informações.
Você não precisa ter receio de alterar. Não precisa colaborar de inicio, mas pode fazer fork ou simplesmente baixar o fonte do projeto na sua máquina. Ler, tentar entender como funciona, diagramar os componentes arquiteturais, o que são, como se comunicam, depurar o código, rodar os testes, rodar o sistema,dar uma olhada nas issues em aberto e tenta executar,dar uma olhada nas executadas e ver como foram executadas...enfim mexer no projeto vai te ajudar a expandir o conhecimento. E nada disso precisa sair da sua máquina.Não precisa subir suas alterações no ramo do projeto. Depois que tiver aprendido, você decide se quer colaborar ou não. Aqui ainda não vi um padrão no título dos projetos publicados, mas até mesmo o tabnews vc consegue baixar o fonte. Só procurar o link do github no rodapé. Segue alguns links: https://githubbrasil.com/ https://www.tabnews.com.br/jotavetech/fiz-um-jogo-open-source-para-ajudar-voce-a-praticar-sistemas-numericos https://www.tabnews.com.br/hagaka/onde-encontrar-projetinhos-para-colaborar `Não consegui identificar um padrão eficiente de desenvolvimento a seguir`. Uma sugestão que eu dou é começar rascunhando as telas. Identificando o que o usuário precisará saber e fazer. A partir daí identificar o que o sistema precisará ter para viabilizar a necessidade do usuário. Evita desenhar tudo primeiro para depois programar. Diagrama o suficiente para que tenha uma idéia clara de como irá proceder e uma vez que já tenha essa noção vc implementa. Não tenta fazer tudo certo de inicio. Usa a primeira versão para aprender alguma coisa. Depois refaz o projeto usando o que aprendeu na primeira versão (aquilo que o Fred Brooks chama de sistema-piloto).
Beleza, vou seguir nesta linha, e ser um pouco menos perfectonista. Vou pegar alguma programa já feito para estudar em cima tá bem.