Qual biblioteca / estrutura você considerou muito complexa para o problema que está solucionando? [fechadas]

12

... e codificou a funcionalidade "manualmente"?

Como um exemplo bastante metafórico, você dificilmente precisaria de uma biblioteca para resolver equações quadráticas, embora essas bibliotecas existam e alguém as leve a sério.

Como um caso mais questionável, dependendo das circunstâncias, posso abandonar o jQuery (por exemplo, quando não preciso dar suporte a alguns navegadores da idade da pedra): simplifica algumas coisas, mas adiciona outra camada de complexidade e falta de confiabilidade ao DOM. O uso excessivo de jQuery leva a problemas absurdos, como um visto recentemente no SO: como atribuir um href vazio a uma atag com jQuery? Acabou que era uma questão de HTML, nem mesmo JavaScript.

Outro caso absurdo e ainda não óbvio para muitos está usando algum mecanismo / linguagem de modelagem construído sobre outro sistema de modelagem: PHP. Terceiro nível de modelar alguém?

E outra: às vezes apenas cuspir XML com (figuralmente) printfé muito mais fácil do que fazê-lo com algum mecanismo XML monstruoso.

Algum outro caso de sua experiência?

mojuba
fonte
4
Como qualquer outra ferramenta, você usa o jQuery onde for apropriado. Você não usa um martelo e um formão para abrir a porta da frente se tiver uma chave.
Robert Harvey
1
@ Robert Harvey: é claro, mas em engenharia de software, muitas vezes estamos tendo problemas para reconhecer chaves e martelos. É disso que trata o post.
Mjuba
Lembre-se de que, por mais complexa que seja uma biblioteca popular, é mais fácil entender para outras pessoas do que sua biblioteca "simples" personalizada, porque elas estão acostumadas.
Louis Kottmann
@RobertHarvey sua porta deve estar em muito melhor forma do que a minha.
Jimmy Hoffa

Respostas:

14

Grande parte da biblioteca corporativa da Microsoft e a maioria dos controles de terceiros para .net me deixaram com essa sensação após um pouco de uso.

Sua milhagem pode variar

Conta
fonte
2
Concordo - a maior parte da biblioteca Enterprise é confusa ou não intuitiva, com um desfile de bibliotecas de terceiros que fazem um trabalho melhor. Mas, claro, se você bater a Microsoft sobre o título deve ser uma "melhor prática"
Watson
nos primeiros dias, o entlib fez algumas coisas que eram difíceis de fazer ou descobrir com as estruturas iniciais ... hoje em dia parece ser principalmente a compatibilidade com os primeiros dias ou soluções parcialmente prontas que você vê em versões futuras em muito melhor forma.
Bill
13

Windows Communication Foundation

O fato de ter uma foto de um canivete suíço na página inicial resume tudo para mim. Imagine que a configuração XML seja cerca de quatro vezes maior que o código real que você escreve, e ainda é muito difícil escrever serviços SOAP interoperáveis ​​entre C #, Java, PHP, Python e todas as outras linguagens que "deveria" seja interoperável com ...

Em todos os projetos futuros, continuarei com o REST.

Dean Harding
fonte
2
O WCF 4.0 não requer nenhum arquivo de configuração XML. Não tenho experiência com interoperabilidade com outras tecnologias (além de usar o WCF como cliente, o que funciona bem), mas posso dizer que achei fácil e intuitivo. Mesmo tendo começado a usá-lo sem ler nenhum livro ou ter nenhum treinamento (e com prazos a cumprir), fui capaz de começar a correr.
Allon Guralnek
4
Renomeei o "WCF" para "WTF".
MetalMikester
1
@Allon: Eu vou admitir que eu não tentei WCF 4.0, é bem possível que eles fizeram melhorias significativas nessa área ...
Dean Harding
12

Um dos problemas que experimentei com as pessoas "fazendo o que é seu" é que - embora sua abordagem seja frequentemente mais rápida e mais simples - também é mais provável que seja quebradiça, tenha erros, seja incompleta e / ou contenha falhas de segurança .

Exemplo simples: pode ser 10 vezes mais fácil usar printf para emitir XML do que usar uma biblioteca:

printf("<xml>%s</xml>", str);

mas você se lembrou de escapar de caracteres especiais str? Por exemplo ' <' e ' &'? Algumas pessoas podem dizer "não, eu não fiz" e continuar a escrever isso:

printf("<xml><![CDATA[%s]]></xml>", str);

Mas ainda emitirá XML quebrado se str" ]]>" contiver a substring em qualquer lugar. Case Edge - com certeza. Mas ainda é um cenário válido que pode levar a problemas inesperados com sérias conseqüências.

Existem muitos momentos e lugares em que "fazer o seu próprio" pode ser apropriado, mas às vezes é preciso muita experiência e conhecimento para identificar quando é apropriado. É por isso que geralmente incentivo os programadores a preferir usar bibliotecas estabelecidas (quando disponíveis) em vez de rotinas auto-implementadas.

