Qual a importância do conhecimento do domínio versus do conhecimento técnico?

33

Estou trabalhando em um aplicativo de negociação e gerenciamento de riscos e, embora com experiência em C #, fui solicitado a trabalhar em pacotes SSIS. Agora eu posso viver com isso. O ponto negativo é que há muita ênfase no entendimento dos negócios. Negociação (Energy Trading, para ser exato) é uma área ENORME e a compreensão de cada parte é esmagadora. Mas, nos últimos dois meses, tenho trabalhado na compreensão dos termos de negócios - Mark To Market, Métricas de Risco, Posições, PnL, Gregos, Instrumentos, Estrutura de Livros ... todos os pequenos detalhes (você entendeu bem). Agora IMHO, este é o trabalho de um BA. Claro que é muito importante que os desenvolvedores entendam o negócio, mas onde você desenha a linha?

Quando conversei com meu gerente sobre isso, ele quase zombou de mim dizendo que qualquer um pode aprender uma tecnologia em uma semana. É o negócio mais difícil. Minha aspiração a longo prazo é permanecer no lado técnico, provavelmente me tornar um arquiteto (se possível). Se eu quisesse me concentrar tanto nos negócios, teria feito um MBA!

Quero saber se estou errado ou ingênuo ao entender a importância do negócio ou se minha frustração é justificada?

Mayank
fonte
12
Diga ao seu gerente que a tecnologia / programação não se limita ao EXCEL || EM Office || Connect ao mesmo tempo, que qualquer pessoa pode aprender em uma semana.
Ranger
Não acredito em algumas das respostas, espero que as pessoas votem negativamente nas respostas com vingança.
Gaurav
@ Gaurav, espero que não. Eu não acho que emoções acaloradas fariam algum bem neste fórum (ou em qualquer fórum em geral). Gostaria de saber suas objeções concretas; portanto, fique à vontade para comentar as respostas com as quais você tem problemas.
Péter Török
@Ranger LOL! Você diz que será fácil um trabalho de gerente?
Gopi
5
Peça a ele para aprender o que você faz em uma semana. Essa é uma atitude altamente arrogante. Eu até apostaria com ele que ele não pode fazer o que você pode, apostar o dobro do seu salário. Pode demorar uma semana para um newb aprender a sintaxe da memória, operandos e condicionais de um idioma específico ... e provavelmente um mês ou mais para dominá-los. Foi um longo processo para chegar onde estamos, mas geralmente é a nossa paixão, então espalhamos as dificuldades por toda a vida.
Incognito

Respostas:

33

O trabalho de um programador é traduzir os requisitos de linguagem natural em implementações de linguagem de máquina. Você não pode fazer isso efetivamente se for apenas fluente de um lado ou de outro. A menos que você esteja escrevendo compiladores ou software de controle de versão, praticamente todos os trabalhos de programação exigirão uma quantidade significativa de conhecimento que não é de programação.

Karl Bielefeldt
fonte
1
Quando um programador não estava ciente de que cliente falar difícil código
Gopi
+1 @Sri Kumar é verdade, mas acho que sendo uma programação, você ainda deve descobrir o que eles precisam e como você usaria a tecnologia para criar uma solução. Concordo que escrever soluções comerciais significa encontrar todos os tipos de empresas.
Gideon
3
Minha resposta teria sido a mesma coisa com palavras diferentes. Se você não entender o contexto do que está criando, você o criará no contexto que entende, não no que é ESPERADO. A menos que você esteja em uma equipe grande e esteja escrevendo especificações e objetos XML com base em diagramas UML, é muito importante.
Incognito
Mesmo compiladores e vcs têm um domínio, podemos estar mais à vontade com ele.
21713 Josh Johnson
24

Benjol e seu gerente estão certos, mas deixe-me detalhar:

aprender o domínio do negócio é como você agrega valor ao processo e aumenta seu valor ao negócio

esta é a diferença entre um programador de código de macaco e um desenvolvedor

