Por que as estruturas de dados são tão importantes nas entrevistas? [fechadas]

106

Devo confessar que não era tão forte em estruturas de dados quando me formei na faculdade. Durante as colocações do campus durante minha graduação, testemunhei que a maioria das grandes empresas de tecnologia como Amazon, Microsoft etc. se concentrou principalmente em estruturas de dados. Parece que as estruturas de dados são a única coisa que eles esperam de um graduado.

Para ser sincero, me senti mal com isso. Eu escrevo um bom código. Eu sigo padrões de design padrão de codificação, eu uso estruturas de dados, mas no nível superficial, como em APIs expostas a Java, como ArrayList, LinkedList etc.

Provavelmente por causa do meu background em Java, naquela época, eu entendia a eficiência e a lógica do código apenas quando falado em termos de Programação Orientada a Objetos, como objetos, instâncias, etc., mas nunca me aprofundava no nível de bits e bytes. Não queria que as pessoas me desprezassem por esse meu déficit de conhecimento em estruturas de dados.

Então, realmente, por que toda essa ênfase nas estruturas de dados?

Vamsi Emani
fonte
36
Eu realmente não entendi sua pergunta. Você diz "eu escrevo um bom código" - como as estruturas de dados podem não fazer parte de um bom código. E duvido que qualquer entrevistador sincero fique excessivamente obcecado por eles.
treecoder
6
@greengit: há uma diferença entre implementar um mapa de hash e usar sua API. O que eu valorizaria em uma entrevista é se eles descrevessem um aplicativo para mim, depois me pedissem para construir as estruturas centrais de dados e explicar minhas escolhas.
György Andrasek
7
O que você prefere ser perguntado?
temptar 18/08/11
13
@ Jurly - Para entender quando usar uma biblioteca de contêineres, é útil ter algum conhecimento de como a estrutura de dados subjacente funciona. É difícil aceitar que você saiba sobre a eficiência do código se não souber as complexidades de tempo e espaço das bibliotecas que você está usando - só porque funciona bem em pequenos conjuntos de dados de teste não significa que será dimensionado para conjuntos de dados maiores no mundo real. Na IMO, entender as complexidades de tempo e espaço é tanto uma parte da compreensão da API quanto conhecer os nomes de classe e método - talvez mais ainda, pois o intellisense não explica as complexidades.
Steve314
2
Uma boa estrutura de dados fornece código simples e limpo. Uma estrutura de dados incorreta fornece código complexo. É importante acertar.

Respostas:

121

a maioria das grandes empresas de tecnologia como a Microsoft se concentra principalmente em estruturas de dados. Parece que as estruturas de dados são a única coisa que eles esperam de um graduado.

Não, tem mais. Por exemplo, também esperamos que você seja um aprendiz rápido que possa aprender novas estruturas, APIs ou mesmo linguagens de programação em um curto período de tempo. Essa é uma barra mínima. Alguém que demora muito para aprender uma nova estrutura, API ou idioma não será um desenvolvedor de sucesso na maioria das equipes da Microsoft.

E, é claro, há muitos outros aspectos nos quais focamos nas entrevistas, além do conhecimento bruto das estruturas de dados. Capacidade de lidar com especificações ambíguas, por exemplo, ou capacidade de reconhecer padrões de codificação que produzem código inseguro ou uma dúzia de outras coisas. Mas a capacidade de entender estruturas de dados certamente é muito grande.

É particularmente o caso que as entrevistas são tendenciosas para testar o conhecimento das estruturas de dados para recém-formados em CS. Os recém-formados, a maioria dos quais não tem muita experiência no mundo real, não devem ser bons nos mesmos tipos de coisas em que alguém com quinze anos de experiência no setor seria bom.

Devo confessar que não era tão forte em estruturas de dados

É bom que você saiba disso sobre você. Se você não puder ou não quiser mudar isso a seu respeito, minha recomendação é que você não se candidate a um emprego que exige facilidade com estruturas de dados.

existe essa perspectiva geral de que um bom programador é necessariamente aquele com bom conhecimento sobre estruturas de dados.

