o que significa pdca?
o total quality control (tqc), traduzido como controle de qualidade total, trata-se de um sistema de gestão da qualidade que tem o objetivo de superar o conceito de qualidade aplicada ao produto. nesse sistema a qualidade é encarada como a superação das expectativas tanto do cliente quanto do conceito de qualidade.na gestão do tqc, o ciclo pdca é muito utilizado. daí, os quatro fatores/etapas de um processo administrativo, que também formam o famoso ciclo pdca, são:planejar (plan);fazer (do);checar (check);agir (act).desse modo, a ideia do ciclo pdca é entender o problema, solucioná-lo e realimentar o sistema para que o mesmo não se repita. consequentemente, obtém-se uma melhora contínua.
o administrador de empresas é responsável por administrar os recursos humanos, materiais e financeiros, além de gerir o empreendimento e executar atividades de planejamento, organização, comando, coordenação e controle, resumido pela sigla (poccc). Bem que o pessoal do duolingo poderia parcelar , ficaria mais fácil. pelo menos para mim 320 ❤❤❤❤ numa pancada só, é PHD. Daí a gente ajuda a causa mais tranquilo. <p>isso só traz aos olhos do público algo que vem acontecendo há muito tempo: tudo é vulnerável. o kit scada costumava ser mais seguro, pois geralmente não estava conectado diretamente a redes públicas e era considerado obscuro; no entanto, os alvos são interessantes e os níveis de segurança geralmente extremamente baixos, então os invasores sempre pesquisaram maneiras de explorá-los.</p><p>os conceitos gerais para prevenir ataques são os mesmos que para qualquer outra coisa</p><ul> <li>segregar redes com dispositivos de controle de acesso (roteadores, firewalls etc)</li> <li>links de comunicação segura (criptografia, autenticação e sim, <strong>mídia removível!</strong>)</li> <li>fortalecer plataformas e aplicativos</li> <li>código de revisão</li> <li>teste de penetração</li> </ul><p>em relação às suas subquestões:</p><ul> <li>se os plcs não estiverem conectados (e você pode confirmar isso), eles não podem ser atacados por meio de uma conexão. no entanto, a maioria está conectada por meio de algum tipo de link, então suponha que esse link seja o canal de ataque</li> <li>plcs são uma área específica para esta atualização do metasploit, no entanto, você geralmente deve assumir que qualquer sistema tem vulnerabilidades e planejar de acordo com seu apetite de risco.</li> </ul> <p>o apt é um sistema de gerenciamento de pacotes para o debian e outras distribuições linux baseadas nele, como o ubuntu. na maior parte, o apt é fácil de usar para instalar, remover e atualizar pacotes. em casos raros, muitas vezes, quando você está misturando dependências de terceiros, há uma chance de que <code>apt-get</code> possa acabar dando a você um erro informando que uma instalação de pacote não pôde ser concluída.</p><h2>soluções:</h2><p>é sempre uma boa idéia fazer backup dos arquivos de configuração, como <code>/etc/apt/sources.list</code>, para que você possa reverter as alterações, se necessário.</p><ul> <li> <p>se o <code>error</code> mostrar algo parecido com isto:</p> <p><code>&lt;some-package&gt;: depends: &lt;other-package&gt; (= version) but this-version is to be installed</code></p> <p>em seguida, certifique-se de que os repositórios <code>restricted</code> e <code>universe</code> estejam ativados. acertar <kbd>alt</kbd>+<kbd>f2</kbd>, digite <code>software-properties-gtk</code> e clique em <kbd>enter</kbd>.</p> <p>na guia <code>ubuntu software</code>, ative todos os repositórios.</p> <p><img src="https://i.stack.imgur.com/cgmrz.png" alt=""></p> </li> <li> <p>uma possível causa de dependências não atendidas pode estar corrompida no banco de dados do pacote e/ou alguns pacotes não foram instalados corretamente. para corrigir esse problema, pressione <kbd>alt</kbd>+<kbd>ctrl</kbd>+<kbd>t</kbd> para abrir o terminal e tentar executar um dos seguintes comandos:</p> <pre>sudo apt-get clean</pre> <p>ou,</p> <pre>sudo apt-get autoclean</pre> <p><code>apt-get clean</code> limpa o repositório local de arquivos de pacotes recuperados (os arquivos .deb). ele remove tudo, exceto o arquivo de bloqueio de/var/cache/apt/archives/e/var/cache/apt/archives/partial /. <code>apt-get autoclean</code> limpa o repositório local de arquivos de pacotes recuperados, mas ao contrário de <code>apt-get clean</code>, ele apenas remove arquivos de pacotes que não podem mais ser baixados e são inúteis.</p> </li> <li> <p>uma das correções mais básicas para resolver problemas de dependências é executar:</p> <pre>sudo apt-get -f install</pre> <p>o <code>-f</code> aqui significa "conserto quebrado". <code>apt</code> tentará corrigir dependências quebradas. se você instalou manualmente um pacote que tinha dependências não atendidas, <code>apt-get</code> instalará essas dependências, se possível, caso contrário, pode simplesmente remover o pacote que você instalou para resolver o problema.</p> <p>então corra:</p> <pre>sudo dpkg --configurar -a</pre> <p>em seguida, execute isso novamente:</p> <pre>sudo apt-get -f install</pre> <p>se a saída é:</p> <p><code>0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.</code></p> <p>isso significa que falhou.</p> </li> <li> <p>a próxima solução é executar:</p> <pre>sudo apt-get -u dist-upgrade</pre> <p>se mostrar algum pacote retido, é melhor eliminá-los. os pacotes são mantidos devido a conflitos de dependência que <code>apt</code> não pode resolver. tente este comando para encontrar e reparar os conflitos:</p> <pre>sudo apt-get -o depurar :: pkgproblemresolver = sim dist-upgrade</pre> <p>se não puder corrigir os conflitos, sairá com:</p> <p><code>0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.</code></p> <p>exclua os pacotes retidos um por um, executando <code>dist-upgrade</code> a cada vez, até que não haja mais pacotes retidos. em seguida, reinstale os pacotes necessários. certifique-se de usar a opção <code>--dry-run</code>, para que você esteja totalmente informado das consequências:</p> <pre>sudo apt-get remove --dry-run nome-do-pacote</pre> <p>como remover o pacote que você está tentando instalar pode não ser o ideal, você também pode tentar encontrar um repositório que tenha os pacotes necessários para satisfazer as dependências.</p> </li> </ul><p>finalmente, se tudo mais falhar, você pode tentar satisfazer as dependências, encontrando e instalando os pacotes necessários, ou instalando-os a partir da fonte e, em seguida, criando pacotes “ <a href="http://www.webupd8.org/2010/01/how-to-create-deb-package-ubuntu-debian.html">deb</a> ” para eles.</p><h2>desativar/remover/eliminar os ppas:</h2><p>ppas (personal package archive) são repositórios hospedados em <a href="https://launchpad.net/">launchpad</a> . você pode usar ppas para instalar ou atualizar pacotes que não estão disponíveis nos repositórios oficiais do ubuntu.</p><p>uma das causas mais comuns de dependências não atendidas são os ppas, especialmente quando usados ​​para atualizar o pacote existente nos repositórios do ubuntu. para resolver o problema, você tem três opções: desativar, limpar (reverter para o pacote original nos repositórios do ubuntu) ou remover o ppa.</p><ul> <li> <p><strong> desativar: </strong></p> <p>desativar um ppa significa que não há mais atualizações para os pacotes instalados a partir desse ppa. para desativar um ppa: abra <code>software center &gt; edit &gt; software sources</code> ou</p> <p>acertar <kbd>alt</kbd>+<kbd>f2</kbd> e execute <code>software-properties-gtk</code>.</p> <p>clique na guia <code>other software</code>, você verá que cada ppa tem duas linhas aqui, uma para os pacotes compilados e outra para a fonte, <code>uncheck</code> ambas as linhas para desabilitar um ppa. aqui você também pode adicionar e remover ppas.</p> <p><img src="https://i.stack.imgur.com/uwtsm.png" alt=""></p> </li> <li> <p><strong> purge: </strong></p> <p>purgar um ppa significa fazer um downgrade dos pacotes no ppa selecionado para a versão nos repositórios oficiais do ubuntu e desabilitar esse ppa. <a href="https://launchpad.net/ppa-purge">ppa purge</a> faz exatamente isso. para instalar o ppa purge, execute o seguinte comando:</p> <pre>sudo apt-get instala ppa-purga</pre></li> </ul><p>mas, considerando que a questão <code>apt</code> está quebrada, o comando acima falhará. então use este comando</p><pre><code>mkdir ppa-purge &amp;&amp; cd ppa-purge &amp;&amp; wget http://mirror.pnl.gov/ubuntu/pool/universe/p/ppa-purge/ppa-purge\_0.2.8+bzr56\_all.deb &amp;&amp; wget http://mirror.pnl.gov/ubuntu//pool/main/a/aptitude/aptitude\_0.6.6-1ubuntu1\_i386.deb &amp;&amp; sudo dpkg -i ./*.deb </code></pre><p>para usar o ppa purge:</p><pre>sudo ppa-purge ppa: someppa/ppa</pre><p>se o comando 'ppa-purge' falhar por algum motivo, não será possível executar o 'ppa-purge' novamente, a menos que você reative o ppa (para ativar o ppa, siga as mesmas etapas que desabilitar um ppa e <code>check</code> as duas linhas de um ppa particular para habilitá-lo).</p><p>nota: <code>ppa purge</code> não remove ppas ( <a href="https://bugs.launchpad.net/ppa-purge/+bug/945473">pode ser no futuro</a> ), então você terá que remover manualmente o ppa.</p><ul> <li> <p><strong> remover: </strong></p> <p>se o pacote instalado a partir de um ppa não existir nos repositórios oficiais do ubuntu, então usar <code>ppa purge</code> não é recomendado, porque não há nada para ser rebaixado e <code>ppa purge</code> também não o deletaria. para remover um ppa e pacotes instalados, execute os seguintes comandos: (ignore o primeiro comando se não quiser remover os pacotes instalados)</p> <pre> sudo apt-get autoremove --purge nome-do-pacote sudo add-apt-repositório --remove ppa: someppa/ppa sudo apt-get autoclean </pre></li> </ul><p>alternativamente, você pode usar <code>y ppa manager</code> para desabilitar/remover/limpar os ppa's (detalhes no final da resposta).</p><h2>medidas preventivas:</h2><p>então, como podemos evitar que isso aconteça em primeiro lugar?</p><ul> <li> <p>mantenha o ubuntu atualizado. o ubuntu notifica automaticamente quando as atualizações estão disponíveis, você também pode verificar as atualizações disponíveis clicando em <code>session indicator</code> no painel do unity:</p> <p><img src="https://i.stack.imgur.com/jq621.png" alt=""></p> <p>ou, clique em <kbd>alt</kbd>+<kbd>ctrl</kbd>+<kbd>t</kbd> para abrir o terminal e executar os seguintes comandos:</p> <pre>sudo apt-get update sudo apt-get atualizar</pre> <p><em> update: sincroniza sua lista de pacotes disponíveis com os servidores nos repositórios de origem. upgrade: faz o download e instala qualquer versão mais recente dos pacotes instalados. </em></p> </li> <li>se você decidir adicionar outros repositórios ao sources.list, certifique-se de que o repositório funcione (e saiba que funciona) com o ubuntu. repositórios que não são projetados para funcionar com sua versão do ubuntu podem introduzir inconsistências em seu sistema e podem forçá-lo a reinstalar. além disso, certifique-se de que você realmente precisa adicionar repositórios externos, pois os pacotes de software que você está procurando já podem ter sido introduzidos nos repositórios oficiais! <a href="https://help.ubuntu.com/community/repositories/commandline">fonte</a> </li> <li> <p>remova os ppas duplicados. <code>y ppa manager</code> (guia de instalação no final da resposta) pode facilmente digitalizar e remover ppas duplicados.</p> <ul> <li>acertar <kbd>alt</kbd>+<kbd>f2</kbd> e execute <code>y-ppa-manager</code> para abrir o y ppa manager.</li> <li>uma vez aberto, clique duas vezes ou pressione <kbd>enter</kbd> em <code>advanced</code>.</li> <li>na janela resultante, selecione <code>scan and remove duplicate ppas</code> e clique em ok.</li> </ul> </li> </ul><p> <a href="https://i.stack.imgur.com/36de8.png"><img src="https://i.stack.imgur.com/36de8.png" alt="enter image description here"></a> </p><h2>conseguindo ajuda:</h2><p>ao pedir ajuda no <a href="https://askubuntu.com/">askubunt</a> ou em qualquer outro fórum de ajuda, você deve incluir a saída dos seguintes comandos em sua pergunta:</p><ul> <li> <p>saída do erro real:</p> <pre>sudo apt-get install nome-do-pacote</pre></li> <li> <p>isso mostrará sua sources.list:</p> <pre>cat /etc/apt/sources.list</pre></li> <li> <p>isto mostrará a lista de ppas (se houver):</p> <pre>cat /etc/apt/sources.list.d/*</pre></li> </ul><h2>fontes adicionais:</h2><ul> <li> <a href="http://manpages.ubuntu.com/manpages/precise/en/man8/apt.8.html">'apt' ubuntu manpage</a> </li> <li> <a href="http://manpages.ubuntu.com/manpages/precise/en/man8/apt-get.8.html">'apt-get' ubuntu manpage</a> </li> <li> <a href="https://help.ubuntu.com/community/aptget/howto">'apt-get/how-to' documentação do ubuntu da comunidade</a> </li> <li> <a href="https://help.ubuntu.com/community/repositories/ubuntu">'repositórios/ubuntu' community ubuntu documentation</a> </li> <li> <a href="https://help.ubuntu.com/community/repositories/commandline">'repositories/commandline' community ubuntu documentation</a> </li> </ul><hr><p><strong> <a href="https://launchpad.net/y-ppa-manager">y ppa manager</a> : </strong> o y ppa manager é um balcão único para todas as suas necessidades de ppa.</p><p> <a href="https://i.stack.imgur.com/c3nut.png"><img src="https://i.stack.imgur.com/c3nut.png" alt="y ppa manager"></a> </p><p>aqui estão alguns de seus recursos:</p><ul> <li>pacotes de pesquisa em todos os ppas do launchpad</li> <li>listar e baixar pacotes em um ppa</li> <li>adicionar/remover/limpar um ppa</li> <li>fazer backup e restaurar origens ppa</li> <li>remova fontes duplicadas do ppa</li> </ul><p>para instalar <code>y ppa manager</code>, abra o terminal pressionando <kbd>alt</kbd>+<kbd>ctrl</kbd>+<kbd>t</kbd> e execute os seguintes comandos:</p><pre> sudo add-apt-repositório ppa: webupd8team/y-ppa-gerente sudo apt-get update sudo apt-get instala y-ppa-manager </pre><p>considerando a questão, <code>apt</code> está quebrado, então use estes comandos</p><pre><code>sudo su </code></pre><p>e</p><p>32 bits:</p><pre><code>mkdir y-ppa-manager &amp;&amp; cd y-ppa-manager &amp;&amp; wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys\_0.3.2-1~webupd8~oneiric\_all.deb &amp;&amp; wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager\_0.0.8.6-1~webupd8~precise\_all.deb &amp;&amp; wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad\_0.17.1.1-1~webupd8~precise\_i386.deb &amp;&amp; dpkg -i ./*.deb </code></pre><p>64 bits:</p><pre><code>mkdir y-ppa-manager &amp;&amp; cd y-ppa-manager &amp;&amp; wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/launchpad-getkeys\_0.3.2-1~webupd8~oneiric\_all.deb &amp;&amp; wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/y-ppa-manager\_0.0.8.6-1~webupd8~precise\_all.deb &amp;&amp; wget https://launchpad.net/~webupd8team/+archive/y-ppa-manager/+files/yad\_0.17.1.1-1~webupd8~precise\_amd64.deb &amp;&amp; dpkg -i ./*.deb </code></pre> quer dizer coisa nenhuma, negação, nem...