Steven A. Lowe
fonte
7
+1 Não tenho uso para programadores. Preciso de desenvolvedores, também conhecidos como solucionadores de problemas. :)
jmort253
18

Há um ditado que veio do Departamento de Ciência da Computação da minha universidade:

Se você deseja criar um software para geólogos, primeiro precisa entender geologia. Se você deseja criar um software para físicos, você deve primeiro se interessar por física. Se você quer entender negócios, primeiro precisa aprender a falar de negócios.

Eu ouço pessoas aqui o tempo todo dizendo que o desenvolvimento de software é um campo criativo. Eu acredito que isso é verdade até certo ponto. Envolve criatividade, pois é preciso ser capaz de enxergar fora da caixa para resolver uma série de problemas.

O que isso não significa é que você pode simplesmente se sentar e, de forma criativa, construir o que quiser. Isso não é aula de arte, é engenharia, e seus clientes e partes interessadas esperam que você crie algo que resolva os problemas deles , e não algo que seja "legal".

Para resolver um problema, você deve primeiro entender o problema. Você precisa entrar na cabeça dos usuários e entender como eles pensam.

Esteja você criando software para finanças, marketing, vendas, geologia, física ou qualquer outro campo que o software suporte, você deve se tornar parte desse campo.

É por essa razão que, além do meu diploma em Ciência da Computação, também me formei em Administração; isso causou um enorme impacto na minha capacidade de comunicar possíveis soluções e fornecer produtos de sucesso.

Se você quiser saber mais sobre o que eu procuraria ao contratar um engenheiro de software de negócios, consulte este Exemplo de anúncio de emprego de engenheiro de negócios que escrevi como resposta a outra pergunta.

jmort253
fonte
2
+1 - Seus clientes e partes interessadas esperam que você crie algo que resolva os problemas deles, e não algo que seja "legal".
Karthik Sreenivasan
"Se você deseja criar software para geólogos ..." adore essa afirmação. Qual universidade? gostaria de poder citá-lo!
Raj Rao
1
@RajRao Infelizmente, parafraseei e não me lembro exatamente de quem aprendi isso. Foi o Dr. Ruben Gamboa ( uwyo.edu/cosc/cosc-directory/ruben/index.html ) ou o Dr. William Spears ( uwyo.academia.edu/WilliamSpears ) da Universidade de Wyoming, Laramie, Wyoming, EUA.
jmort253 5/06
14

Você pode sobreviver sem muito conhecimento do domínio ou contato do cliente como codificador de baixo nível, mas um arquiteto de software é alguém que está muito familiarizado com o domínio e se comunica ativamente com todas as partes interessadas.

vegai
fonte
2
+1 - É muito ingênuo pensar que se pode ser um arquiteto de sucesso sem entender o domínio. Se eu pudesse, marcaria novamente com você por mencionar a comunicação. Muitas pessoas negligenciam o desenvolvimento da comunicação em suas carreiras.
jmort253
11

Na minha opinião, você está errado e ingênuo demais.

Como seu gerente disse (levemente), qualquer um pode aprender uma tecnologia em uma semana. A única coisa que vai marcá-lo e torná-lo útil para sua empresa é o seu conhecimento comercial. E quanto mais difícil, mais valerá a pena.

Obviamente, se você achar que esse negócio em particular é incrivelmente entediante, pode procurar algo diferente. Mas se sua idéia do paraíso é invadir pequenos sites php, cuidado: haverá milhares de crianças que também estão fazendo isso.

Sério, "eu sou apenas um programador, não me confunda com os fatos" simplesmente não serve.