É tautológico que um bom programador seja um bom programador para criar os tipos de programas que precisam ser criados. Muitos programadores trabalham em tarefas que não exigem conhecimento profundo das estruturas de dados. Alguns deles trabalham em tarefas que exigem um conhecimento profundo do design da interface do usuário, por exemplo. Ou normalização do banco de dados. Como queiras. Essas pessoas ainda podem ser "bons programadores" em seus domínios.

por que toda essa ênfase nas estruturas de dados?

Faço perguntas da entrevista sobre estruturas de dados, porque na minha equipe os desenvolvedores projetam, implementam e manipulam estruturas de dados complexas o dia todo, todos os dias. Ontem, tivemos quatro horas de reuniões nas quais meia dúzia de desenvolvedores discutiram os prós e os contras da adição de um único campo booleano a um nó de árvore específico. Provavelmente, não há habilidade na minha equipe mais importante do que a capacidade de entender estruturas de dados em um nível profundo. Seria tolice não fazer perguntas sobre a entrevista, pois é isso que fazemos.

O conhecimento em Estruturas de Dados não afeta realmente a carreira de programação?

Bem, certamente irá impedi-lo de conseguir um emprego na minha equipe. Mas como eu disse antes, a programação é um campo enorme . Existem muitos tipos de programação de computadores que não exigem conhecimento de estruturas de dados.

o conhecimento neste assunto é realmente uma base suficiente para diferenciar um bom e um mau programador?

Não. Mas é quase sempre suficiente detectar desenvolvedores que provavelmente não terão sucesso na Microsoft. Como é isso que eu estou interessado principalmente em detectar, o conhecimento das estruturas de dados é um dos fatores que testo nas entrevistas.

Eric Lippert
fonte
10
Graças uma tonelada Eric! Esta é a resposta menos desmotivadora que tenho para minha pergunta. :-)
Vamsi Emani
2
@ EricLippert, obrigado por esta excelente resposta. Como desenvolvedor autodidata, que ainda não foi mordido por sua falta de conhecimento formal das estruturas de dados, você recomenda um livro que possa me mostrar o que estou perdendo?
Cowboy de fechamento
5
@Closure Cowboy: Para os conceitos básicos de estruturas e algoritmos de dados, "Introdução aos algoritmos" de Cormen, Leieserson e Rivest é o livro padrão. Se você está interessado em estruturas de dados de estilo funcional, o livro de Chris Okasaki é muito bom, mas bastante avançado.
precisa
2
@ClosureCowboy Confira o curso 'Algorithms I' do Coursera oferecido por Princeton. Também sou um programador autodidata e está fazendo muito para ajudar a preencher minhas lacunas no conhecimento da teoria de CS.
Evan Plaice
133

Um ponto importante sobre as estruturas de dados é que elas são universais e atemporais, pelo menos para fins práticos. Qualquer pessoa que tenha sido desenvolvedor nos últimos 30 anos deve conhecer estruturas básicas de dados, como listas de links simples / duplos, árvores binárias ou gráficos. Se você perguntar a dois desenvolvedores sobre eles, poderá comparar o conhecimento dos desenvolvedores por suas respostas. Isso dificilmente pode ser dito para estruturas ou mesmo linguagens: se você perguntar a dois desenvolvedores sobre o Rails, e um souber muito mais que o outro, o que isso realmente diz? Como você diz na pergunta, um desenvolvedor inteligente pode aprender uma nova estrutura com rapidez suficiente, portanto, testar seu conhecimento atual não faz muito sentido.

Não ter conhecimento em estruturas de dados realmente afeta a carreira de programação?

Sim. Definitivamente. A menos que você queira passar toda a sua vida escrevendo aplicativos CRUD.

Ou o conhecimento deste assunto é realmente uma base suficiente para diferenciar um bom e um mau programador?

Não, não é suficiente. Mas há poucas coisas que você pode perguntar em uma entrevista de emprego que são suficientes. E eu diria que o conhecimento de algoritmos é um dos melhores indicadores, pelo menos para pessoas recém-saídas da escola, onde você não pode perguntar sobre experiências de trabalho.

