Quão comum é que uma equipe escreva tudo internamente? [fechadas]

53

Em uma entrevista recente, perguntei aos entrevistadores "como você avalia novas tecnologias e bibliotecas (como o SignalR) e as coloca em uso?". Eles disseram que não, que em vez disso escrevem tudo sozinhos para não precisar confiar em mais ninguém.

A empresa não trabalha para o governo ou empreiteiros de defesa ou em nenhum projeto crítico de segurança ou algo assim. Eles eram apenas sua empresa de desenvolvimento de software de tamanho médio.

Minha pergunta é: quão comum é que as equipes escrevam tudo sozinhas? Devo me preocupar com as equipes que o fazem?

Editar - Quase todas as respostas disseram que isso é algo para se preocupar. Uma segunda entrevista seria um momento apropriado para pedir que eles esclarecessem / repetissem sua posição ao escrever tudo internamente?

Andy Hunt
fonte
58
Enorme bandeira vermelha. Afaste-se calmamente e não faça movimentos bruscos.
tdammers
16
Não acho que isso seja tão ridículo como as pessoas dizem ... Recentemente, perdi um tempo incrível consertando bibliotecas abandonadas para novas versões de estrutura, novas versões de bibliotecas com alterações severas que não foram documentadas e até grandes lacunas em estruturas significativas, como jQuery, que as tornam inadequadas para o propósito. As pessoas não se esforçam o suficiente para decidir se os componentes de terceiros adicionam uma enorme sobrecarga de manutenção e geralmente acabam com um pico de dependência de espaguete não-sustentável.
Danny Tuppeny
4
O NuGet é incrível, mas facilita muito isso. Eu instalei recentemente uma biblioteca trivial de auxiliares do NuGet, e ele atraiu Castle e todos os tipos de outras porcarias inchadas. Certo; uma proibição definitiva é estranha, mas não é mais estúpida do que permitir que todos os desenvolvedores e seus cães puxem coisas aleatoriamente sem pensamento real.
Danny Tuppeny
13
Tudo? Isso inclui seus próprios navegadores, sistemas operacionais e compiladores? Caso contrário, eles estão apenas se iludindo.
Muhammad Alkarouri
4
Claro que é tão ridículo como as pessoas dizem. O fato de que a) é possível escolher a biblioteca errada para o trabalho eb) há situações em que nenhuma biblioteca de terceiros disponível atende às suas necessidades melhor do que a interna: não significa que a política geral de nunca usar terceiros bibliotecas está correta.
usar o seguinte comando

Respostas:

76

Uma atitude de nunca usar bibliotecas de terceiros é absurda. Escrever tudo você mesmo é um uso horrível do tempo da sua empresa, a menos que exista um requisito comercial rigoroso de que cada linha da base de código tenha sido escrita por um funcionário da empresa - mas esse é um cenário incomum, especialmente para uma empresa do setor privado como você descreveu.

Uma resposta mais racional e completa pode ter sido que eles usariam apenas bibliotecas de terceiros que:

  • Atender às necessidades do código que eles mesmos escreveriam
  • Estavam disponíveis sob uma licença compatível com o modelo de negócios da empresa
  • Testes incluídos
  • Aprovado na revisão de código

Se esses critérios foram atendidos (e, na minha experiência, a revisão de código é muito flexível, especialmente na presença de bons testes), você não está mais "confiando em mais ninguém" - está confiando nos existentes, disponíveis e de preferência robustos código.

Se o código for de código aberto, na pior das hipóteses, a biblioteca de terceiros ficará sem manutenção. Mas quem se importa? Os testes provam que a biblioteca é adequada às suas necessidades!

Além disso, uma aversão a bibliotecas estabelecidas de terceiros dificulta seriamente a produtividade do programador. Digamos que a empresa estava escrevendo aplicativos da Web e se recusou a usar (por exemplo) jQuery, então, em vez disso, escreveu sua própria biblioteca alternativa entre navegadores para simplificar a manipulação do DOM. Com quase certeza, podemos assumir que sua implementação:

  • Terá uma API estrangeira para desenvolvedores já familiarizados com o jQuery
  • Não será tão bem documentado quanto o jQuery
  • Não terá resultados relevantes do Google ao encontrar problemas ao usar a biblioteca
  • Não será tão testado em campo quanto o jQuery

Todos esses pontos são grandes barreiras à produtividade do programador. Como uma empresa pode se dar ao luxo de desistir dessa produtividade?