Benjol
fonte
1
Eu concordo com isto. Se você deseja codificar no vácuo, volte para a academia ou consiga um emprego em um ramo de pesquisa de grandes empresas como IBM, MS ou Google. Para a maioria de nós, a realidade é que precisamos entender o negócio, especialmente se o objetivo é se tornar um arquiteto, que é fundamentalmente uma combinação de desenvolvedor forte e BA forte.
Curtis Batt
1
@ Mayank, imho, é realmente muito difícil entender os detalhes de todo o negócio, e é algo que você realmente deve esperar fazer naturalmente ao longo do tempo. Cada elemento do (s) sistema (s) em que você trabalha deve envolver naturalmente aprender mais sobre o negócio. Foi assim que as coisas funcionaram quando trabalhei em indústrias com forte conhecimento de domínio.
Carson63000
2
@ Mayank, Não, não é errado dizer que é muito difícil. Quando cheguei ao meu emprego atual, meus novos colegas me disseram que levaria seis meses apenas para entender o código . Agora estou aproximando 4 anos e ainda aprender coisas novas sobre o negócio ...
Benjol
1
+1000 se eu puder. IMHO, a tecnologia é a parte fácil / divertida.
ozz
1
Não, ele não está sendo ingênuo. Ainda mais o seu gerente é um bleeping idiota, e deve ser remou em uma base regular.
Gaurav
8

Eu também trabalho no comércio de energia. Conhecimento de negócios é 90% do trabalho. Você não pode contornar isso - é um negócio complicado.

Se você não entender pelo menos o básico da negociação e os mercados em que está trabalhando, terá dificuldades, não importa quão bom seja um programador.

Eu trabalho com alguns bacharéis que simplesmente não conseguem atender corretamente aos requisitos. Eu preciso confiar em minhas próprias habilidades analíticas e compreensão do conhecimento de negócios para fazer o trabalho.

Acho que se você estiver trabalhando para uma loja que vende software de negociação de energia, sua experiência pode ser diferente - mas no comércio corporativo de energia de TI o foco está diretamente na compreensão do mercado e em como o software pode fornecer soluções para os problemas da empresa primeiro.

As tecnologias atuais usadas e a implementação chegam em um segundo distante.

O cara acima que fez o comentário do Excel não sabe o quão adequado é o comentário dele. Os traders geralmente criam seus próprios aplicativos comerciais em Excel / VBA (isso é tudo o que sabem) e, em seguida, a TI acaba herdando essas bagunças de programas.

Adoraria reconstruir alguns desses aplicativos em um idioma "adequado", mas isso nem sempre é uma prioridade.

asgeo1
fonte
1
+1 Para "negócios complicados" :) Já trabalhei no domínio bancário antes disso e achei muito mais interessante e fácil. Além disso, como você apontou, tudo é feito no Excel!
Mayank
6

Se você está desenvolvendo um negócio, terá uma ideia mais clara e detalhada das regras de negócio do que qualquer outra pessoa na empresa. Isso não é necessariamente porque você é mais esperto do que todo mundo, é porque é a única maneira de fazer o trabalho.

Sua reação pode ser "Mas o que os analistas de negócios fazem?"

Os analistas de negócios mantêm longas reuniões com os clientes, tentando obter requisitos claros o suficiente para que um desenvolvedor trabalhe. Observo a maneira como eles têm que lidar com os clientes e me sinto grato por não ter que fazer isso.

Andrew Shepherd
fonte
2
Espere, os analistas de negócios recebem requisitos claros? Essa é boa. Pessoalmente, prefiro lidar diretamente com o usuário final.
Christopher Mahan
@Christopher - Eu disse "tentar" para obter requisitos :-)
Andrew Shepherd
De fato você fez.
Christopher Mahan
1
+1 - Os analistas de negócios realizam longas reuniões com os clientes, tentando obter requisitos claros o suficiente para o desenvolvedor trabalhar.
Karthik Sreenivasan
6