nikie
fonte
Um pouco de nitpick, eu não diria que as estruturas de dados são atemporais por si só. Muitas estruturas são modeladas para resolver problemas com o hardware atual. Por exemplo, usamos uma árvore B + para otimizar a pesquisa em páginas de arquivos, mas o hardware subjacente está mudando. Talvez os SSDs exijam algoritmos diferentes, ou talvez sejam mais direcionados para o acesso à RAM do que ao disco io. Assim, enquanto o algoritmo em si pode ser "intemporal" é lugar e propósito não é
Homde
3
@ Konrad: Isso é o que eu quis dizer com "para fins práticos". Não consigo pensar em uma estrutura ou algoritmo de dados que se tornou "obsoleto" e duvido que você se deparasse com um em uma entrevista de emprego. E como a maioria das estruturas de algoritmos / dados foi desenvolvida muito antes do hardware atual e ainda é útil, eu até acho que há algum tipo de coevolução em andamento, em que novos desenvolvimentos de hardware são guiados pelas estruturas de dados que conhecemos.
Nikie
Se / Quando a concorrência se torna de facto obrigatório eu posso pensar de um grande número de estruturas de dados que se torna obsoleto :)
Homde
9
@ Konrad: E se / quando os computadores quânticos se tornarem padrão, posso pensar em mais alguns. Mas eu assumir o OP não quer esperar com suas entrevistas de emprego até então ;-)
Nikie
3
... ou quando nossos novos senhores AI fazer programadores humanos insignificantes obsoleto
Homde
45

Sou um aprendiz rápido e posso aprender novas estruturas, APIs ou até mesmo linguagens de programação em um período de tempo consideravelmente curto.

Para não parecer muito duro, mas qualquer desenvolvedor meio decente poderá escolher um novo idioma ou estrutura em um período relativamente curto.

As estruturas de dados são universais, são um bloco de construção fundamental da ciência da computação - uma árvore vermelha-preta é basicamente a mesma, seja implementada em Java, Python, PHP ou qualquer outra coisa. Portanto, em vez de testar linguagens específicas ou estruturas específicas, um empregador (pelo menos, um empregador que procura desenvolvedores destacados) testará se você conhece os fundamentos da ciência da computação, e não apenas o sabor do mês que eles ' está usando atualmente.

(pelo menos, eles deveriam testar os fundamentos além do que estão usando atualmente ... não adianta contratar um mago da ciência da computação se ele nunca escreveu uma linha de código em sua vida)

Dean Harding
fonte
1
Ciência da computação é uma das palavras-chave aqui. As estruturas de dados são geralmente vistas em profundidade em um mestrado e aparentemente são um assunto importante.
James P.
1
As estruturas de dados são universais até você ficar viciado em programação puramente funcional: P.
Tikhon Jelvis
30

Você acredita que os pilotos de F1 apenas dirigem carros velozes? Não, eles entendem o carro que dirigem e trabalham com os mecânicos / engenheiros para ajustá-lo. Obviamente, um motorista normal apenas dirige.

Você pode ser um programador normal / médio que apenas escreve código. Você não entende o que está por trás. Você faz as coisas. É tudo, até o dia seguinte.

Mas muitas empresas procuram desenvolvedores de F1. Pessoas que se desenvolverão sabendo o que está por trás do código. Pessoas que também ajudarão a empresa a construir algo melhor.

É muito bom conhecer estruturas de dados, não apenas porque você as utilizará em um formulário "pré-cozido". Também é bom porque você criará algo que deriva da ideia deles.

graffic
fonte
Então espere, você está dizendo que há uma correlação entre eu ser programador e meu estranho hábito de conhecer um carro intimamente antes de eu dirigir?
22611 Robbie
@Robbie: +1 LOL Você gosta de desmontar coisas?
graffic
2
Sim. Meu pai me ensinou como desmontar qualquer coisa . Ele se esqueceu de me ensinar a recompor as coisas, pensando nisso a vida toda.
Robbie
17

Na minha aula sobre estruturas de dados, a primeira coisa que o professor disse foi: Essa aula não é sobre ser capaz de pesquisar muito rápido. Depois, passamos meio ano encontrando as melhores estruturas e algoritmos de dados possíveis para pesquisar muito rapidamente.