Mike Clark
fonte
11

Log4Net

A biblioteca é boa, mas a documentação é horrível. Foi um exagero pelo que eu queria fazer.

Eu usei o Trace .

Robert Harvey
fonte
1
Robert, você me venceu também, seu canalha! Eu apenas olho para o log4net e penso "uau, esses ouvintes são legais. Agora, como eu o uso ..?" e então acho que, no momento em que descobri, poderia ter escrito o meu.
precisa saber é
5
Realmente - eu teria que discordar respeitosamente - não é mais simples que log.error ().
Watson
3
@ Watson: Se é realmente assim tão simples, por que você precisaria de uma estrutura?
Robert Harvey
Eu uso a alternativa do The Object Guy que leva alguns minutos para configurar, sendo adiada pela complexidade desnecessária do Log4Net.
CjmUK
7

SharePoint

Não me interpretem mal, o SharePoint é incrível se você precisa da maioria das coisas que vem (e vem com muito!), Mas se você não sabe o que está fazendo ou precisa apenas de uma ou duas coisas, massivamente não vale a pena o esforço e a configuração.

Ryan Hayes
fonte
6

ASP.NET WebForms - Embora como desenvolvedor da Web .NET tenha sido o meu pão com manteiga por um longo tempo, desde que comecei a usar a estrutura MVC (e proveniente de um ambiente de modelo PHP / Smarty) - você percebe que às vezes há apenas melhores maneiras de desenvolver a web e a abstração que ela usa são exageradas e com vazamentos .

Watson
fonte
Eu acho que você quer dizer ASP.NET WebForms, diferente do ASP.NET MVC. Corrigir?
Eric Rei
@ Eric - sim correto, eu deveria consertar isso!
Watson
3

Em quase todos os casos que fiz isso, acabei me arrependendo:

  • Usar as funções oci_ * do PHP em vez de uma biblioteca de wrapper acabou sendo uma péssima jogada devido à manutenção do código. A portagem de todo o código para o Zend_Db facilitou muito o desenvolvimento da manutenção do código do banco de dados.
  • Rolar meu próprio componente de grade ajax, que levou muito tempo para se desenvolver ainda mais, dada a rapidez com que alguns dos outros componentes da grade evoluem. Atualmente, estou portando tudo para as grades Ext JS, porque com essas há uma enorme quantidade de funcionalidades de terceiros disponíveis.
  • Evitar bibliotecas como prototype e jquery levou a repetidas ocorrências de problemas entre navegadores, geralmente difíceis de rastrear. A porta Ext JS resolveu meus problemas no navegador. É mágico, mesmo que seja um vasto quadro que demorei semanas para entender.

Cheguei à conclusão de que é muito melhor escolher algumas estruturas confiáveis ​​de terceiros e usá-las como base para tudo o que você faz. Essas estruturas são desenvolvidas e depuradas por outra pessoa, o que economiza muito tempo depois que você as padroniza e as entende bem.

Joeri Sebrechts
fonte
+1. E ajuda se essas bibliotecas forem de código aberto. Vá em frente e faça o download do código-fonte para todas as bibliotecas que você está usando, se ainda não o tiver. A leitura do código fonte da biblioteca é uma ótima maneira de diagnosticar e corrigir problemas, além de uma oportunidade de aprender com o código de outros programadores (presumivelmente de alta qualidade).
Mike Clark
2

System.Text.RegularExpressions

Regex é tão complexo e tão lento. Muito raramente usarei Regex e geralmente escrevo meu próprio texto analisando e correspondendo.

Ocasionalmente, acho o Regex útil para uma correspondência realmente complexa.

Chris Persichetti
fonte
Você compila o regexp corretamente [ou talvez o System.Text.RegularExpressions seja mais lento que o Perl & co. implementação]?
Maciej Piechotka 5/11/10
3
O Regex pode ser relativamente lento em comparação com a análise manual de strings, mas é mais rápido do que muitas pessoas pensam e geralmente mais do que rápido o suficiente para a maioria das aplicações práticas.
Mike Clark
2
Eu não acho que isso seja realmente uma reclamação sobre a implementação do .NET em particular, uma vez que não há nada particularmente complexo ou lento (na verdade, eu achei uma das implementações mais rápidas disponíveis). Pelo menos, essa tem sido a minha experiência. Obviamente, expressões regulares em geral se tornam facilmente complexas, e certamente existe a tendência das pessoas usá-las em lugares totalmente inapropriados.
Dean Harding
2