Eu gosto de fazer analogias entre desenvolvimento de software e arquitetura. Ambos são artes aplicadas. Ambos exigem modelagem elaborada dentro da mente. O aspecto que se aplica a essa pergunta é que escrever software sem conhecimento de negócios é como projetar um prédio sem entender o estilo de vida e as necessidades dos habitantes. Eu acho que muitos de nós já vimos (ou mesmo moramos / trabalhamos) em edifícios que podem parecer bonitos e modernos e outros enfeites do lado de fora, apenas não são utilizáveis por dentro. (Na pior das hipóteses, eles nem são legais: - ((())

Atualizar

Comentário de Gaurav:

O que me interessa é até que ponto um desenvolvedor deve se esforçar para entender o domínio comercial. Ele deve percorrer todo o caminho, ou há alguma linha a ser traçada.

Eu não acho que você pode desenhar uma linha em qualquer lugar em geral. A menos que haja partes do aplicativo / domínio que você não precise tocar (portanto, entenda). O que é IMHO muito raro na vida real, a longo prazo. Qualquer parte de um aplicativo que esteja em uso ativo receberá relatórios de erros e solicitações de recursos. Os domínios também mudam, à medida que a legislação, regras tributárias, políticas, hábitos correspondentes - em resumo, o mundo real - mudam. Isso também deve ser seguido no software.

Porém, mesmo sem solicitações externas de alterações, o teste de unidade e a refatoração do código legado também exigem a compreensão das áreas de domínio relevantes. Caso contrário, você apenas "congelará" o comportamento atual do aplicativo, sem saber se ele está realmente correto.

Update2

e se o [...] desenvolvedor muda frequentemente o domínio comercial em que está trabalhando?

É claro que isso significa que grande parte do investimento (do seu tempo e do dinheiro do seu empregador) para obter conhecimento de negócios é perdida :-( Se você sabe que isso vai acontecer, é claro que pode não valer a pena aprofundar muito. um domínio específico.Tenha em atenção que os domínios não são totalmente diferentes, existem fundamentos que podem ser reutilizados entre domínios diferentes e, o mais importante, a abordagem de design orientada a domínio obtida é reutilizável.

Péter Török
fonte
1
@ Peter Obrigado por atualizar a resposta. Eu tenho mais uma pergunta. Suponho que essa resposta, assim como outras, pressupõe que o desenvolvedor se aterá a um domínio comercial, e se esse não for o caso, quando o desenvolvedor alterar frequentemente o domínio comercial em que está trabalhando? Não tenho certeza sobre o resto do mundo, mas isso é muito comum na Índia. Por exemplo. No ano passado, mudei do domínio CAX para o domínio Marketing e posso mudar para outro domínio.
Gaurav
2
@ Gaaurav, isso significa que grande parte do investimento (do seu tempo e do dinheiro do seu empregador) para obter conhecimento de negócios é perdida :-( Se você sabe que isso vai acontecer, é claro que pode não valer a pena cavar . muito profundo em um domínio específico Note, porém, que os domínios não são totalmente diferentes, existem fundamentos que podem ser reutilizados entre diferentes domínios E o mais importante, o domínio driven design. abordagem você ganho é reutilizável.
Péter Török
@ Peter Obrigado novamente. Eu votaria na sua resposta, mas aparentemente você só pode votá-la uma vez (regras estúpidas). Mais uma vez, se não for um incômodo demais, você pode incorporar seu comentário na sua resposta.
Gaurav
@Gaurav, feito, eu contente poderia ajudar :-)
Péter Török
E a razão do voto negativo é ...?
Péter Török
2

Trabalho no setor bancário há mais de dez anos desenvolvendo aplicativos de negociação e concordando que é importante que os desenvolvedores entendam bem os negócios. Mas, repetidamente, durante os processos de entrevista, se a pessoa não tem um bom conhecimento do negócio, ela não entra pela porta.

Isso levou a um número substancial de aplicativos e sistemas críticos sendo desenvolvidos por essas pessoas com forte conhecimento comercial, mas habilidades técnicas de nível médio a baixo. Esses sistemas sempre acabam sendo mal projetados, que constantemente travam, repletos de bugs, não são escaláveis, quase impossíveis de corrigir sem quebrar alguma coisa, e isso é se o projeto não acabar sendo cancelado devido à habilidade técnica insuficiente para obtê-lo. em produção.

Martin Cooper
fonte