Ainda assim, ele permaneceu certo. Ser capaz de analisar estruturas de dados, aplicar a estrutura de dados correta a um determinado problema ou até criar novas estruturas de dados requer muitas qualidades de um engenheiro:

  • Localizando abstrações para modelar um problema concreto
  • Ser capaz de decompor problemas
  • Ser capaz de raciocinar lógica / formalmente
  • Criatividade
  • etc.

Quando a Amazon e a Microsoft contratam pessoas, elas não fazem perguntas sobre estruturas de dados porque esperam inventar a próxima seção rápida . Eles querem ter certeza de contratar alguém com as qualidades mencionadas acima.

É claro que é possível ter um grande conjunto dessas qualidades e ainda ser péssimo nas estruturas de dados. Mas, se for esse o caso, não demorará muito para você se tornar um especialista em estruturas de dados.


Dito isto, ainda existe o problema que ArrayListsimplesmente não é bem dimensionado. Quando os sistemas crescem, são necessárias soluções melhor adaptadas para realizar o trabalho. E sem uma boa compreensão das estruturas de dados, você não poderá encontrar e compor estruturas e algoritmos que se expandem amplamente em seu cenário concreto.

blubb
fonte
3
Além disso ArrayList, sem uma boa compreensão das estruturas de dados, você pode nem perceber que ArrayListnão é dimensionável e precisa encontrar e compor estruturas e algoritmos que dimensionam.
Phoog
12

Em geral, algoritmos e estruturas de dados são considerados dois dos tópicos mais "essenciais" da programação. Isso ocorre porque há um enorme corpo de trabalho e pesquisa sobre eles na ciência da computação. Eles também atraem os programadores típicos do "lobo esquerdo" que gostam de coisas como matemática e ciências (que são muitos programadores)

Dito isto, o conhecimento disso pode afetar sua carreira em termos de entrevistas, especialmente se você entrevistar em locais de trabalho orientados a engenharia, como o google. Outras empresas agora podem, no entanto, se preocupar com esse aspecto.

Na minha experiência, as demandas de algoritmo / estrutura de dados às vezes podem aparecer como "elitismo de programador", onde os geeks alfa estão brincando para mostrar quem é o mais inteligente. É sempre bom saber o que há por aí, mas existem muitos trabalhos de programação diferentes em que você nunca precisará saber como usar uma árvore vermelha / preta ou codificar uma pesquisa de boyer moore.

Eu recomendaria aprender mais sobre os tópicos, se você os achar interessantes e tiver algum projeto pessoal onde possa mexer com eles; caso contrário, provavelmente você pode se virar sem eles por enquanto.

PS. A proficiência em estruturas de dados rudimentares (listas vinculadas, dicionários, hashtables etc.) deve ser um conhecimento obrigatório para qualquer DS programador.

konrad
fonte
7

Então, realmente, por que toda essa ênfase nas estruturas de dados?

Duas razões.

Por um lado, mostra que você pode pensar sobre o problema em termos abstratos, e não em termos de uma linguagem de programação específica. Você sabe por que uma tabela de hash pode ser uma escolha melhor ou pior do que uma árvore vermelho-preta em uma determinada situação, independentemente da implementação subjacente?

Por outro lado, há um número assustador de pessoas por aí entrevistando para empregos que simplesmente mentem sobre sua experiência e têm muito pouca ou nenhuma capacidade de programação; as perguntas sobre estruturas de dados são uma maneira rápida de eliminar essas pessoas.

John Bode
fonte
Vou apresentar aqui uma opinião que provavelmente será controversa. A questão de por que uma estrutura de dados ou outra tende a se resumir à eficiência e ao desempenho. O que dizemos aos desenvolvedores para não fazer? Não é possível otimizar prematuramente! A menos que você saiba ao traçar o perfil de que a escolha da estrutura de dados está causando problemas de desempenho, a escolha 'certa' é aquela com a qual você está mais familiarizado. Qualquer outra decisão é otimização prematura e, portanto, má!
Tom W
2
Escolher a estrutura de dados correta com base na aplicabilidade e nas características de desempenho esperado independentemente da implementação subjacente não é um exemplo de otimização prematura.
John Bode
Escolher pilha de fibonacci sobre pilha binária pode ser. Usar heap vs list (quando heap é apropriado) não é.
user470365
5

