Broadcast sobre Agile Development com Steve McConnell (Imperdível!)

Right Sizing Agile Development
Broadcast date: Thursday, April 16, 2009
Time: 12 pm PT / 3 pm ET (16h00min no Brasil)
Duration: One hour



Overview
Agile development has now been in use for almost a decade. Why use Agile methods? What are the strengths of Agile? What are some common failure modes? What other lessons has the software industry learned about Agile development?


 


In this talk, Steve McConnell-author of Code Complete, Rapid Development, and other software industry classics and CEO of Construx Software-draws on Construx’s extensive consulting work to dissect Agile development. McConnell names the Agile practices that have worked well for Construx’s clients, describes the failure modes of Agile practices that have failed to live up to the hype, and explains how to right size Agile development for your organization.


 


Who Should Attend
Managers, project managers, technical leads, QA leads, software engineers, software developers, and anyone else who wants to learn about Agile software development.


 


Register Now!



Steve McConnell (Construx Software)


Steve McConnell is CEO and Chief Software Engineer at Construx Software where he writes books and articles, teaches classes, and oversees Construx’s software development practices. Steve is the author of: Software Estimation: Demystifying the Black Art (2006), Code Complete (1993, 2004), Rapid Development (1996), Software Project Survival Guide (1998), and Professional Software Development (2004). His first two books won Software Development magazine’s Jolt Excellence award for best programming books of their years.


Steve has worked in the desktop software industry since 1984 and has expertise in rapid development methodologies, project estimation, software construction practices, and third-party contract management. In 1998, readers of Software Development magazine named Steve one of the three most influential people in the software industry along with Bill Gates and Linus Torvalds. Steve was Editor in Chief of IEEE Software magazine from 1998-2002.


 Steve is on the Panel of Experts that advises the Software Engineering Body of Knowledge (SWEBOK) project and was Chair of the IEEE Computer Society’s Professional Practices Committee. Steve earned a Bachelor’s degree from Whitman College and a Master’s degree in software engineering from Seattle University.


 


Register Now!

Edward Bear e o Desenvolvimento de Softwares (Steve McConnell)

Edward Bear


”Here is Edward Bear, coming downstairs now, bump, bump, bump on the back of his head, behind Christopher Robin. It is, as far as he knows, the only way of coming downstairs, but sometimes he feels that there really is another way, if only he could stop bumping for a moment and think of it. And then he feels that perhaps there isn’t. “



Por mais de uma geração, projetos de desenvolvimento de software têm falhado sem uma boa razão. Esses projetos não alcançaram o estado da arte no desenvolvimento de software. Eles não ultrapassaram os limites de pesquisas em áreas específicas. Eles falharam simplesmente porque não podiam suportar o próprio peso.

 

Assim como o urso Edward, desenvolvedores de software, gerentes de projeto e seus clientes, batem a cabeça na escada sempre da mesma forma, projeto após projeto. O percurso que eles seguem é sempre familiar, porém ineficiente, fadado ao erro, e também doloroso.

A sobrevivência de um projeto não acontece acidentalmente. O trabalho exigido para o sucesso de um projeto não é especialmente difícil, e também não é apenas um fator que consome tempo, mas precisa ser executado de forma disciplinar desde o primeiro até o último dia do projeto.

A prática do desenvolvimento de software avançou até um ponto onde poucos projetos de médio porte estão destinados ao fracasso.

 

Quando os desenvolvedores, gerentes e clientes pararem de bater suas cabeças contra os mesmos e velhos problemas e começarem a preocupar-se em adquirir as habilidades necessárias, seus projetos terão sucesso.

Steve McConnell

Software Project Survival Guide

Microsoft Press


 

Comunicação e Colaboração

Verdadeiros programadores aprendem como trabalhar em equipe. Escrever código de forma legível é parte de ser um programador que trabalha em equipe.

O computador provavelmente lê seu programa tão frequentemente quanto outros membros da sua equipe o fazem, mas ele é muito melhor na tarefa de ler um código pobre do que as pessoas que trabalham com você.

Quando estiver codificando, como sugestão, tenha sempre em mente que outros colegas da equipe provavelmente terão que ler seu código.
Programar é, em primeiro lugar, comunicar-se com outro programador, em segundo lugar comunicar-se com o computador.

Existem vários níveis atribuídos aos programadores:

Nível 1: Principiante
Um programador Beginner é capaz de utilizar os recursos básicos de uma linguagem. Neste nível, o programador pode escrever rotinas, loops, estruturas condicionais entre outros recursos da linguagem.

Nível 2: Intermediário
Um programador de nível intermediário é capaz de utilizar os recursos básicos de várias linguagens e tem domínio para trabalhar confortavelmente com pelo menos uma linguagem.

Nível 3: Especialista
Um programador especialista domina todos os recursos de uma linguagem ou de um ambiente de desenvolvimento, ou os dois. Programadores neste nível são valiosos para suas empresas, e alguns programadores nunca vão além deste nível.

