Antes de ler esse post, peço a você que ignore seu ego, apenas por alguns instantes. Esse texto não foi fácil de escrever e acho que também não será fácil de ler. Por favor, tenha em mente que não quero ofender a ninguém. Entretanto, acho que já passou hora de falarmos sério sobre nossa profissão.
NOTA: Este post foi motivado (provocado, na verdade) por uma discussão entre amigos, em um grupo de whatsapp, de uma comunidade técnica em que participo.
Por solicitação explícita dos envolvidos, não irei mencionar nomes. Mas, fui desafiado a falar publicamente com a mesma franqueza que usei naquele grupo.
Pare e pense! Estamos realmente preparados para fazer o trabalho que estamos nos propondo a fazer?
Minha pergunta não tem qualquer relação com o quanto você sabe sobre aquele framework lançado na semana passada. Não estou falando sobre microsserviços (com dois “s”). Não estou falando de DDD. Não estou falando da linguagem de programação da moda. Não estou falando daquele banco de dados novo. Não estou falando sobre nada daquilo que geralmente te faz sentir como um impostor.
Quando falei sobre estar preparado, estava falando do quanto você sabe sobre fundamentos!
Você sabe analisar a complexidade de um algoritmo? Se não sabe, como pode dizer como ele irá se comportar em produção com um volume de dados maior do que aquele que está usando em seus testes? Você será um daqueles desenvolvedores que repete o bordão “Na minha máquina funciona”?
NOTA: Na discussão privada, um amigo argumentou que boas ferramentas podem ajudar a avaliar o quanto um algoritmo tem em qualidade. Infelizmente, eles não podem determinar se o algoritmo escolhido é a opção correta para resolver um problema, nem se ele irá escalar bem.
Nem Resharper, nem Sonarqube vão te dizer se seu código escala mal. Em minha experiência, nem mesmo os testes de QA são suficientes, afinal, não refletem o que se encontra em produção. No final, é necessário uma combinação de experimentação e conhecimento.
O mais triste é que, [tweet]se você não sabe avaliar se seu código “escala” bem, ele provavelmente não escala.[/tweet]
Quanto você sabe sobre estruturas de dados? Saberia implementar um hashtable “no braço”? Se não consegue, que critérios adota para escolher entre as diversas opções disponíveis em um framework moderno como .NET ou Java?
NOTA: Nessa mesma discussão, o mesmo amigo sugeriu que “no mercado” as pessoas não tem realmente a capacidade de implementar estruturas de dados “no braço”. Mas, mesmo assim, essas pessoas estão entregando código em produção que atende os desejos dos clientes.
Será que atende mesmo? Pagando que preço? Até quando?
Quanto você sabe sobre arquitetura de computadores? Caso saiba pouco, como você explica para seu cliente aquele “problema de arredondamento”? Que critérios você adota para otimizar seu código para a máquina que seu código irá rodar?
Quanto você sabe sobre como seu código é executado? Sobre como a memória que seu código está usando é alocada e descartada? Que critérios você usa para decidir se deve criar uma class ou uma struct (falando especificamente de C#).
Saber os fundamentos é o mínimo (o fundamental) para que possamos desempenhar qualquer função. Então, por que, frequentemente, ignoramos os “fundamentos” em desenvolvimento de software?
Estudar os “fundamentos da computação” talvez não seja seu foco, nem o que você se dedicou a aprender recentemente. Talvez, porque as pessoas que te influenciam (seus modelos) não tenham dito para você que isso é importante. Talvez, porque seu chefe não tenha condições (técnicas, mesmo) de avaliar você por quanto você domina (de verdade) o que está fazendo. Mas, isso não muda o fato de que é difícil construir qualquer coisa sólida sem que os “fundamentos” tenham sido bem trabalhados.
NOTA: Não estudar os fundamentos talvez esteja te levando, inclusive, a adotar todos os padrões do mundo para fazer um cadastro simples. Você pode estar fazendo isso só porque alguém que você conhece e respeita deu a entender que esse é o caminho (não é! e certamente, ele diria o mesmo).
Em uma boa faculdade, estuda-se os “fundamentos”. Infelizmente, muita gente repete que o foco dos cursos de graduação deveria ser mais “prático”. Como acontece na matemática, quero acreditar que o problema é como o conteúdo é abordado, e não no conteúdo que está sendo abordado.
Não estou dizendo que educação formal ou certificações sejam o único caminho para aprender os fundamentos. Seguramente, qualquer um (acredito), com alguma disciplina pode entender e aprender qualquer coisa. De qualquer forma, sem a exigência de um currículo, o desafio acaba sendo muito maior.
Uncle Bob disse que somos os novos escribas (por favor, assista essa palestra). Realmente somos! O software está engolindo o mundo e nós, que trabalhamos com software, temos chances reais de termos algum protagonismo. Podemos mudar a sociedade para o bem ou para o mal. Há muita coisa em nossas mãos.
As oportunidades são enormes. Os desafios também. Precisamos ser profissionais e desenvolver profissionais. [tweet]Precisamos de programadores de verdade, com bases sólidas. Os riscos são grandes demais para que sejamos uma classe egocêntrica de amadores remunerados.[/tweet]
NOTA: Não sou dono da verdade. Estou muito longe de saber tudo. Sei que, mesmo que queira, não saberei tudo nunca. Entretanto, todos os dias, há quase trinta anos (comecei a escever código na escola), tento aprender primeiro o mais importante.
Se você se sentiu ofendido, desculpe. Se você se sentiu incomodado, ótimo!
Em 1° lugar, não precisa pedir desculpas por falar a verdade. O POST está ótimo me senti incomodado e rever meus conceitos, mesmo sabendo que a maioria das coisas que foi falada eu estudei na faculdade, vejo que algumas ainda estão estão em um nível raso.
Vamos rever alguns fundamentos.
Valeu!
Excelente post. Concordo com tudo nele, inclusive recentemente comecei a ler mais livros de fundamentos da teoria da computação, buscando melhorar o profissional que me tornei após 7 anos de profissão.
Além do aspecto técnico, gostaria de salientar que precisamos melhorar do lado humano também. Tecnologia frequentemente é a área mais machista da empresa, com gente que faz piada homofóbica e vulgar o dia todo. Precisamos mudar isso, pois precisamos de mais pessoas que queiram ajudar a processar os dados do mundo.
Primeiramente parabéns pelo post Elemar.
Para ser sincero essa questão de fundamentos já vem me incomodando a anos, infelizmente não fiz uma faculdade de renome, acreditei que a grade curricular do curso me desse todos os fundamentos necessários e ao final percebi que faltava muito mais base.
Como acompanho você, Bassi (link até este post), Juan Lopes, entre outros…sempre fiquei admirado pelo alto nível de entendimento de vocês e pela dedicação que vocês colocam em cada assunto, se percebe que não é superficial.
Porém acredito que houve uma queda no ensino de algumas instituições e também o mercado acabou exigindo menos de seus candidatos, afinal bastava saber arrastar botões ou o framework x do momento e devo confessar que por um tempo acabei surfando nesta onda.
Enfim, recentemente vi seu post sobre performance referente a uma expressão regular e achei fantástico e sei que me falta muito mais deste tipo de entendimento para gerar questionamentos que levem a outras soluções e portanto seria de grande valia se você pudesse criar um treinamento ou guia para fortalecer a base, nos ajudaria a saber por onde devemos começar e qual caminho seguir, Só uma ideia. Abraço.
Namoro desenvolvimento de software a muito tempo, e só a um ano atrás iniciei com uma meta meus estudos para passar a trabalhar com essa “gatinha difícil” mas que vale a pena. Seus pensamentos sobre a profissão sempre me chamaram a atenção, e penso exatamente como este post seu. Estou procurando aprender o “menos errado” possível, e esses posts me ajudam a sempre endireitar o caminho. Obrigado!
Excelente provocação, espero que o próximo POST desta serie (Assumindo que se tornará) será por onde devemos começar a aprender os fundamentos. Ansioso por mais.
“If you don’t know, the thing to do is not to get scared, but to learn.”
― Ayn Rand, Atlas Shrugged
Muito bom, pena não ter tudo o que rolou na conversa que deu origem (ainda que fantasticamente resumido), mas eu sei que hoje algo mais longo ninguém lê, o que faz parte do problema apontado.
Como eu sei mais ou menos o teor da resposta que vem aí eu tenho que reconhecer que o mercado está tão carente de profissionais que aceita todo mundo, até quem só tem sopa de letrinhas modernas no currículo, é uma pena, mas é sim uma realidade. Eu adoraria que fosse diferente e faço minha parte enquanto dá. Até me queimo por tentar incutir a ideia do fundamento, tem gente que realmente se sente ofendida por dizer que ela precisa disto, ela que ainda não domina o assunto acha que sabe o que precisa aprender. Também admito que é complicado querer dizer o que é bom para a pessoa, ao mesmo tempo que é contra producente não ouvir quem já trilhou esse caminho.
Pra mim o mais importante é que as pessoas que ensinam outras deveriam sim se responsabilizar, até o limite que lhe cabe, de incutir a necessidade do fundamento sempre que possível, mesmo que a pessoa por uma razão ou outra (não gosta, não sabe, não vende bem) não ajude diretamente as pessoas evoluírem nesse aspecto, só de falar sobre a necessidade já é uma grande coisa.
Se as pessoas aprendessem os fundamentos talvez não precisariam dar tanta volta como a gente vê muito por aí. E sai mais barato fazer mais simples porque aplica os fundamentos. E dá um orgulho tremendo, mais que dizer que sabe ABC ou DEF e nem sabe porque usa isto.
Obrigado pelo artigo que eu classifico como necessário acima de outras características também muito importantes.
Excelente Elemar. Compartilho do seu ponto de vista.
Meu trabalho hoje é focado em fazer e treinar profissionais em descobrir e validar as reais necessidades do cliente. Da mesma maneira que você pontuou essa deficiência nos deve, percebo um gap enorme em análise. A maioria de nós prefere ficar na superfície escrevendo histórias e seguindo métodos que te blindam da realidade. Ou seja, temos PO’s e analistas que não fazem análise, e fogem dos fundamentos.
Me questiono quase que todos os dias: Como mostrar para esses profissionais o valor dos fundamentos?
Caro Elemar me senti incomodada com o tema. Parabéns pelo assunto abordado. Também tenho 22 anos de experiência na área de TI em desenvolvimento de software e sempre esbarro neste dilema. Também não sou dona da verdade. Naveguei por várias organizações. E em minha opinião existe um desalinhamento nas expectativas entre as áreas de negócio e a área de TI. As áreas de negócio querem um software funcionando se possível para a semana que vem e não se interessam como ele foi construído ou que arquitetura foi utilizada. Por outro lado quando mais arquitetura ou design patterns aplicamos, quanto mais perfeito queremos fazer o software, mais tempo levamos no desenvolvimento. E o que vejo é que geralmente o cliente não quer pagar por este tempo a mais. Para evitar desentendimento e longas reuniões desagradáveis os mais espertos acabam fazendo o que dá com o tempo que tem. Obrigada pela oportunidade.
O texto é excelente! Quem se sentiu ofendido são os “profissionais” que entram na área porque “dizem que dá dinheiro”, “está na moda”, “não precisa estudar, é só copiar e colar”. Muitos “profissionais” usam uma tecnologia, um framework ou uma linguagem e não sabem fundamentos básicos, não sabem qual problema aquilo resolve, ou como e porque resolve. Muitos “profissionais” sabem dar manutenção em um projeto de uma determinada tecnologia, mas não sabem criar um projeto do zero dessa mesma tecnologia. Como é possível isso? Simples, porque realmente não sabem sobre a tecnologia, apenas pensam que sabem. É por isso que é importante lembrar: ANTES de escolher tecnologia, arquitetura, framework, linguagem ou banco de dados, entenda o problema a ser resolvido. A área não é um playground, pra brincar de fazer escolhas pessoais que no fim comprometem todo um projeto. A área é um meio para resolver problemas e tornar a vida humana mais fácil e prática. Não somos pagos pra fazer escolhas pessoais, mas para resolver problemas da melhor e mais eficiente forma possível.
Olá. Primeiramente, desculpe eu colocar o meu linkedin ao invés de um site de portifólio, é que ainda não criei um.
Eu sou desenvolvedor web/mobile fazem 2 anos e ultimamente eu estava pensando realmente sobre isso. Um dos programadores que trabalha comigo é desenvolvedor sênior e muita coisa ele se baseia em fundamentos.
Estou lá faz um mês, mas o que eu tenho aprendido está me fazendo pensar sobre como fazer as coisas da melhor forma, em ter um fundamento mais sólido antes de fazer as coisas.
E quero te dar parabéns pelo post e dizer muito obrigado pelas verdades ditas.
Não sei se posso, mas queria te deixar uma pergunta. hehe
Eu estou no 7 semestre da faculdade e com a experiência de 2 anos de trabalho e realmente tem um niverso que preciso aprender.
*Como estudo realmente os fundamentos necessários para ser esse desenvolvedor que você vem a comentar nesse post?*
Abraços.
Elemar, parabéns pelo post!
Vai tirar muita gente da zona de conforto e eliminar algumas desculpas que se tornaram padrão para alguns (“Na minha maquina funciona, haha”).
Elemar, parabéns pelo texto! Excelente abordagem. Por a mão na consciência e sem egos averiguar o quanto somos falhos nos faz pensar.
Sugiro que em próximos posts compartilhe também qual a melhor forma de obter esses fundamentos com solidez. Qual o caminho das pedras? Há uma geração inteira entrando para esse mercado que precisa de um direcionamento.
Fiz também uma pós que pensava ter uma ótima plataforma de conhecimento para exercer minha função mas no final vi que estava redondamente errado!
Até a próxima !
Excelente post, Elemar. Fica só a sugestão de fazer um próximo como gancho desse incentivando um path de conhecimento fundamental para cientistas da computação.
O post é excelente, e bastante provocativo, e na minha opinião vem num momento oportuno, dado principalmente a ascensão (na última década principalmente) da comunidade técnica como provedora de conteúdo.
Concordo com a maioria dos comentários, pois também me sinto desconfortável (e não é de hoje). Mas, também, sinto falta de (propostas) soluções.
É um fato que existem muitos profissionais mal preparados (talvez sejamos esses, só não sabemos ou não queremos acreditar), mas como mudar esse cenário?
Temos caminhado para o consenso de que a academia (brasileira) não está sendo capaz de suprir o preparo técnico de nós profissionais de software. Sejam os cursos tecnólogos, bacharéis e pós-graduações, todos visam entregar um conteúdo genérico (nesse caso usando o significado ruim do termo) e que atendam a expectativa e demanda do mercado. Por exemplo, frameworks JS, mobile e agile, que também possuem sua importância na formação de um profissional de software. Cobrar dessas IEs um conteúdo mais rico em fundamentos é parte de nosso direito, ou melhor, nossa obrigação enquanto alunos/consumidores.
Por outro lado, tem ficado à cargo da comunidade suprir esse déficit técnico, compartilhando conhecimento em fóruns, post e eventos (presenciais e online), no entanto tenho sentido que isso não é o suficiente. E aqui que acho que a colocação do Elemar “Como acontece na matemática, quero acreditar que o problema é como o conteúdo é abordado, e não no conteúdo que está sendo abordado.” mais significativa e provocativa.
Tenho pensado em formas de tornar esse conteúdo que é importantíssimo para nossa profissão ser mais acessível e compreensível, pois alguns, se não a maioria, só são compreendidos após exemplificar muito. A acredito que é assim porque a forma como como são apresentados é morosa demais.
Na prática, hoje conteúdos que dão foco em fundamentos competem a atenção do público, com outros conteúdos muito “mais atrativos e menos valorosos”, assim como um documentário bem formulado e produzido compete a atenção do espectador, com o cara da banheira de chocolate.
Assim como os profissionais devem se preocupar em buscar esse conhecimento fundamental, os que se propões a compartilhar precisam buscar formas de fazer isso de maneira mais convidativa.
Creio esta ser a terceira vez em menos de 1 mês que vejo alguém da área falar sobre fundamentos.
O que falta agora é especificar seu entendimento por fundamentos. Palavra óbvia, mas que cada um entende a sua maneira.
Por ex: fundamento pode ser como implementar um algoritmo de Hashtable no papel, no C e em javascript. Em cada um destes pode ser feito de forma diferente.
Excelente provocação.
Temos sempre que buscar um aperfeiçoamento.
Mas como podemos (provocação) melhorar nossa categoria quando o entorno perdeu nível.
Hoje o gerente é desorganizado (é ele que organiza o andamento do projeto), o usuário de negócios não tem a compreensão do trabalho dele e muitos menos como colocar isso em uma especificação.
Mas tá todo mundo pós graduado.
O convite é entender nosso papel neste mundo moderno.
Não vivemos em um mundo de software e sim de gestão e assimilação de conhecimento. Sem isso seremos tirinhas vivas do Dilbert
Parabéns pelo tópico, compartilho da mesma opinião. Porém, eu entendo que o mercado de TI ainda é muito imaturo e um tema como este ainda não é um problema mensurável, logo, dificilmente o mesmo é gerenciavel criando certo comodismo por parte dos desenvolvedores.
Eu entendo que ainda chegaremos lá, o mercado de alguma forma irá se ajustar e exigir qualidade nas entregas.
Por enquanto, eu não vejo esse tema como prioridade. Acho que existem outras coisas, que não necessariamente estão relacionadas a fundamentos, mas sim a processos que deveriam ser priorizadas.
De qualquer forma eu adoraria que o tema fosse uma realidade, que pudéssemos exigir essa qualidade. Faço parte de um mercado relativamente pequeno, porém muito demandado e a realidade é assustadora. Infelizmente o mercado não está em posição de exigir muito, existe muita demanda vs. pouca mão de obra.
Parabéns pelo post Elemar.
Eu sempre fui a favor da provocação como forma de motivar!
Como eu havia prometido, respondi sobre este assunto no post que acabei de escrever:
https://www.eduardopires.net.br/2019/06/a-caracteristica-mais-importante-de-um-programador/
Abs!
Obrigado por fazer a provocação e trazer a discussão à tona. Eu vou devolver a provocação e oferecer um contraponto pra tentar enriquecer a discussão.
A ideia apresentada no seu texto, principalmente pelo fato de você estar defendendo a faculdade, me lembra do fracasso que é o nosso sistema de ensino, do fundamental ao superior, onde passamos anos estudando conceitos abstratos sem nunca usá-los no mundo real.
Saber “como a memória que seu código está usando é alocada e descartada”, “arquitetura de computadores”, “estruturas de dados”, “implementar um hashtable no braço” é inútil se você nunca precisou disso.
É melhor você passar anos criando coisas e impactando positivamente a vida das pessoas desde o dia zero do que estudando sobre fundamentos dos quais a maior parte você nunca vai precisar pra atingir seus objetivos.
No percurso, você vai precisar aprender fundamentos relacionados àquilo com o qual você está trabalhando, e não necessariamente serão fundamentos de computação.
O único fundamento que você precisa pra trabalhar com TI (e provavelmente com várias outras áreas) é saber aprender, saber ler, pesquisar, absorver conhecimento. E existem técnicas pra isso. E então você vai aprendendo conforme a necessidade. É principalmente nisso que a escola e a faculdade brasileira falham. Eu teria perdido 4 anos da minha vida na PUC-Rio se, em vez de me juntar com colegas e desenvolver projetos reais, eu tivesse me dedicado às disciplinas.
Olá, Elemar,
Gostei bastante do texto, e acho que, de fato, é um debate necessário. Se me permite um comentário,
Acho que a profissão de desenvolvimento de software tem algumas nuances, e seguiu um caminho estranho pelo próprio desenvolvimento da tecnologia: na minha visão, hoje,
estranhamente, nós já trabalhamos “pouco” com os fundamentos da computação propriamente ditos pelo fato de que o tempo adicionou camadas e camadas de abstração
sobre esses detalhes. Eu considero isso importante e necessário, e a meu ver foi uma das coisas que fez a indústria do software ter se desenvolvido como se deu. Mas houve consequências. Se me permite, vou dar alguns exemplos para detalhar meu ponto de vista.
A primeira vez na vida que fiz um “código” foi em Assembly em um curso de Eletrônica no SENAI e, de fato, eu precisei aprender coisas sobre o funcionamento de um processador e memória. Mas será que, hoje, isso é mesmo necessário para escrever, digamos, uma aplicação web? Saber como funciona alocação de memória é interessante, útil e relevante, mas será absolutamente imprescindível? Perdoe-me, mas eu acho que não. Naturalmente, isso depende do contexto, mas não acho que seja algo como isso que separe um “amador” de um “profissional”.
Eu concordo que os fundamentos são importantes em todas as profissões, inclusive na nossa. Mas será que, na nossa profissão, alguém que não conhece profundamente tais fundamentos não conseguirá fazer um software de qualidade e bem escrito para atender a necessidade que ele deseja? Sim, talvez essa pessoa não esteja fazendo o software mais rápido do planeta, ou que não esteja otimizado para uma hardware específico, mas isso faz dessa pessoa um “amador”? Desculpe, mas não acho.
O seu exemplo sobre hashtable é interessante. Pessoalmente acho estruturas de dados importantíssimo e fundamental. Então, digamos que alguém estudou o assunto profundamente e agora sabe implementar, digamos, uma árvore rubro-negra. Pergunto: porque essa pessoa deveria (re)implementar uma árvore rubro-negra? Muitas linguagens oferecem essas estruturas de dados; eu acho importante conhecê-las justamente para habilitar o programador a saber o que usar e quando usar (digamos, quando usar uma lista indexada ou ligada, etc). Mas eu não julgaria alguém como “amador” por, digamos, não saber implementar com facilidade uma hashtable. Com todo o respeito à sua opinião, considero mais importante ele conhecer os fundamentos de modo a saber escolher as ferramentas adequadas.
Enfim, hoje existem camadas e camadas de abstrações que separam o código escrito em uma linguagem de alto nível (Java, C#, Python, etc) de como a coisa realmente funciona no “bare metal”. Eu não vejo isso como um problema, e sim como algo ótimo. E considero que isso torna ainda mais importante conhecer os fundamentos: quando se conhece a base, o motivo de determinadas coisas serem como são, se consegue trabalhar melhor, tomar melhores decisões e utilizar melhor todas as coisas à disposição para escrever um software de qualidade.
Eu também acho uma pena que alguns desenvolvedores não dêem importância a esses detalhes e acreditem que desenvolvimento de software é saber usar frameworks; ora, em algum momento, alguém escreveu aquele framework. E provavelmente esse alguém conhecia melhor tais fundamentos; conhecia tanto que os abstraiu para simplificar a vida de outros. O desenvolvimento de software sempre tendeu a adicionar tais facilidades e hoje é muito mais simples escrever um programa do que era no passado. Eu não acho isso algo ruim, e acredito que você e nossos colegas também não acham. Mas concordo totalmente que para nós, que temos software como profissão, isso não é o bastante. Precisamos conhecer as bases das coisas.
Obrigado.
Parabéns pelo post! É uma questão que eu mesmo já questionei sobre mim mesmo. Obrigado por contribuir dessa e de todas as formas que contribui para a comunidade!
A maioria dos desenvolvedores é composta por amadores mesmo. É como se se propusessem a realizar cirurgias depois de assistir o tutorial do fabricante de bisturi. O paradigma atual é o FOD – Framework Oriented Development. Se eu fosse cliente, imploraria: não me FOD!!
Sobre descobrir se um algoritmo ou implementação escala ou não, sim, é possível fazer isso através de testes de performance. Não é só tuchar coisa no jMeter. Tem que ter fundamento e técnica para isso, manjar de SOs, teoria das filas, bancos de dados, etc. Mas dá pra fazer sim, com um ambiente de homologação em escala e foco na identificação de “cotovelos” no tempo de resposta e consumo de recursos.
Muito obrigado mais uma vez Elemar, sua escrita agrega muito para a comunidade, me senti ofendido e incomodado! Hahaha
Um post sobre o que são os fundamentos seria interessante para complementar.
Abraço!
Muito obrigado por tal perspectiva, tenho considerado isso nos últimos anos e me direcionado a resolver tais lacunas.
Eu e meus colegas tivemos basicamente essa mesma discussão está semana. Hoje em dia a maioria dos programadores apenas escrevem código sem saber realmente o que está sendo feito, não sabem como realmente funciona um algoritmo.
A regra é entregar o projeto.
Elemar, todo desenvolvedor de software profissional é um cientista da computação?
Admiro muito meus amigos que entendem profundamente sobre algoritmos, estrutura de dados e demais fundamentos da computação. Até hoje os entendia como “cientistas da computação”. Seriam estes os únicos desenvolvedores profissionais, e todo o resto, que não entende tanto dos fundamentos da computação, desenvolvedores amadores remunerados?
Obrigado pelo carinho, João. Não é fácil deixar o ego de lado e tentar ver os fatos de forma objetiva.
Saber escolher uma boa estrutura de dados. Pensar em como o código irá se comportar em produção. Explicar um comportamento estranho do computador. Nada disso deveria ser um assombro para quem quer viver profissionalmente de uma atividade.
Humildade, boa vontade e disposição para aprender são essenciais. Mas não são suficientes.
Concordo com você.
Os conceitos para implementação de qualquer estrutra de dados se mantem quase inalterados. Independente da linguagem.
Estrutras de dados e algoritmos. Seria um ótimo começo.
Obrigado pelo carinho, Luiz.
Não tenho intenção de criar treinamentos para a área. Mas, de qualquer forma, venho tentando compartilhar esse tipo de conteúdo há mais de uma década.
Há um livro excelente: “Cracking the code interview”. Ele pode ser bem divertido e ajudar a preencher lacunas.
Obrigado pelo carinho.
Obrigado pelo carinho.
Como respondi no primeiro comentário, saber escolher uma boa estrutura de dados, pensar em como o código irá se comportar em produção, explicar um comportamento estranho do computador – nada disso deveria ser um assombro para quem quer viver profissionalmente de uma atividade.
Humildade, boa vontade e disposição para aprender são essenciais. Mas não são suficientes.
Com resultados tangíveis. Há, certamente, bons cases que podemos usar como referências.
Como profissionais, deve ser nosso compromisso saber balancear dívidas técnicas. As vezes, há mesmo uma janela de oportunidade que precisa ser aproveitada. Entretanto, é importante que deixemos claro para os gestores o aumento no custo de manutenção causados por essa dívida.
O post que segue é direcionado aos gestores:
https://eximia.co/pt/2019/06/01/transformacao-digital-fica-bem-mais-dificil-quando-remuneramos-o-amadorismo/
Exato.
Comece por estruturas de dados e algoritmos.
Sendo bem prático, recomendo um livro chamado “Cracking the code interview”
Esperamos que sim!
Comecemos por estruturas de dados e algoritmos. 🙂
Não é fácil! Mas, de uma forma geral, minha recomendação seria de “consistência e persistência”.
Exato.
Sobre a gestão, escrevi um post destinado a gestores:
https://eximia.co/pt/2019/06/01/transformacao-digital-fica-bem-mais-dificil-quando-remuneramos-o-amadorismo/
Não podemos ser reféns. Qualidade não deveria ser opcional. Veja o impacto para negócio:
https://eximia.co/pt/2019/06/01/transformacao-digital-fica-bem-mais-dificil-quando-remuneramos-o-amadorismo/
Como falamos no grupo privado, É hora de você começar a levar suas duas BMW (como enfatizou) para mecânicos humildes e cheios de vontade de aprender. Né? 🙂
Brincadeiras a parte, concordadmos em discordar. Certo?
Em tempo, como disse, não uso o Github para fins didáticos.
Meus projetos, que estão públicos e inacabados são um índice reverso e um workflow. Aceito sua ajuda para simplificar meus projetos se me permitir simplificar o seu.
Haz, obrigado por comentar.
Me permita discordar de alguns pontos:
1. Não defendi a faculdade, nem o sistema de ensino. Apenas destaquei que o currículo ajuda a orientar estudos.
2. Indiquei no texto e repito aqui: como você seleciona a estrutura de dados correta se não sabe como elas funcionam? Como explica problemas de arredondamento ao cliente? Como pode colocar um código em produção, sem “topar” CPU e memória sem entender como funciona alocação/desalocação?
3. É muito perigoso pautar como “único fundamento” saber aprender. Há um mínimo que precisamos saber para poder avançar com segurança. Não acha?
Obviamente, tudo isso só tem valor se colocarmos em prática para melhorar o mercado e a vida das pessoas. Nesse ponto, concordamos.
Obrigado por compartilhar. Concordo com você em quase tudo.
Realmente, as abstrações vieram para facilitar e acelerar o processo de desenvolvimento. Entretanto, precisamos ter o mínimo de preparo para, pelo menos, saber que abstrações usar.
Quantas pessoas, na comunidade desenvolvedora, sabem o que é uma árvore rubro-negra (ou vermelho e preto)? Arrisco a dizer que bem poucas. Agora pense no mundo de oportunidades que ficam escondidas aí?
Márcio, dois pontos:
1. Assumindo que seja suficiente, não deveríamos perguntar aquilo que já sabemos. Veja o custo de fazer testes dessa escala para verificar que um código não vai se comportar bem?
2. De qualquer forma, você mesmo realça que para fazer bem os testes é preciso conhecer os fundamentos.
Enfim.. mesmo que concordemos em discordar, gostei do seu ponto. Obrigado por compartilhar!
Há muita coisa boa já escrita. Bons livros de estruturas de dados e algoritmos seriam bons pontos de partida.
Obrigado a você pelo carinho.
Aqui, vejo uma falha gigante da gestão.
https://eximia.co/pt/2019/06/01/transformacao-digital-fica-bem-mais-dificil-quando-remuneramos-o-amadorismo/
Olá Luiz.
Como escrevi no primeiro comentário: saber analisar a complexidade de um algoritmo, prever o impacto de seu código na memória e na CPU e explicar comportamentos aparentemente “estranhos” do computador não te torna um cientista.