Eles são fundamentais, mas também, sobre o que você questionaria os graduados? Eles podem ou não ter experiência fora do trabalho do curso. Seu curso pode ter coberto as tecnologias da Microsoft mais do que Java, ou vice-versa. Estruturas de dados são pontos comuns.

Ian
fonte
+1 para o que mais você formaria no teste, pois não há mais nada que todos os graduados em ciência da computação devam saber que você também conhece.
11101 Ian
4

Muitas vezes, o melhor código evita reinventar estruturas de dados de baixo nível. Isto é especialmente verdade em idiomas de alto nível. Percebi uma tendência para questões de estrutura de dados de baixo nível, mesmo em trabalhos CRUD. YMMV, mas parece que a ênfase na experiência dos cientistas hackers ofuscou as outras habilidades que fazem um ótimo desenvolvedor:

  • gerenciamento de projeto / tempo: ser capaz de acompanhar o mundo real impulsionado pelos negócios, e não uma nova lista vinculada que opera 1% mais rápido.
  • uma quantidade mínima de habilidades sociais: um desenvolvedor que é arrogante e não pode se dar bem não passa de uma âncora.
  • a capacidade de aprender coisas novas de forma rápida e contínua: as estruturas de dados dificilmente mudam ao longo dos anos ... mas tudo o resto muda. As estruturas de dados são ótimos fundamentos e todo desenvolvedor deve conhecê-las muito bem, mas um contador não é testado em suas longas habilidades de divisão quando entra para uma entrevista. Grandes desenvolvedores são o tipo de pessoa que pode descobrir coisas novas e gostar.

Estruturas de dados são ótimas. Estruturas de dados são importantes. Todo programador deve ter uma compreensão deles. No entanto, ficamos obcecados em empurrar esses fundamentos para fora do seu lugar. Não é tudo sobre estruturas de dados e, em 99% dos casos, não há necessidade de fazer perguntas além do básico das estruturas de dados. Se você estiver entrevistando um contador, pergunte a eles o que é 81 dividido por 9, mas se você continuar perguntando "Qual é a raiz cúbica de 98425454242412 * 4512324? ... sem uma calculadora!" então você estará assustando uma boa porcentagem das pessoas razoáveis, inteligentes, talentosas e agradáveis ​​que você poderia ter. Pergunte se eles podem criar um modelo de dados relacionais básico, pergunte se eles podem usar as estruturas de matriz aprimoradas fornecidas pela estrutura relevante, e pergunte se eles podem explicar quando uma pesquisa binária é mais rápida que a pesquisa plana, mas não há muito sentido em ir muito além disso. Se eles puderem fazer essas coisas, comece a procurar o mais legal, mais profissional e mais criativo do grupo.

Adoro a escrita de Joel, mas acho que a coisa dele "Java Schools" está completamente errada. Há muitas coisas que podem provar que alguém é inteligente além de dominar o C ++. Pense nisso: você pode conversar com alguém por 10 minutos, sem perguntar sobre a aritmética dos ponteiros, e ter uma boa idéia de se eles são ou não do tipo que pode fazer as coisas e descobrir coisas. Não precisamos ser assim:

Entrevistador: "Conte-me sobre suas realizações."

Coder: "Na minha última posição, eu era o único desenvolvedor de um sistema ERP personalizado para uma empresa financeira de bilhões de dólares. Entregamos meses antes do previsto, e o sistema está em produção nos últimos 3 anos".

Entrevistador: "Deixe-me esclarecer. Conte-me sobre suas realizações na programação "

Codificador: "Umm ..."

Entrevistador: "Por exemplo, você já fez sua própria lista vinculada?"

Codificador: "... [saindo]"

