Qual a sua opinião sobre programação mais controversa?

5/11/2011 9:04:00 AM By Felipe Pessoto

Uma pergunta feito pelo Jon Skeet, no Stack Overflow, "What's your most controversial programming opinion?".

Há algumas bem interessantes, da até pra fazer uma lista "TODO" para ser um programador melhor.

A mais votada acho que é a mais importante, e tem por consequência a maior parte das outras: "Programmers who don't code in their spare time for fun will never become as good as those that do." Se você programar apenas pra se sustentar vai estar sempre limitado ao que te mandam fazer e dificilmente vai evoluir como quem realmente gosta do que faz, isso vale em qualquer profissão. Se você gosta do que faz, inclusive o faz em seu tempo livre, vai se manter sempre atualizado e aprendendo.

Read more...

Dicas para melhorar a performance no ASP.NET MVC 3

3/5/2011 2:32:00 AM By Felipe Pessoto

Vi o sessão sobre Performance no ASP.NET MVC 3 do mvcConf. Tem algumas dicas para melhorar a performance da aplicação sem grandes alterações:

-Nas View fortemente tipadas sempre passar uma instância do objeto em vez de null. É muito comum na Action Add passar null pra View: "return View();. O problema acontece quando se usa os HtmlHelpers que aceitam Expression Tree, Html.TextBoxFor(x=> x.Name), ele vai disparar uma exception que é automáticamente capturada, mas que impacta na performance.

-Remover View Engines não utilizadas, assim evita que o ASP.NET MVC 3 procure por Views que não existes no disco.

-Usar OutputCache onde possível

-Desisintalar UrlRewriter do IIS caso não esteja usando no servidor

Iterators

1/19/2011 4:16:00 PM By Felipe Pessoto

Muito antigamente, quando se programava em C# 1.0, caso você precisasse implementar as interfaces IEnumerable ou IEnumerator era necessário fazer na mão, implementando os métodos Current, MoveNext e Dispose para o IEnumerator e GetEnumerator para o IEnumerable.
O mais complicado era o MoveNext(), pois é necessário criar uma máquina de estado para saber qual resultado deve ser atribuido ao Current.
Estas interfaces são conceitos importantes no C# e na plataforma .NET em geral, o foreach funciona baseado na classe IEnumerable, chamando seu único método GetEnumerator que por sua vez retorna um object que implementa a interface IEnumerator.

Com o C# 2.0, uma nova keyword e muito trabalho do compilador, é possível simplificar tudo isso. Usando o yield return no seu método ou no get da propriedade o compilador se encarrega de criar uma classe aninhada que implementa essas interfaces pra você, controlando todos os fluxos respeitando if´s, for´s blocos finally, etc. É um trabalho enorme por parte do compilador e claro da equipe do compilador do C# que trabalhou duro no algoritmo. Hoje essa "feature" é uma das maiores no compilador do C#.

Nada melhor do que vermos o código para entender melhor como tudo isto funciona. Vou mostrar um método que retorna IEnumerator<int> e o resultado gerado pelo compilador, usando o Reflector pra isso.

Read more...

Value Types, Stack, Heap e confusões

9/30/2010 8:49:00 PM By Felipe Pessoto

Um dos blogs que leio e com certeza é o que considero mais importante é o do Eric Lippert, inclusive traduzi uma série de artigos sobre variância e postei aqui no blog. Ele faz parte do time que desenvolve o compilador do C# e no post mais recente ele voltou a falar sobre Value Types e a confusão que normalmente ocorre, inclusive em muitos livros. Achei importe falar sobre o assunto também para o público brasileiro.

Primeiramente vamos recapitular, o que são Value Types?
...
Não, não são objetos que ficam na Stack(Pilha)! Os dois principais motivos para essa afirmação estar errada são: nem sempre os Value Types ficam na Stack; e não é essa a semântica dos Value Types.
Value Types são copiados por valor e ponto. Essa é a definição, senão ele se chamaria Stack Types certo?

Read more...