Não que o Delphi4PHP precise de qualquer pressão negativa, mas eu tentei (versão 2.0) e foi extremamente difícil de dobrar à minha vontade. Eu queria usá-lo para criar um aplicativo da web no estilo do youtube para os clientes assistirem a vídeos de treinamento, mas era muito complicado e quando tentei combinar estruturas PHP (VCL4PHP, Zend, Smarty e Recess), me deparei com o inevitável, preciso renomear tudo porque não há namespaces no problema do PHP 5.

Dito isto, eu não fiz o meu próprio no final. Eu aprendi apenas com meus erros e decidi mantê-lo muito simples e usar o CodeIgniter e FlowPlayer (com JQuery).

Tenho um pressentimento de que quaisquer estruturas que saiam do PHP 5 vivas, o PHP 6 terá algumas estruturas impressionantes que podem realmente ser boas juntas.

Peter Turner
fonte
2

Weka

Faço muito trabalho de aprendizado de máquina e, se precisar de algo simples como Naive Bayes ou regressão logística, adoro abandonar Weka. Possui boas implementações de alguns algoritmos de aprendizado de máquina bastante complicados, mas a API é uma API Java da velha escola (pré-genérica) excessivamente orientada a objetos. Coisas que me incomodam com isso:

  1. Ele cria sua própria matriz redimensionável que nada mais usa, garantindo a conversão de trabalho intenso para frente e para trás.

  2. Muitos acoplamentos seqüenciais nos quais os métodos precisam ser chamados em uma ordem específica e, a menos que você efetue o RTFM com cuidado, você não perceberá.

  3. Toda instância deve ser um objeto Instance e eu tenho que declarar explicitamente com um objeto Attribute se é nominal ou numérico. Isso leva a muitos trabalhos ocupados convertendo dados para o formato que Weka deseja. Isso é especialmente irritante, pois a API Weka lança tantas exceções que a compilação de código não significa que provavelmente funcione de qualquer maneira. Se eu estivesse projetando a API, seria liberal no que aceitei (talvez apenas pegue uma matriz de Object) e apenas faça uma introspecção dos dados para descobrir o que obtive e qual é a coisa certa a fazer.

dsimcha
fonte
2

Em um projeto específico, abandonei o EJB3. Isso me deu injeção de dependência e manipulação de transações gerenciadas por contêiner. Mas introduz enormes dependências (por exemplo, JBoss) e dificultou o sistema de escrever testes automatizados. Agora reduzi a injeção de dependência do construtor JPA +.

Conor
fonte
1

Cuspindo HTML em uma porta de depuração em um aplicativo. Eu precisava de uma maneira simples de obter alguns dados atuais (com atualização automática). Puxar uma biblioteca para formatá-la seria bom, mas era mais fácil imprimi-la.

Também rejeitei na biblioteca por outro: usamos uma biblioteca XML grande e complexa na maioria das coisas. Depois de passar 4 horas um dia tentando fazê-lo funcionar em um novo aplicativo, eu apenas disse 'ensaca' e puxei o TinyXML. Não é nem de longe tão poderoso, mas é preciso muito menos esforço para fazer coisas simples.

Michael Kohne
fonte
1

Recentemente, tenho trabalhado em um compilador de linguagem de script que posso usar em meus aplicativos. Eu usei outros, mas nenhum faz exatamente o que eu preciso que eles façam. Então eu pensei por que não tentar escrever o meu? Pode levar um ano ou dois antes de ser realmente adequado para uso geral, mas tudo bem. Além disso, é uma ótima experiência de aprendizado.

Outra solução 'roll my own' são as peças usadas para traduzir meus aplicativos. Existem bibliotecas existentes, mas eu não gostei de nenhuma delas. Então eu fiz o meu.

E os componentes de banco de dados do Delphi. Eu os odeio. Sempre tem. Então, eu criei minha própria interface de banco de dados que funciona da maneira que eu quero que funcione (e exatamente como a que eu fiz para o PHP funciona, facilitando a codificação nas linguagens).

Basicamente, quando é dada uma opção, normalmente acabo criando minha própria biblioteca.

GrandmasterB
fonte
Eu sei o que você quer dizer. Eu posso lhe mostrar todo um arsenal de STL, abstração de BD fabricados em casa, idiomas inteiros com seus compiladores ou intérpretes, e o que não. Geralmente, não é bem-vindo por seus colegas e gerentes, mas qual programador que nunca escreveu um compilador, mesmo que ninguém se importasse com isso?
Mjuba
0

Ohhh, tantos. Já trabalhei em alguns projetos ágeis usando APIs de código aberto. Ótimo quando eles funcionam, mas geralmente sofremos desenvolvedores com um fetiche por trazer todos os tipos de APIs de terceiros, alguns obscuros, outros não, apenas porque desejam usar uma ou duas classes neles. O resultado final é uma mistura de códigos e sistemas hackeados. Eles o entregam alegando que é o melhor código de todos os tempos, e os pobres patetas que o pegam encontram uma bagunça ininteligível e não documentada, cheia de problemas de dependência e hacks.

drekka
fonte