Morgan Herlocker
fonte
Interessante - boa lista. Que tal um olhar um pouco diferente? 1. gerenciamento de projeto / tempo: ser capaz de preparar as coisas de tal maneira que as estruturas de dados percam apenas uma pequena parte do tempo da entrevista. 2. uma quantidade mínima de habilidades sociais: um desenvolvedor capaz de entender que os entrevistadores geralmente desejam verificar rapidamente estruturas básicas de dados antes de prosseguir para áreas mais interessantes. 3. a capacidade de aprender coisas novas de forma rápida e contínua, sem distrações que possam ser causadas pela falta de conhecimento, bem, dos conceitos básicos de estruturas de dados.
Gnat
@gnat - Isso também é bom. Acho que estou entendendo que o entendimento mais profundo dos fundamentos não fala da capacidade geral após um certo ponto, mas há uma tendência de assumir exatamente o oposto. Estruturas de dados são algo que a maioria das pessoas recebe de alguém (geralmente um professor). Quero saber o que eles podem aprender por conta própria, porque é assim que o mundo real funciona. Bons programadores podem projetar sistemas razoáveis ​​com base nas melhores práticas. Grandes programadores podem aprender os sistemas insanos escritos por programadores horríveis usando as piores práticas e fazê-los funcionar.
Morgan Herlocker
1
Eu posso imaginar que o cara que trabalhou no sistema ERP não se encaixa na equipe.
22811 Christopher Mahan
4

Ser um bom programador não significa aprender idiomas e estruturas. Trata-se de ser capaz de criar soluções para problemas complexos. Para que essas soluções sejam eficientes e confiáveis, quase sempre dependerá de bons algoritmos e do uso apropriado das estruturas de dados. Saber que as estruturas de dados existem não é suficiente. Você precisa entender que as estruturas de dados serão suficientes para usar a correta para o problema. As listas e os mapas oferecem alguns recursos valiosos, mas têm custos, e o uso incorreto pode prejudicar significativamente o desempenho do seu software.

Um bom entrevistador sabe disso e está tentando determinar se você pode ser valioso para sua equipe ou empresa. O (s) idioma (s) que você usará daqui a dois anos pode ser muito diferente, mas a necessidade de algoritmos e estruturas de dados eficazes não será alterada.

cdkMoose
fonte
2

Estruturas de dados, complexidade de tempo, manipulação de memória e indicadores são todos os fundamentos que alguém que se autodenomina cientista da computação deve conhecer de maneira inata. Qualquer macaco de código pode aprender um idioma e aprender a usá-lo, mas onde profissionais e estudantes de CS devem se destacar é saber não apenas como usar uma lista vinculada ou um mapa de hash, mas POR QUE.

O porquê é o que realmente nos diferencia do script básico infantil, do código-macaco e do grunhido do mundo da computação. POR QUE usar uma tabela de hash em vez de uma lista vinculada, POR QUE minha tabela de hash deve estar em uma densidade de cluster de aproximadamente 0,6 a 0,8, POR QUE devo usar uma lista vinculada circularmente aqui, em vez de uma lista duplamente vinculada. POR QUE meu código deve ser executado com eficiência 'x' no pior caso e 'y' no caso médio.

Essas estruturas básicas de dados e o conhecimento não apenas do COMO eles são usados ​​(como deve ser o repritoire de todos os programadores de qualquer maneira), mas da linguagem independente de POR QUE eles são usados, o que tende a ser mais do que eles estão procurando nesses casos.

Muitos lugares farão com que você escreva o código em uma linguagem com a qual você esteja familiarizado, mas isso é mais generalizado, já que C não é mais a língua franca do mundo da programação, e estruturar pseudocódigo pode ser uma confusão e tudo mais. sobre o local e, na maioria dos casos, com o pseudo código / código p & p realmente não sendo ensinado, é impossível lidar com isso.

Jeff Langemeier
fonte
0

As estruturas de dados são a base fundamental de todos os programas. Você não precisa necessariamente ter um entendimento profundo deles, mas é absolutamente necessário saber como eles funcionam.

Por quê? Porque todo o seu código interage e manipula dados. Se o conjunto de dados não puder ser armazenado em uma estrutura, ele não poderá ser usado. Os dados são como os materiais de construção de uma casa. Até você montá-lo em uma estrutura, você tem apenas uma pilha inútil de tábuas.

Depois de ter decidido sobre a forma de pensar e definir o seu conjunto de dados, então você pode começar a usá-lo para fazer as coisas, o algoritmo parte clássico da dupla. Todo programa que você escreve usa uma estrutura de dados, embora em muitos casos essa estrutura seja tão simplista que quase não exista. Algumas variáveis ​​para dados de estado e pronto!