Você atualizou sua pergunta para perguntar se isso é apropriado para iniciar em uma segunda entrevista. Absolutamente é.

Talvez você tenha interpretado mal a resposta do entrevistador na primeira entrevista, ou talvez o entrevistador tenha explicado incorretamente a posição da empresa e um novo entrevistador possa esclarecê-la.

Se você explicar que está preocupado com a posição deles em bibliotecas externas, há pelo menos dois resultados possíveis:

  • Eles estão abertos a mudanças, e sua preocupação com o processo deles faz com que você pareça melhor do que alguns outros candidatos.
  • Eles não estão abertos a mudanças e pensam em você como "o tipo de desenvolvedor que não queremos contratar". Não importa, esse não é o tipo de lugar em que você deseja trabalhar.
Mark Rushakoff
fonte
11
+1, mas acho que você quis dizer setor privado , não setor público .
MarkJ
6
"Se o código é de código aberto, na pior das hipóteses, a biblioteca de terceiros fica sem manutenção. Mas quem se importa? Os testes provam que a biblioteca é adequada às suas necessidades!" Você também tem o código fonte, que o coloca na posição de ter o que está usando agora e de poder atualizá-lo para atender a quaisquer necessidades futuras. (Sim, se acostumar com uma base de código "alienígena" leva tempo, mas também rolar o seu próprio.)
um CVn em
34

Isso parece incrivelmente pouco competitivo. Eu trabalhei em lojas que decidiram pular as bibliotecas padrão de código aberto, como o Hibernate, e criar suas próprias devido a algum recurso ausente "crítico". No final, o software era incrivelmente caro para construir e manter. É claro que as despesas da biblioteca interna foram subestimadas. E enquanto a biblioteca interna foi gravada, as bibliotecas padrão avançaram rapidamente, adicionando novos recursos que não estavam disponíveis na biblioteca interna. No final, o trabalho que levaria uma hora usando uma biblioteca padrão levou dois dias. E isso foi ruim para as carreiras do desenvolvedor, à medida que o mundo passava por elas. Eu evitaria uma loja assim. Gosto de entregar e não tenho paciência para reescrever quando poderia reutilizá-lo.

Kevin Cline
fonte
2
Como os desenvolvedores não tinham mais habilidades relevantes para outros trabalhos, o dinheiro da empresa perdido no tempo de desenvolvimento prolongado foi economizado por não ter que substituir os membros da equipe que estavam saindo! #stratgey
Michael Paulukonis
@ Michael: As únicas pessoas que eles conseguiram reter foram as pessoas presentes na decisão original de criar estruturas internas. Os novos contratados tendem a sair depois de cerca de um ano.
Kevin cline
</itwasaweakjoke>
Michael Paulukonis
+1 Se o recurso ausente for realmente, verdadeiramente, crucial: modifique a biblioteca de código aberto e contribua com o recurso na fonte principal. Oferece grande valor comercial, faz com que todos se sintam bem e é excelente para os currículos de todos, porque agora eles deram uma contribuição de código aberto.
MarkJ
@ MarkJ: mas se a mudança for rejeitada, alguém terá um ego machucado.
Kevin cline
20

A loja tem uma doença chamada Não inventada aqui . É um bom motivo para encerrar a entrevista no local e sair imediatamente. Isso só pode ser curado com uma limpeza de cima para baixo que é muito improvável.

Para responder sua pergunta, infelizmente é muito mais comum do que você imagina e é definitivamente um motivo para se preocupar.

Dan Pichelman
fonte
15

Sim, definitivamente se preocupe! Isso cheira a arrogância e (desculpe por ser duro) estupidez. Qualquer programador com meio cérebro usará uma biblioteca como signalR em vez de escrever você mesmo. Não faz sentido perder tempo resolvendo um problema que já foi resolvido. Eu provavelmente tentaria descobrir mais informações primeiro - eles podem ter entendido mal você (pode ser difícil, se as entrevistas terminarem!)

Rocklan
fonte
11

Tenho alguns amigos que trabalharam (brevemente) em casas de software com a síndrome não inventada aqui . Então a mentalidade está lá fora.

