Wednesday, November 11, 2015

Pragmatic Thinking and Learning - 48 Tips


  1. Always consider the context.
  2. Use rules for novices, intuition for experts.
  3. Know what you don’t know.
  4. Learn by watching and imitating.
  5. Keep practicing in order to remain expert.
  6. Avoid formal methods if you need creativity, intuition, or inventiveness.
  7. Learn the skill of learning.
  8. Capture all ideas to get more of them.
  9. Learn by synthesis as well as by analysis.
  10. Strive for good design; it really works better.
  11. Rewire your brain with belief and constant practice.
  12. Add sensory experience to engage more of your brain.
  13. Lead with; follow with.
  14. Use metaphor as the meeting place betweenand.
  15. Cultivate humor to build stronger metaphors.
  16. Step away from the keyboard to solve hard problems.
  17. Change your viewpoint to solve the problem.
  18. Watch the outliers: “rarely” doesn’t mean “never.”
  19. Be comfortable with uncertainty.
  20. Trust ink over memory; every mental read is a write.
  21. Hedge your bets with diversity.
  22. Allow for different bugs in different people.
  23. Act like you’ve evolved: breathe, don’t hiss.
  24. Trust intuition, but verify.
  25. Create SMART objectives to reach your goals.
  26. Plan your investment in learning deliberately.
  27. Discover how you learn best.
  28. Form study groups to learn and teach.
  29. Read deliberately.
  30. Take notes with bothand.
  31. Write on: documenting is more important than documen- tation.
  32. See it. Do it. Teach it.
  33. Play more in order to learn more.
  34. Learn from similarities; unlearn from differences.
  35. Explore, invent, and apply in your environment—safely.
  36. See without judging and then act.
  37. Give yourself permission to fail; it’s the path to success.
  38. Groove your mind for success.
  39. Learn to pay attention.
  40. Make thinking time.
  41. Use a wiki to manage information and knowledge.
  42. Establish rules of engagement to manage interruptions.
  43. Send less email, and you’ll receive less email.
  44. Choose your own tempo for an email conversation.
  45. Mask interrupts to maintain focus.
  46. Use multiple monitors to avoid context switching.
  47. Optimize your personal workflow to maximize context.
  48. Grab the wheel. You can’t steer on autopilot.

Project knowledge over time


This is your brain


Tuesday, November 03, 2015

5 coisas que os Estoicos podem te ensinar sobre desenvolvimento de software

1. Vire o obstáculo de cabeça para baixo

“Escolha não ser prejudicado e você não se sentirá prejudicado. Não se sinta prejudicado e você não o será” – Marco Aurélio

Os estoicos tinham um exercício chamado “Virando o obstáculo de cabeça para baixo”, no qual eles simplesmente tentavam ver o problema de um ângulo diferente, que é benéfico para você. Por exemplo: back-end não é seu negócio, mas sua empresa precisa de alguém que desenvolva em Java. Você pode enxergar essa situação como um obstáculo ou como uma oportunidade para aprender uma coisa nova.

2. Você tem muito tempo

“Não é que nós temos pouco tempo para viver, é que nós desperdiçamos um monte dele. A vida é longa o suficiente, e uma quantidade generosa é dada a nós para atingirmos as maiores conquistas se investirmos bem. Mas quando desperdiçamos tempo em luxo desnecessário e em atividades que não são boas, nós somos forçados pela limitação da morte a entender que tudo passou antes que nós percebêssemos que estava passando. Então é isso: não temos uma vida curta, nós a tornamos curta, e nós não somos mal suportados, nós é que desperdiçamos tempo… A vida é longa se você sabe como usá-la” – Sêneca

Eu concordo que às vezes seu chefe pode criar deadlines difíceis. Mas na maior parte do tempo, os desenvolvedores de software reclamam sem entender que eles não estão usando o seu tempo bem o suficiente. Fatores externos, como deadlines, não são sua culpa. Mas ser improdutivo é totalmente culpa sua.

3. Sem falha não há crescimento

“O que aconteceu com você o impediu de: agir com justiça, generosidade, autocontrole, sanidade, prudência, honestidade, humildade, simplicidade e todas as outras qualidades que permitem a natureza de uma pessoa para se satisfazer? Então, lembre deste princípio quando algo ameaçar te causar dor: a coisa em si não é de todo ruim, passar por ela e sobreviver é a grande sorte” – Marco Aurélio