Depois de ir além dos programas triviais, quase tudo requer uma estrutura de dados. Qual você prefere, um arquiteto profissional que projeta seu arranha-céu com as melhores práticas e matemática, ou o tio Joe Bob, que começa a construir imediatamente?

Spencer Rathbun
fonte
-2

Para desenvolver o que o @Pelshoff diz , é mostrar que você sabe o que está fazendo. Se você usa um LinkedList para tudo, isso pode mostrar que você não sabe o que está fazendo ou não deseja parar e pensar sobre o problema. Além disso, pelo menos o curso de estruturas de dados que fiz, abordou a teoria básica e complexa das estruturas de dados que, ao lidar com grandes conjuntos de dados, é muito importante. Seria por isso que empresas como Amazon ou Microsoft fariam isso.

Devo dizer que, antes de fazer uma aula de estrutura de dados, pensei que elas não eram importantes, mas pelo menos ser capaz de reconhecer novamente quando uma lista vinculada (ou ArrayList) não é prática ou quais são as desvantagens delas.

Jetti
fonte
"Se você usar um LinkedList para tudo, que pode mostrar que você não sabe o que está fazendo" ou você é um :-) programador Lisp
Peter Alexander
@ Peter - o que provaria o meu ponto, você não sabe o que está fazendo! ;)
Jetti
isso parece basear-se em um link morto para a resposta excluída - bastante confuso para os leitores. Você se importaria de editar para cuidar disso?
mosquito
-2

Se você escreve um bom código ou não, é uma afirmação subjetiva. É importante saber que o código funcional nem sempre é um bom código.

Dito isto, as estruturas de dados são importantes porque são como os trabalhadores dos bastidores que você, como programador, está dirigindo. É verdade que você pode chamar métodos em uma estrutura sem entender realmente o que está fazendo e pode utilizar uma estrutura sem entender como os dados são armazenados, mas conhecer esses detalhes o preparará melhor para entender quando é apropriado usar uma estrutura sobre outro.

Saber, por exemplo, que você pode percorrer as duas direções em uma lista duplamente vinculada e somente encaminhar uma lista vinculada unicamente pode ajudar a determinar qual estrutura é importante ao armazenar dados. Você pode tomar uma decisão ainda mais educativa sabendo que uma lista vinculada individualmente pode potencialmente ter uma sobrecarga menor em termos de consumo de memória (já que não contém ponteiros para elementos anteriores); portanto, se você precisar apenas percorrer uma lista, você pode economizar memória usando uma estrutura apropriada.

Estes são apenas pequenos exemplos e, finalmente, se você sentir que está indo bem em sua carreira sem um conhecimento profundo das estruturas de dados, talvez não precise aprender mais. Porém, entender o que está acontecendo sob o capô pode realmente ajudar a transformar o código funcional em um bom código.

Jason
fonte
-3

As estruturas de dados são componentes de muitas coisas que você deseja fazer. Se você conhece os usos de cada estrutura de dados, suas fraquezas e pontos fortes, pode facilmente resolver problemas.

Por exemplo, tínhamos um requisito para gerenciar milhares de objetos. De vez em quando, precisamos atualizar o registro de data e hora de um objeto de acordo com seu ID. De vez em quando, é necessário remover os objetos que não foram atualizados por mais de X minutos.

Se você conhece suas estruturas de dados, pode definir facilmente o problema e também é muito fácil encontrar uma solução. Quando um programador que não conhece estruturas de dados suficientes tentou encontrar uma solução, sua solução foi incômoda. Ele era como você - inteligente, programador de códigos, capaz de aprender estruturas rapidamente. Mas sem um conhecimento em estruturas de dados, ele teve que inventar a roda sozinho. Mais do que isso - ele teve dificuldade em entender soluções mais simples, pois elas eram baseadas em estruturas de dados que ele não entendia, como árvores vermelho-pretas (seu antigo TreeMap em Java).

Então, eu diria que o importante é saber como e quando usar cada estrutura de dados sem ter que pensar nisso. Mas não acho que exista nenhuma maneira de conseguir isso sem realmente entender como eles funcionam.

daramasala
fonte