Uma observação que ambos fizeram foi em torno da cultura, a abordagem promovida nas equipes de desenvolvimento. Os dois acabaram trabalhando com pessoas que eram bastante insulares em termos de perspectivas sobre o desenvolvimento de software e pessoas que não eram realmente motivadas a aprender coisas novas e buscar qualidade. Independentemente do estágio em que está na sua carreira, você sempre gostaria de trabalhar em algum lugar em que tenha a chance de aprender coisas novas de seus colegas. Entretanto, esse tipo de ambiente geralmente não é encontrado em lugares que desejam rolar tudo por conta própria.

avik
fonte
Marcou com +1 uma das principais razões pelas quais me mudei do meu empregador anterior!
Antony Scott
5

Não é comum onde eu moro, e conheço muitas empresas através de colegas. Eu diria que é um imediato "não, obrigado" de mim.

Não vou regurgitar os bons pontos já apresentados, mas vou acrescentar uma coisa.

Eles acabaram de tornar a contratação muito mais difícil.

  • Todas as novas contratações têm uma curva de aprendizado ainda mais acentuada do que apenas a parte principal do software / domínio
  • Os melhores candidatos serão adiados, pois não desejam que suas habilidades não sejam utilizadas.
  • Não é provável que as pessoas permaneçam por muito tempo depois que percebem o quão ruim não está usando suas ferramentas favoritas, e a rotatividade de funcionários é cara

Agora, é claro, haverá pessoas que gostarão do desafio, mas acho que elas seriam minoria.

E, igualmente, haverá algumas empresas que operam em "escala da Internet", Amazon, Facebook, etc., onde elas têm necessidades personalizadas insanas, mas, novamente, são minoria.

ozz
fonte
4

Não acho que uma empresa de software possa sobreviver hoje sem depender de software de terceiros e / ou de código aberto e, para permanecerem competitivas, é claro que precisam acompanhar ativamente as novas tecnologias. Muitas vezes, existem boas razões para adotar pelo menos uma visão bastante defensiva.

Por exemplo, se você vende software e pretende fornecer suporte 24 horas por dia, 7 dias por semana, e também é legalmente responsável por seu software funcionar corretamente, é necessário ter uma idéia muito precisa do que acontecerá se houver um problema com o seu software. software em, digamos, uma fábrica onde 1 hora de inatividade da produção pode custar vários milhões de dólares e, em seguida, ocorre um bug sério na biblioteca de código aberto que você estava usando. Acredite, você realizará avaliações muito completas do software em questão.

Pelo que você escreveu, esse cenário não parece estar no cerne da questão.

Thomas
fonte
4

Se você é uma empresa de base tecnológica de um determinado tamanho, parece que estará desenvolvendo cada vez mais sua própria tecnologia, por exemplo: o google desenvolve muito, se não a maioria, se não todo o software, enquanto o código aberto é a maioria. na busca de torná-lo um padrão da indústria.

Para empresas menores, parece um desperdício de tempo total quando eles tentam enviar um produto específico com sua própria lógica de negócios e, na minha experiência, não vi que empresas de pequeno e médio porte o façam.

Torna-se mais complicado quando você está falando sobre uma base de código altamente especializada, por exemplo: algoritmos de criptografia - algumas pessoas têm um entendimento básico de como funcionam, mas as partes complexas da implementação de uma solução parecem parecer um tiro no pé a menos que você contrate um criptógrafo especializado em tais coisas.

Algumas empresas permitem a liberdade de criar seus próprios projetos de código aberto, o que parece mais apropriado.

Eu pessoalmente não iria a um lugar com essa cultura.

Itai Sagi
fonte
1

O que você tem é uma boa oportunidade para entrar na segunda entrevista e fazer algumas perguntas difíceis. Não sei o que a empresa faz, por isso é difícil dizer por que isso parece uma escolha estranha. Você pode usar o comentário de @Daniel Pryden no que diz respeito ao uso de bibliotecas de terceiros pelo Google.

Qualquer software que você usa, seja interno ou de terceiros, tem vantagens e desvantagens. Não usar uma ferramenta porque ela não é interna, mesmo que seja a melhor ferramenta para o trabalho que mostre uma certa mentalidade fechada e que nunca incentive a inovação e a criatividade.

Talvez, talvez, você seja a pessoa a introduzir essa mudança. Boa sorte com tudo.

Daniel Hollinrake
fonte
-3

Claro que você deve ir embora. Eu não vi isso mencionado aqui, mas o maior motivo para deixar o cargo de lado é porque você não ganhará muito em habilidades transferíveis.

Imagine na sua próxima entrevista quando eles perguntarem com quais tecnologias você trabalhou e você só pode mencionar C ++ básico. Isso soa como um nível de graduação