Nível 4: Guru
Um Guru, possui as características de um especialista (Nível 3) e reconhece que apenas 15% da tarefa de programar refere-se à comunicar-se com o computador e 85% refere-se a comunicar-se com pessoas. Estudos mostram que, em média, apenas 30% dos programadores desenvolvem trabalhos sozinhos. Um Guru escreve código para pessoas ao invés de escrevê-lo para máquinas. Os verdadeiros Gurus escrevem código verdadeiramente cristalinos e adequadamente documentado também. Gurus não tem interesse em desperdiçar suas células cinzas reconstruindo a lógica de uma seção de código que não foi devidamente escrito/documentado de forma correta.

Um grande programador que não se preocupa com a legibilidade do seu código, por maior que seja seu conhecimento, provavelmente nunca passará do Nível 3. Apesar que esta afirmação dificilmente é apresentada num cenário real. A principal causa de programadores escreverem código de má qualidade é que o código deles é ruim mesmo. Eles não costumam dizer “Vou escrever meu código de uma maneira difícil de entender”. Eles simplesmente não possuem conhecimento suficiente para escrever um código realmente legível, o que os coloca no Nível 1 ou Nível 2.

Exemplos de piores códigos que já tive oportunidade de examinar, incluiam variáveis com nomes como: X, XX, XXX XX1, XX2, T, Y, entre outros. Nomes de objetos como: TextBox38, DropDown22, e por aí afora.

Conclusão
Não é pecado ser um programador iniciante ou intermediário. Não é pecado ser um programador especialista ao invés de um guru. O pecado está em quanto tempo você se manterá entre os níveis de iniciante e especialista depois de saber o que tem que ser feito para melhorar seu código.

Code Complete, 2nd Edition
Steve McConnell
Microsoft Press

Criptografando dados com C# e MD5

O exemplo abaixo demonstra como criptografar dados utilizando C# e o algorítmo MD5. O Namespace System.Security.Cryptography oferece os recursos necessários para esta implementação.


 


using System.Security.Cryptography;



public static string GetMD5Hash(string input)


{


MD5 md5Hasher = MD5.Create();


byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));


StringBuilder sBuilder = new StringBuilder();


 


for (int i = 0; i < data.Length; i++)


{


   sBuilder.Append(data[i].ToString(“x2″));


}


return sBuilder.ToString();


}


 

Abrindo Formulários Dinamicamente C# (Windows Forms)


Introdução


Uma tarefa comum no desenvolvimento de soluções Windows Forms é a necessidade de instanciar formulários com base no nome da classe, ou seja, como o desenvolvedor pode abrir um formulário dinamicamente (programaticamente) passando o nome deste formulário (classe) como string. Isto é muito comum quando há necessidade de criarmos menus populados dinamicamente a partir de uma base de dados.  


Problema


Apesar de representar uma necessidade comum em aplicações Windows Forms, ainda há muitas dúvidas entre os desenvolvedores de como implementar corretamente um procedimento para instanciar um formulário dinamicamente. Faltam exemplos sobre esse tipo prática e os que estão disponíveis na Web não são facilmente encontrados e na maioria das vezes são apresentados em outro idioma.


 Solução


Uma construção simples com o método CreateInstance do objeto Activator permite implementar esta funcionalidade. Veja o código abaixo:


 public static void OpenForm(string Namespace_FormName, bool System_Modal)


{


Type t = Type.GetType(Namespace_FormName);


if (t != null)


{


   System.Windows.Forms.Form f =


   (System.Windows.Forms.Form)Activator.CreateInstance(t);


   if (System_Modal)


      f.ShowDialog();


   else


   f.Show();


}


}


Instanciando um formulário implementado em outro assembly


Com uma construção semelhante, é possível iniciar um formulário implementado eu outro assembly. Basta modificar o código acima para incluir informações sobre o assembly externo. O exemplo abaixo mostra como iniciar um formulário (MDIChild) contido em outro assembly e centralizá-lo no MDI:


 privatevoid OpenChildFormFromExternalAssembly(


string Full_Namespace_Class,


string Root_Namespace,


string Assembly_Version,


string Assembly_Culture,


string Assembly_PublicKeyToken,


bool System_Modal)


{


Type t = Type.GetType(Full_Namespace_Class + “,” + Root_Namespace


+ “, Version=” + Assembly_Version


+ “, Culture=” + Assembly_Culture


+ “, PublicKeyToken=” + Assembly_PublicKeyToken);


if (t != null)


{


   System.Windows.Forms.Form f =


   (System.Windows.Forms.Form)Activator.CreateInstance(t);


   f.MdiParent = this;


   int TopMargin = 0;


         int LeftMargin = 0;


   LeftMargin = ((this.Width – f.Width) / 2) + this.Left;


         TopMargin = ((this.Height – f.Height) / 2) + this.Top – 50;


   f.StartPosition = FormStartPosition.Manual;


         f.Top = TopMargin;


   f.Left = LeftMargin;


   if (System_Modal)


      f.ShowDialog();


   else


      f.Show();


}


}


 As linhas abaixo demonstram como invocar o procedimento acima passando os parâmetros necessários:


 OpenChildFormFromExternalAssembly(


“EIS.Presentation.frmTipoEis”, // Namespace completo


“EIS”, // Root Namespace


“1.0.0.0”, // Assembly Version (AssemblyInfo.cs)


“neutral”, // Cultura (Default=neutral)


“null”, // PublicKeyToken (Default=null)


false


);