Projetos podem dar errado, seu código pode levar a uma perda enorme de dinheiro ou você pode ser demitido, mas você tem que saber que existe vida depois do fracasso. E não é só isso, mas com o pensamento certo, quando você se recuperar de cada fracasso você estará mais forte e pronto para brilhar de novo. Lembre-se de que se você não está fracassando, você não está crescendo.

4. Não apenas leia. Pratique.

“Não diga apenas que você leu livros, mostre que por meio deles você aprendeu a pensar melhor e a ser uma pessoa mais reflexiva e sensata. Livros são os halteres da mente. Eles são muito úteis, mas seria um erro supor que alguém progrediu apenas por internalizar seu conteúdo”. – Epiteto

Ler é ótimo, especialmente para aprender por meio dos erros de outras pessoas. Mas ler, apenas, sem aplicar o que você leu, é um completo desperdício de tempo. Eu tenho visto muitos desenvolvedores lendo posts em blog, livros e outros tipos de conteúdo mas não aplicando quase nada disso. O propósito da educação é internalizar conhecimento, mas definitivamente é necessário tomar alguma atitude a partir disso.

5. Aprenda a lidar com as pessoas

“Comece todos os dias dizendo para si mesmo: hoje eu devo encontrar interferência, ingratidão, insolência, deslealdade, má vontade e egoísmo – tudo isso por causa da ignorância das pessoas em saber o que é bom ou ruim” – Marco Aurélio

A parte mais difícil do desenvolvimento de software com certeza não são questões técnicas, mas como lidar com as pessoas. Os estoicos lidam com esse tipo de adversidade usando uma prática chamada de “premeditar as expectativas”: todas as manhãs você deve acordar, sentar silenciosamente e ser muito pessimista. Dessa forma você já estará mentalmente preparado para as adversidades que te acontecerem e eles não te afetarão tanto.

Em resumo, o estoicismo nos ensina a não lutar com a natureza das coisas. Ao invés de investirmos energias em coisas que não conseguimos mais mudar ou de tentarmos evitar o inevitável podemos nos concentrar em ter a mente tranquila para a transposição dos obstáculos. A natureza do mundo de desenvolvimento de produtos digitais pode ser muito severa para os olhos de uns, porém, com o treinamento mental e preparação comportamental podemos nos tornar mais fortes para as adversidades.

Fonte: http://blog.concretesolutions.com.br/2015/11/estoicos-e-software/

Friday, October 30, 2015

The infamous three circles of information architecture


How to Solve Missing Values


  1. Ignore the tuple: This is usually done when the class label is missing (assuming the mining task involves classification). This method is not very effective, unless the tuple contains several attributes with missing values. It is especially poor when the percent- age of missing values per attribute varies considerably.
  2. Fill in the missing value manually: In general, this approach is time-consuming and may not be feasible given a large data set with many missing values.
  3. Use a global constant to fill in the missing value: Replace all missing attribute values by the same constant, such as a label like “Unknown” or −∞. If missing values are replaced by, say, “Unknown,” then the mining program may mistakenly think that they form an interesting concept, since they all have a value in common—that of “Unknown.” Hence, although this method is simple, it is not foolproof.
  4. Use the attribute mean to fill in the missing value: For example, suppose that the average income of AllElectronics customers is $56,000. Use this value to replace the missing value for income.
  5. Use the attribute mean for all samples belonging to the same class as the given tuple: For example, if classifying customers according to credit risk, replace the missing value with the average income value for customers in the same credit risk category as that of the given tuple.
  6. Use the most probable value to fill in the missing value: This may be determined with regression, inference-based tools using a Bayesian formalism, or decision tree induction. For example, using the other customer attributes in your data set, you may construct a decision tree to predict the missing values for income.

Wednesday, October 28, 2015

Mean, median, and mode of symmetric versus positively and negatively skewed data


Quality decisions must be based on quality data

Data preprocessing is an important step in the knowledge discovery process, because quality decisions must be based on quality data. Detecting data anomalies, rectifying them early, and reducing the data to be analyzed can lead to huge payoffs for decision making.