Martin Konecny
fonte
"Eu não vi isso mencionado aqui" - você olhou para outras respostas, por exemplo, para esta ?
Gnat
3
Não ganhará muito em habilidades? Isso é ridículo. Isso só é verdade se você visualizar a programação como jogando com blocos de Lego, empilhando componentes. Se você precisar reinventar uma biblioteca, aprenderá bastante sobre um tópico específico.
precisa
@GrandmasterB Você está correto, permita-me esclarecer - Muitos lugares perguntam com quais ferramentas você trabalhou. Suas chances de passar despercebidas são muito maiores se outros candidatos puderem começar a correr enquanto você precisa aprender do zero.
Martin Konecny
-9

As grandes empresas escrevem tudo sozinhas.

Existem várias vantagens em escrever você mesmo:

  1. Você tem a garantia de possuir o software por conta própria
  2. Você pode calcular corretamente as quantidades de trabalho que foram criadas para criá-lo
  3. Repetir suas etapas se torna possível, mesmo que da próxima vez as bibliotecas não estejam disponíveis
  4. Reduz o inchaço das suas necessidades
  5. Você não está repetindo o que os outros já fizeram
  6. Você tem a garantia de ter pessoas suficientes para mantê-lo
  7. Você pode modificar todas as partes do software
  8. O tamanho do software é limitado pela quantidade de recursos que você possui

Veja como cada um dos pontos se quebra se você usar a biblioteca de outra pessoa:

  1. Outra pessoa é dona da lib
  2. Você não sabe quanto esforço foi necessário para criar a biblioteca
  3. É impossível criar sua próxima versão do produto na nova plataforma, pois as mesmas bibliotecas não estão mais disponíveis
  4. A capacidade de implementar o requisito depende de a lib ter implementado anos atrás
  5. Outra pessoa também usa a mesma lib, obtendo as mesmas limitações e recursos
  6. Como você não criou as bibliotecas, não há pessoas suficientes para manter todo o software do seu produto
  7. Libs são binários, não modificáveis. Mesmo se a fonte estiver disponível, você não terá pessoas suficientes para modificar essa grande quantidade de código.
  8. Manter o código que você criou + as bibliotecas é um esforço maior do que o estimado originalmente
tp1
fonte
7
A extensão lógica desses argumentos não seria também escrever seu próprio compilador (provavelmente para o seu próprio idioma), executar este software em seu próprio sistema operacional e provavelmente criar seu próprio HW também?
timday
4
1: Sim, e posso pagar uma taxa para usá-lo (sem gastar dinheiro para construir a diferença de custo). 2: Se não estou construindo, não me importo. 3: nas plataformas de negócios demoram a mudar. Permanecer na vanguarda raramente é um requisito. Mas um bom software mudou-se facilmente. 4: Não é verdade. Você acabou de transferir o inchaço de externo para interno. 5: Não faz sentido. 6: Não é verdade. 7: Verdadeiro, mas significa que você precisa desviar seus preciosos programadores (a parte mais cara de um projeto) do trabalho real para a correção de bugs em algo que poderia ser mantido em outro lugar. 8: Isso é uma coisa ruim.
Martin Iorque
5
Muitas grandes empresas fazem uso extensivo de código-fonte aberto de várias formas (incluindo bibliotecas), melhorando / contribuindo frequentemente para os projetos relevantes. Os pontos são principalmente irrelevantes ou incorretos.
Matt
7
@ tp1: trabalho para o Google e posso garantir que o Google usa muito bibliotecas de terceiros quando atendem às nossas necessidades. Muitas vezes, o Google tem necessidades únicas ou em uma escala diferente de muitas outras empresas de software; portanto, por um motivo ou outro, o Google geralmente desenvolve coisas internamente. Mas o Google também usa um grande número de bibliotecas de código aberto e / ou de código aberto muitas bibliotecas internas; portanto, nem tudo é interno. A maioria dos seus pontos não se aplica mais ao software de código aberto, pois ao ter o código-fonte, você garante que você sempre pode depurá-lo e corrigi-lo, se necessário.
Daniel Pryden
5
"Não, o valor vem da implementação precisa dos requisitos. Se ele foi construído antes que os requisitos fossem conhecidos, não pode implementar com precisão esses requisitos exatos." Dica: Se você acha que esse argumento tem algum mérito, não conseguiu entender a separação de preocupações.
usar o seguinte comando