p.ex.: eu falo pra você, libera o seu email ai pra eu te manda alguns galanteios, e você responde, néca de pitibiriba.

notou como fomos modernos? galanteios, néca de pitibiriba... vai que cola né pâncreas! responsável por controlar o nivel de açucar no sangue, achou que ia cair? <h1>prefácio</h1><p>esta é realmente uma tarefa assustadora, e há muito o que abordar. portanto, estou humildemente sugerindo isso como um guia abrangente para sua equipe, com dicas para ferramentas e material educacional apropriados.</p><p><em> <strong> lembre-se: </strong> estas são <strong> diretrizes </strong> e que, como tal, devem ser adotados, adaptados ou descartados com base nas circunstâncias. </em></p><p><em> <strong> cuidado: </strong> despejar tudo isso em uma equipe ao mesmo tempo provavelmente falhará. você deve tentar escolher elementos que dariam o melhor retorno possível e apresentá-los lentamente, um de cada vez. </em></p><p><em> <strong> nota: </strong> nem tudo isso se aplica diretamente a sistemas de programação visual como o g2. para obter detalhes mais específicos sobre como lidar com eles, consulte a seção <strong> adendo </strong> no final. </em></p><hr><h1>resumo executivo para o impaciente</h1><ul> <li>defina uma estrutura rígida do projeto <strong> </strong>, com: <ul> <li><strong> modelos de projeto </strong>,</li> <li><strong> convenções de codificação </strong>,</li> <li>sistemas familiares <strong> de construção </strong>,</li> <li>e conjuntos de <strong> diretrizes de uso </strong> para sua infraestrutura e ferramentas.</li> </ul> </li> <li>instale um bom <strong> [~ # ~] scm [~ # ~] </strong> e verifique se eles sabem como usá-lo.</li> <li>aponte-os para bons <strong> ides </strong> para sua tecnologia e verifique se eles sabem como usá-los.</li> <li>implemente <strong> verificadores de qualidade de código </strong> e <strong> relatórios automáticos </strong> no sistema de construção.</li> <li>acople o sistema de construção a <strong> integração contínua </strong> e <strong> sistemas de inspeção contínua </strong>.</li> <li>com a ajuda do acima, identifique <strong> código de qualidade "hotspots" </strong> e <strong> refator </strong>.</li> </ul><p><em> agora, para a versão longa ... cuidado, preparem-se! </em></p><hr><h1>a rigidez é (geralmente) boa</h1><p><em> esta é uma opinião controversa, pois a rigidez é frequentemente vista como uma força trabalhando contra você. é verdade para algumas fases de alguns projetos. mas uma vez que você o vê como um suporte estrutural, uma estrutura que elimina as suposições, reduz bastante a quantidade de tempo e esforço desperdiçados. faça com que funcione para você, não contra você. </em></p><p><em> rigidez </em> = <em> processo </em>/<em> procedimento </em>.</p><p>o desenvolvimento de software precisa de bons processos e procedimentos pelas mesmas razões pelas quais as fábricas ou fábricas de produtos químicos possuem manuais, procedimentos, exercícios e diretrizes de emergência: prevenção de maus resultados, aumento da previsibilidade, maximização da produtividade ...</p><p><strong> embora a rigidez seja moderada! </strong></p><h2>rigidez da estrutura do projeto</h2><p>se cada projeto vem com sua própria estrutura, você (e os novatos) estão perdidos e precisam começar do zero toda vez que os abrir. você não quer isso em uma loja de software profissional e também não quer isso em um laboratório.</p><h2>rigidez dos sistemas de construção</h2><p>se cada projeto <strong> parecer </strong> diferente, há uma boa chance de que eles também <strong> sejam construídos de forma diferente </strong> . uma construção não deve exigir muita pesquisa ou muita adivinhação. você quer fazer a coisa canônica e não precisa se preocupar com detalhes: <code>configure; make install</code>, <code>ant</code>, <code>mvn install</code>, etc ...</p><p>a reutilização do mesmo sistema de construção e a sua evolução ao longo do tempo também garantem um nível consistente de qualidade.</p><p>você precisa de um <code>readme</code> rápido para apontar as especificidades do projeto e orientar graciosamente o usuário/desenvolvedor/pesquisador, se houver.</p><p>isso também facilita muito outras partes da sua infraestrutura de construção, a saber:</p><ul> <li> <a href="http://en.wikipedia.org/wiki/continuous\_integration">integração contínua</a> ,</li> <li> <a href="http://www.ibm.com/developerworks/java/library/j-ap08016/index.html">inspeção contínua</a> .</li> </ul><p>portanto, mantenha sua construção (como seus projetos) atualizada, mas torne-a mais rígida ao longo do tempo e mais eficiente na denúncia de violações e práticas inadequadas.</p><p>não reinvente a roda e reutilize o que você já fez.</p><p><strong> leitura recomendada: </strong></p><ul> <li><em> <a href="http://rads.stackoverflow.com/amzn/click/0321336380">integração contínua: melhorando a qualidade do software e reduzindo riscos</a> </em> (duval, matyas, glover, 2007)</li> <li><em> entrega contínua: lançamentos de sotware através da automação de compilação, teste e implantação </em> (humble, farley, 2010)</li> </ul><h2>rigidez na escolha das linguagens de programação</h2><p>você não pode esperar, especialmente em um ambiente de pesquisa, que todas as equipes (e menos ainda todos os desenvolvedores) usem a mesma pilha de linguagem e tecnologia. no entanto, você pode identificar um conjunto de ferramentas "oficialmente suportadas" e incentivar o uso delas. o resto, sem uma boa justificativa, não deve ser permitido (além da prototipagem).</p><p>mantenha sua pilha de tecnologia simples e a manutenção e a amplitude das habilidades necessárias ao mínimo: um núcleo forte.</p><h2>rigidez das convenções e diretrizes de codificação</h2><p>as convenções e diretrizes de codificação são o que permitem que você desenvolva uma identidade como equipe e um jargão compartilhado <em> </em>. você não deseja errar <em> terra incognita </em> toda vez que abrir um arquivo de origem.</p><p>regras absurdas que tornam a vida mais difícil ou proíbem ações explicitamente, na medida em que os commits são recusados ​​com base em violações simples e simples, são um fardo. contudo:</p><ul> <li> <p>um conjunto de regras básicas bem pensado elimina grande parte dos gemidos e pensamentos: <strong> ninguém </strong> deve quebrar sob nenhuma circunstância;</p> </li> <li> <p>e um conjunto de regras recomendadas fornece orientações adicionais.</p> </li> </ul><blockquote> <p><strong> abordagem pessoal: </strong> sou agressivo quando se trata de convenções de codificação, alguns até dizem <em> nazi </em>, porque eu acredito em ter uma <em> lingua franca </em>, um estilo reconhecível para minha equipe. quando o código de porcaria é verificado, ele se destaca como uma afta na face de uma estrela de hollywood: desencadeia uma revisão e uma ação automaticamente. de fato, às vezes fui longe em defender o uso de ganchos pré-confirmação para rejeitar confirmações não conformes. como mencionado, não deve ser muito louco e atrapalhar a produtividade: deve impulsioná-lo. apresente-os lentamente, especialmente no começo. mas é preferível gastar tanto tempo corrigindo códigos defeituosos que você não pode trabalhar em problemas reais.</p> </blockquote><p>alguns idiomas ainda impõem isso por design:</p><ul> <li>o java foi criado para reduzir a quantidade de porcaria que você pode escrever com ele (embora sem dúvida muitos consigam fazê-lo).</li> <li> <p>a estrutura de blocos do python por indentação é outra idéia nesse sentido.</p> </li> <li> <p>vá, com sua ferramenta <code>gofmt</code>, que tira completamente qualquer debate e esforço (<strong> e ego !! </strong>) inerentes ao estilo: run <code>gofmt</code> antes de você confirmar.</p> </li> </ul><p>certifique-se de que <strong> a podridão do código </strong> não pode passar despercebida. <strong> convenções de código </strong>, <strong> integração contínua </strong> e <strong> inspeção contínua </strong>, <strong> programação de pares </strong> e <strong> análises de código </strong> é o seu arsenal contra esse demônio.</p><p>além disso, como você verá abaixo, o código <strong> é a documentação </strong>, e essa é outra área em que as convenções incentivam a legibilidade e a clareza.</p><h2>rigidez da documentação</h2><p>a documentação anda de mãos dadas com o código. o próprio código é documentação. mas deve haver instruções claras sobre como construir, usar e manter as coisas.</p><p>usar um único ponto de controle para documentação (como um wikiwiki ou dms) é uma coisa boa. crie espaços para projetos, espaços para brincadeiras e experiências mais aleatórias. todos os espaços reutilizam regras e convenções comuns. tente fazer parte do espírito de equipe.</p><p><em> a maioria dos conselhos aplicáveis ​​ao código e às ferramentas também se aplica à documentação. </em></p><h3>rigidez nos comentários do código</h3><p>comentários de código, como mencionado acima, também são documentação. os desenvolvedores gostam de expressar seus sentimentos sobre o código (principalmente orgulho e frustração, se você me perguntar). portanto, não é incomum que eles os expressem em termos inequívocos nos comentários (ou mesmo no código), quando um pedaço de texto mais formal poderia ter transmitido o mesmo significado com menos palavrões ou drama. não há problema em deixar passar alguns por motivos divertidos e históricos: também faz parte do <strong> desenvolvimento de uma cultura de equipe </strong>. mas é muito importante que todos saibam o que é aceitável e o que não é, e esse ruído de comentário é apenas isso: <strong> ruído </strong>.</p><h3>rigidez nos logs de consolidação</h3><p>os registros de confirmação não são uma "etapa" irritante e inútil do ciclo de vida do seu scm: você não o pula para chegar em casa a tempo ou prosseguir com a próxima tarefa, ou para conversar com os amigos que foram almoçar. eles são importantes e, como (a maioria) bom vinho, quanto mais o tempo passa, mais valiosos eles se tornam. então faça-os direito. fico espantado quando vejo colegas de trabalho escrevendo frases de efeito para commits gigantes ou para hacks não óbvios.</p><p>as confirmações são feitas por um motivo, e esse motivo nem sempre é expresso claramente pelo seu código e pela única linha do log de confirmação que você inseriu. há mais do que isso.</p><p><strong> cada linha de código tem uma história <em> </em> e uma história <em> </em> </strong> os diffs podem contar sua história, mas você deve escrever sua história.</p><blockquote> <p>por que atualizei esta linha? -&gt; porque a interface mudou.</p> <p>por que a interface mudou? -&gt; como a biblioteca l1 que o definiu foi atualizada.</p> <p>por que a biblioteca foi atualizada? -&gt; como a biblioteca l2, necessária para o recurso f, dependia da biblioteca l1.</p> <p>e qual é o recurso x? -&gt; ver tarefa 3456 no rastreador de problemas.</p> </blockquote><p>não é minha escolha de scm e também pode não ser a melhor para o seu laboratório; mas <code>git</code> acerta isso e tenta forçá-lo a escrever bons logs mais do que a maioria dos outros sistemas scms, usando <code>short logs</code> e <code>long logs</code>. vincule o id da tarefa (sim, você precisa de um) e deixe um resumo genérico para o <code>shortlog</code> e expanda no log longo: escreva a história do changeset <strong> </strong>.</p><p><strong> é um log: </strong> está aqui para acompanhar e registrar as atualizações.</p><blockquote> <p><strong> regra geral: </strong> se você procurou algo sobre essa alteração posteriormente, é provável que seu registro responda à sua pergunta?</p> </blockquote><h3>projetos, documentação e código estão vivos</h3><p>mantenha-os sincronizados, caso contrário eles não formarão mais essa entidade simbiótica. faz maravilhas quando você tem:</p><ul> <li>clear confirma registros no seu scm, com links para ids de tarefas no rastreador de problemas,</li> <li>onde os tickets desse rastreador estão vinculados aos conjuntos de alterações no seu scm (e possivelmente às compilações no seu sistema de ic),</li> <li>e um sistema de documentação vinculado a todos eles.</li> </ul><p><strong> o código e a documentação precisam ser coesos </strong>.</p><h2>rigidez nos testes</h2><blockquote> <p><strong> regras de ouro: </strong></p> <ul> <li>qualquer novo código deve vir com (pelo menos) testes de unidade.</li> <li>qualquer código legado refatorado deve vir com testes de unidade.</li> </ul> </blockquote><p>obviamente, eles precisam:</p><ul> <li>para testar algo valioso (ou é um desperdício de tempo e energia),</li> <li>para ser bem escrito e comentado (como qualquer outro código que você faz check-in).</li> </ul><p>eles também são documentação e ajudam a delinear o contrato do seu código. especialmente se você usar <a href="http://en.wikipedia.org/wiki/test-driven\_development"> tdd </a> . mesmo se não, você precisa deles para sua paz de espírito. eles são sua rede de segurança quando você incorpora um novo código (manutenção ou recurso) e sua torre de vigia para se proteger contra a podridão do código e falhas ambientais.</p><p>obviamente, você deve ir além e ter <a href="http://en.wikipedia.org/wiki/integration\_testing">testes de integração</a> e <a href="http://en.wikipedia.org/wiki/regression\_testing">testes de regressão</a> para cada bug reproduzível corrigido.</p><h2>rigidez no uso das ferramentas</h2><p>não há problema em um desenvolvedor/cientista ocasional querer experimentar algum novo verificador estático na fonte, gerar um gráfico ou modelo usando outro ou implementar um novo módulo usando uma dsl. mas é melhor se houver um conjunto canônico de ferramentas que <strong> todos os membros da equipe </strong> devem conhecer e usar.</p><p>além disso, permita que os membros usem o que querem, desde que sejam todos:</p><ul> <li><strong> produtivo </strong>,</li> <li><strong> não requer assistência regularmente </strong></li> <li><strong> não se ajusta regularmente à sua infraestrutura geral </strong>,</li> <li><strong> não interrompe sua infraestrutura </strong> (modificando áreas comuns como código, sistema de compilação, documentação ...),</li> <li><strong> não afeta o trabalho de outras pessoas </strong>,</li> <li><strong> capaz de executar oportuna qualquer tarefa solicitada </strong>.</li> </ul><p>se não for esse o caso, imponha que eles retornem aos padrões.</p><hr><h2>rigidez vs versatilidade, adaptabilidade, prototipagem e emergências</h2><p>flexibilidade pode ser boa. permitir que alguém ocasionalmente use um hack, uma abordagem rápida e suja ou uma ferramenta favorita para <strong> fazer o trabalho </strong> é bom. <strong> [~ # ~] nunca [~ # ~] </strong> deixe que se torne um hábito e <strong> [~ # ~] nunca [~ # ~] </strong> deixe esse código se tornar a base de código real para suportar.</p><hr><h1>questões de espírito de equipe</h1><h3>desenvolva um senso de orgulho em sua base de código</h3><ul> <li>desenvolva um senso de orgulho no código <ul> <li>use wallboards <ul> <li>quadro de líderes para um jogo de integração contínua</li> <li>wallboards para gerenciamento de problemas e contagem de defeitos</li> </ul> </li> <li>use um <a href="http://en.wikipedia.org/wiki/issue\_tracking\_system">rastreador de problemas</a> / <a href="http://en.wikipedia.org/wiki/bug\_tracking\_system">rastreador de erros</a> </li> </ul> </li> </ul><h3>evite jogos de culpa</h3><ul> <li>não use jogos de integração contínua/inspeção contínua: promove boas maneiras e <a href="http://www.codinghorror.com/blog/2009/05/how-to-motivate-programmers.html">competição produtiva</a> .</li> <li>não acompanhe os defeitos: é apenas uma boa manutenção da casa.</li> <li>do <strong> identificando causas-raiz </strong>: são apenas processos à prova de futuro.</li> <li>mas não <a href="https://softwareengineering.stackexchange.com/questions/83038/who-is-responsible-for-defects-found-during-development">atribuir culpa</a> : é contraproducente.</li> </ul><h3>é sobre o código, não sobre os desenvolvedores</h3><p>torne os desenvolvedores conscientes da qualidade de seu código, mas faça com que eles vejam o código como uma entidade independente e não como uma extensão de si mesmos, que não pode ser criticada.</p><p>é um paradoxo: você precisa incentivar <a href="http://www.codinghorror.com/blog/2006/05/egoless-programming-you-are-not-your-job.html">programação sem ego</a> para um ambiente de trabalho saudável, mas confiar no ego para fins motivacionais.</p><hr><h1>de cientista a programador</h1><p>pessoas que não valorizam e se orgulham do código não produzem um bom código. para que essa propriedade surja, eles precisam descobrir o quão valioso e divertido pode ser. simples profissionalismo e desejo de fazer o bem não são suficientes: é preciso paixão. então você precisa transformar seus cientistas em <strong> programadores </strong> (no sentido amplo).</p><p>alguém argumentou nos comentários que, após 10 a 20 anos em um projeto e seu código, qualquer um se sentiria apegado. talvez eu esteja errado, mas suponho que tenham orgulho dos resultados do código e do trabalho e seu legado, não do código em si ou do ato de escrevê-lo.</p><p>por experiência, a maioria dos pesquisadores considera a codificação uma necessidade ou, na melhor das hipóteses, uma distração divertida. eles só querem que funcione. aqueles que já são bastante versados ​​e têm interesse em programação são muito mais fáceis de persuadir a adotar as melhores práticas e a alternar tecnologias. você precisa levá-los até a metade do caminho.</p><hr><h1>manutenção de código faz parte do trabalho de pesquisa</h1><p>ninguém lê documentos de pesquisa ruins. é por isso que eles são revisados ​​por pares, revisados, refinados, reescritos e aprovados uma e outra vez até que estejam prontos para publicação. o mesmo se aplica a uma tese <strong> e a uma base de código! </strong></p><p>deixe claro que a constante refatoração e atualização de uma base de código evita a podridão do código e reduz a dívida técnica, além de facilitar a reutilização e adaptação futuras do trabalho para outros projetos.</p><hr><h1>por que tudo isso??!</h1><p>por que nos preocupamos com tudo isso? para <strong> qualidade do código </strong>. ou é <strong> código de qualidade </strong> ...?</p><p>essas diretrizes visam direcionar sua equipe para esse objetivo. alguns aspectos fazem isso simplesmente mostrando-lhes o caminho e deixando-os fazer (o que é muito melhor) e outros os pegam pela mão (mas é assim que você educa as pessoas e desenvolve hábitos).</p><p>como você sabe quando a meta está ao seu alcance?</p><h2>qualidade é mensurável</h2><p>nem sempre é quantitativamente, mas <strong> é mensurável </strong>. como mencionado, você precisa desenvolver um senso de orgulho em sua equipe, e mostrar progresso e bons resultados é essencial. avalie a qualidade do código regularmente e mostre o progresso entre os intervalos e como isso é importante. faça retrospectivas para refletir sobre o que foi feito e como isso tornou as coisas melhores ou piores.</p><p>existem ótimas ferramentas para <strong> inspeção contínua </strong>. <a href="http://www.sonarsource.org/">sonar</a> sendo popular no mundo java, mas pode se adaptar a qualquer tecnologia; e há muitas outras. mantenha seu código sob o microscópio e procure-os insetos e micróbios irritantes irritantes.</p><hr><h1>mas e se meu código já for uma porcaria?</h1><p>todas as opções acima são divertidas e fofas como uma viagem a never land, mas não é tão fácil de fazer quando você já tem um monte de porcaria (fumegante e fedorento) e uma equipe relutante em mudar.</p><p>aqui está o segredo: <strong> você precisa começar em algum lugar </strong>.</p><blockquote> <p><strong> anedota pessoal: </strong> em um projeto, trabalhamos com uma base de código que pesava originalmente 650.000+ java loc, mais de 200.000 linhas de jsps, mais de 40.000 javascript loc e mais de 400 mbs de dependências binárias.</p> <p>após cerca de 18 meses, são 500.000 java loc <strong> (mais limpo) </strong>, 150.000 linhas de jsps e 38.000 javascript loc , com dependências de até 100 mb (e elas não estão mais no nosso scm!).</p> <p><strong> como fizemos? </strong> <em> acabamos de fazer todas as opções acima. ou tentou arduamente. </em></p> <p>é um esforço de equipe, mas lentamente <strong> injetamos </strong> em nossos regulamentos e ferramentas de processo para monitorar a freqüência cardíaca de nosso produto, enquanto apressadamente <strong> cortando </strong> a "gordura": código de porcaria, dependências inúteis ... não paramos todo o desenvolvimento para fazer isso: temos períodos ocasionais de relativa paz e sossego, onde são livres para enlouquecer na base de código e desmembrá-la, mas na maioria das vezes fazemos tudo por padrão para um modo de "revisão e refatoração" a cada chance que temos: durante construções, durante o almoço, durante corridas de erros, durante sexta-feira tardes ...</p> <p>houve alguns "trabalhos" grandes ... mudar nosso sistema de compilação de uma compilação ant gigante de 8500+ xml loc para uma compilação maven com vários módulos foi um deles. tivemos então:</p> <ul> <li>módulos claros (ou pelo menos já era muito melhor e ainda temos grandes planos para o futuro),</li> <li>gerenciamento automático de dependências (para manutenção e atualizações fáceis e remoção de depósitos inúteis),</li> <li>construções mais rápidas, fáceis e reproduzíveis,</li> <li>relatórios diários de qualidade.</li> </ul> <p>outra foi a injeção de "cintos de ferramentas utilitárias", embora tentássemos reduzir as dependências: o google guava e o apache commons diminuem o seu código e reduzem a superfície para erros no <strong> seu </strong> código muito.</p> <p>também convencemos nosso departamento de ti de que talvez o uso de nossas novas ferramentas (jira, fisheye, crisol, confluence, jenkins) fosse melhor do que as existentes. ainda precisamos lidar com alguns que desprezamos (qc, sharepoint e supportworks ...), mas foi uma experiência geral aprimorada, com um pouco mais de espaço.</p> <p>e todos os dias, agora há uma quantidade entre uma e dezenas de confirmações que lidam apenas com a correção e refatoração de coisas. ocasionalmente, quebramos coisas (você precisa de testes de unidade e é melhor escrevê-las <strong> antes de </strong> refatorar as coisas), mas no geral o benefício para o nosso moral e para o produto tem sido enorme. chegamos lá uma fração de uma porcentagem de qualidade de código por vez. <strong> e é divertido vê-lo aumentar !!! </strong></p> </blockquote><p><em> <strong> nota: </strong> novamente, a rigidez precisa ser abalada para abrir espaço para coisas novas e melhores. na minha anedota, nosso departamento de ti está parcialmente certo ao tentar impor <strong> algumas </strong> coisas sobre nós e errado para outras. ou talvez eles <strong> estivessem certos </strong>. as coisas mudam. prove que são as melhores maneiras de aumentar sua produtividade. <strong> execuções de avaliação e protótipos </strong> estão aqui para isso. </em></p><hr><h1>o ciclo de refatoração de código de espaguete incremental super secreto para uma qualidade incrível</h1><pre><code> ++ ++ | a n a l y z e +&gt;| i d e n t i f y | ++ +++ ^ | | v +++ ++ | c l e a n +&lt;| f i x | ++ ++ </code></pre><p>depois de ter algumas ferramentas de qualidade no seu cinto de ferramentas:</p><ol> <li> <p><strong> analise </strong> seu código com verificadores de qualidade de código.</p> <p>linters, analisadores estáticos ou o que você tem.</p> </li> <li> <p><strong> identifique </strong> seus <strong> pontos críticos </strong> hotspots and <strong> frutas penduradas baixas </strong>.</p> <p>as violações têm níveis de severidade, e grandes classes com um grande número de severidades são uma grande bandeira vermelha: assim, elas aparecem como "pontos de acesso" nos tipos de visualizações do radiador/mapa de calor.</p> </li> <li> <p><strong> corrija </strong> os pontos de acesso primeiro.</p> <p>maximiza seu impacto em um curto espaço de tempo, pois eles têm o maior valor comercial. idealmente, as violações críticas devem ser tratadas assim que aparecerem, pois são possíveis vulnerabilidades de segurança ou causas de travamento e apresentam um alto risco de induzir uma responsabilidade (e, no seu caso, mau desempenho para o laboratório).</p> </li> <li> <p><strong> limpe </strong> as violações de baixo nível com <strong> varreduras automatizadas de base de código </strong>.</p> <p>ele melhora a <strong> relação sinal-ruído </strong> para que você possa ver violações significativas no seu radar à medida que aparecem. geralmente, há um grande exército de pequenas violações no início, se elas nunca foram resolvidas e sua base de código foi deixada solta na natureza. eles não apresentam um "risco" real, mas prejudicam a legibilidade e a manutenção do código. corrija-os conforme você os encontra durante o trabalho em uma tarefa ou em grandes tarefas de limpeza com varreduras de código automatizadas, se possível. tenha cuidado com grandes varreduras automáticas, se você não tiver um bom conjunto de testes e sistema de integração. certifique-se de concordar com os colegas de trabalho o momento certo para executá-los para minimizar o aborrecimento.</p> </li> <li> <p><strong> repita </strong> até ficar satisfeito.</p> <p>o que, idealmente, você nunca deveria ser, se este ainda for um produto ativo: continuará evoluindo.</p> </li> </ol><h3>dicas rápidas para uma boa manutenção da casa</h3><ul> <li> <p><strong> quando no modo de hotfix </strong>, com base em uma solicitação de suporte ao cliente:</p> <ul> <li>geralmente, é uma prática recomendada <strong> [~ # ~] não [~ # ~] </strong> resolver outros problemas, pois você pode apresentar novos sem querer.</li> <li>vá até lá <strong> no estilo seal: entre, mate o bug, saia </strong> e envie seu patch. é uma greve cirúrgica e tática.</li> </ul> </li> <li> <p><strong> mas, para todos os outros casos </strong>, se você abrir um arquivo, tenha o dever de:</p> <ul> <li><em> definitivamente: </em> <strong> analise </strong> (faça anotações, envie relatórios de problemas),</li> <li><em> talvez: </em> <strong> limpe </strong> (limpeza de estilo e pequenas violações),</li> <li><em> idealmente: </em> <strong> refatorar </strong> (reorganizar grandes seções e seus vizinhos).</li> </ul> </li> </ul><p>apenas não se desvie para passar uma semana de um arquivo para outro e acabar com um maciço conjunto de milhares de correções, abrangendo vários recursos e módulos - isso dificulta o rastreamento futuro. um problema no código = um ticket no seu rastreador. às vezes, um conjunto de alterações pode afetar vários tickets; mas se isso acontecer com muita frequência, provavelmente você está fazendo algo errado.</p><hr><h1>adendo: gerenciando ambientes de programação visual</h1><h2>os jardins murados dos sistemas de programação sob medida</h2><p>vários sistemas de programação, como o g2 do op, são bestas diferentes ...</p><ul> <li> <p><strong> "código" sem fonte </strong></p> <p>freqüentemente, eles não dão acesso a uma representação textual do seu "código" fonte: ele pode ser armazenado em um formato binário proprietário ou talvez ele armazene coisas no formato de texto, mas as oculta. sistemas de programação gráfica sob medida não são incomuns em laboratórios de pesquisa, pois simplificam a automação de fluxos de trabalho repetitivos de processamento de dados.</p> </li> <li> <p><strong> sem ferramentas </strong></p> <p>além de seus próprios, é isso. você geralmente é limitado pelo ambiente de programação, pelo depurador, pelo intérprete, pelas ferramentas e formatos de documentação. eles são <strong> jardins murados </strong>, exceto se eventualmente capturarem o interesse de alguém motivado o suficiente para fazer engenharia reversa de seus formatos e criar ferramentas externas - se a licença permitir.</p> </li> <li> <p><strong> falta de documentação </strong></p> <p>muitas vezes, esses são sistemas de programação de nicho, usados ​​em ambientes bastante fechados. as pessoas que os usam frequentemente assinam ndas e nunca falam sobre o que fazem. as comunidades de programação para eles são raras. portanto, os recursos são escassos. você está preso à sua referência oficial, e é isso.</p> </li> </ul><p>a parte irônica (e muitas vezes frustrante) é que todas as coisas que esses sistemas fazem poderiam obviamente ser alcançadas usando linguagens de programação de uso geral e geral, e provavelmente muito mais eficientemente. mas isso requer um conhecimento mais profundo da programação, enquanto você não pode esperar que seu biólogo, químico ou físico (para citar alguns) saiba o suficiente sobre programação e muito menos tenha tempo (e desejo) para implementar (e manter) sistemas complexos, que podem ou não durar muito. pela mesma razão que usamos dsls, temos esses sistemas de programação sob medida.</p><blockquote> <p><strong> anedota pessoal 2: </strong> na verdade, eu mesmo trabalhei em uma delas. eu não fiz o link com a solicitação do op, mas o meu projeto era um conjunto de grandes partes interconectadas de software de processamento e armazenamento de dados (principalmente para pesquisa em bioinformática, saúde e cosméticos, mas também para negócios inteligência ou qualquer domínio que implique no rastreamento de grandes volumes de dados de pesquisa de qualquer tipo e na preparação de fluxos de trabalho de processamento de dados e etls). um desses aplicativos era, simplesmente, um visual ide que usava os sinos e os assobios usuais: interfaces de arrastar e soltar, espaços de trabalho de projeto com versão (usando arquivos de texto e xml para armazenamento de metadados)); drivers conectáveis ​​a fontes de dados heterogêneas e uma tela visual para projetar pipelines para processar dados de fontes de dados n e, no final, gerar saídas m transformadas e possíveis visualizações brilhantes e relatórios on-line complexos (e interativos). um pouco da síndrome do nih sob o pretexto de projetar um sistema adaptado às necessidades dos usuários.</p> <p>e, como você esperaria, é um sistema agradável, bastante flexível para suas necessidades, embora às vezes um pouco exagerado, para que você se pergunte "por que não usar ferramentas de linha de comando?" e, infelizmente, sempre liderando empresas de médio porte equipes trabalhando em grandes projetos para muitas pessoas diferentes, usando-o com diferentes "melhores" práticas.</p> </blockquote><h2>ótimo, estamos condenados! - o que fazemos sobre isso?</h2><p>bem, no final, todas as opções acima ainda são válidas. se você não conseguir extrair a maior parte da programação deste sistema para usar mais ferramentas e linguagens convencionais, "apenas" precisará adaptá-lo às restrições do seu sistema.</p><h3>sobre controle de versão e armazenamento</h3><p>no final, você quase sempre pode <strong> versão </strong> coisas, mesmo com o ambiente mais restrito e murado. na maioria das vezes, esses sistemas ainda vêm com suas próprias versões (o que, infelizmente, é bastante básico, e oferece apenas reverter para versões anteriores sem muita visibilidade, mantendo apenas os instantâneos anteriores). não é exatamente o uso de conjuntos de alterações diferenciais como o seu scm de escolha, e provavelmente não é adequado para vários usuários que enviam alterações simultaneamente.</p><p>mas, ainda assim, se eles fornecem essa funcionalidade, talvez a sua solução seja seguir nossas amadas diretrizes padrão do setor acima e transpor essas para este sistema de programação !!</p><p>se o sistema de armazenamento for um banco de dados, provavelmente expõe as funcionalidades de exportação ou pode ser feito backup no nível do sistema de arquivos. se estiver usando um formato binário personalizado, talvez você possa simplesmente tentar fazer a versão com um vcs que tenha um bom suporte para dados binários. você não terá controle refinado, mas pelo menos terá as costas protegidas contra catástrofes e terá um certo grau de conformidade com a recuperação de desastres.</p><h3>sobre o teste</h3><p>implemente seus testes na própria plataforma e use ferramentas externas e tarefas em segundo plano para configurar backups regulares. provavelmente, você inicia esses testes da mesma maneira que iniciaria os programas desenvolvidos com esse sistema de programação.</p><p>claro, é um trabalho de hacker e definitivamente não está de acordo com o que é comum na programação "normal", mas a idéia é se adaptar ao sistema enquanto tenta manter uma aparência de processo profissional de desenvolvimento de software.</p><h3>a estrada é longa e íngreme ...</h3><p>como sempre em ambientes de nicho e sistemas de programação sob medida, e conforme exposto acima, você lida com formatos estranhos, apenas um conjunto limitado (ou totalmente inexistente) de ferramentas possivelmente desajeitadas e um vazio no lugar de uma comunidade.</p><p><strong> a recomendação: </strong> tente implementar as diretrizes acima fora do seu sistema de programação sob medida, o máximo possível. isso garante que você possa confiar em ferramentas "comuns", que possuem suporte adequado e motivação da comunidade.</p><p><strong> a solução alternativa: </strong> quando isso não for uma opção, tente adaptar essa estrutura global à sua "caixa". a idéia é sobrepor esse modelo de boas práticas padrão do setor sobre o sistema de programação e tirar o melhor proveito dele. o conselho ainda se aplica: defina a estrutura e as melhores práticas, incentive a conformidade.</p><p>infelizmente, isso implica que você pode precisar mergulhar e fazer uma tremenda quantidade de trabalho nas pernas. assim...</p><p><strong> últimas palavras famosas e pedidos humildes: </strong></p><ul> <li><strong> documente </strong> tudo o que você faz.</li> <li><strong> compartilhe </strong> sua experiência.</li> <li><strong> código aberto </strong> qualquer ferramenta que você escrever.</li> </ul><p>ao fazer tudo isso, você irá:</p><ul> <li>não apenas aumenta suas chances de obter apoio de pessoas em situações semelhantes,</li> <li>mas também forneça ajuda a outras pessoas e promova discussões em torno de sua pilha de tecnologia.</li> </ul><p>quem sabe, você poderia estar no início de uma nova comunidade vibrante de <em> linguagem obscura x </em>. se não houver, inicie um!</p><ul> <li>faça perguntas sobre <a href="https://stackoverflow.com/">estouro da pilha</a> ,</li> <li>talvez até escreva uma proposta para um novo site stackexchange no <a href="http://area51.stackexchange.com/">área 51</a> .</li> </ul><p><strong> talvez seja bonito por dentro </strong>, mas <strong> ninguém tem idéia </strong> até agora, tão ajuda <strong> derrube esta parede feia </strong> e <strong> deixe que outras pessoas dêem uma espiada! </strong></p> ouch, pq escondeu seu email? boa noite, 

com toda certeza absoluta, seu nome não vai para o spc - serasa, até porque a dívida não diz respeito com consumo e sim com a dívida ativa do estado. 

bom, a princípio eu lhe recomendo que pague a dívida, pois, caso você passe em algum concurso público isto é um impeditivo para que você tome posse, caso seja aprovada. 

de igual forma, o estado através de um procurador do estado pode lhe executar para que você faça o pagamento. 

se tiver o dinheiro, pague, pois nada melhor do que você ter um nome limpo, afinal, nunca se sabe quando você vai precisar dele e se terá condições de efetuar o pagamento, desta forma, isto lhe garante que cumprida a pena e paga a multa, seu nome estará completamente limpo!

abraços!