... 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 a
tag 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?
fonte
Respostas:
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
fonte
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.
fonte
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:
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: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.
fonte
Log4Net
A biblioteca é boa, mas a documentação é horrível. Foi um exagero pelo que eu queria fazer.
Eu usei o Trace .
fonte
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.
fonte
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 .
fonte
Em quase todos os casos que fiz isso, acabei me arrependendo:
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.
fonte
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.
fonte
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.
fonte
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:
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.
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á.
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.
fonte
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 +.
fonte
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.
fonte
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.
fonte
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.
fonte