15 Perguntas e Respostas sobre Ciência da Computação


Nas últimas semanas troquei algumas conversas com amigos que, coincidentemente, tiveram o mesmo tema. Paralelamente a isso, fui indicado por uns professores do IME a responder um questionário que ajudará alunos ingressantes na Universidade a escolherem o curso que possivelmente definirá todo o resto de uma vida. Esse questionário será respondido por algumas pessoas e existe um grupo que está encarregado de colher as informações e colocar no site do IME-USP. Decidi tornar a resposta do meu questionário pública, para aqueles que querem saber um pouco mais sobre o que é Ciência da Computação, tanto no nível acadêmico quanto profissional. Me coloco a disposição para responder perguntas e ouvir sugestões.

1 – O que o motivou a fazer Ciência da Computação?

Eu sempre tive interesse por Computação. Comecei cedo na área, quando ganhei meu primeiro 386 em 1992, isso sem contar o TK3000 que eu ganhei quando era criança e o MSX de um amigo, com o qual eu passava horas digitando códigos em BASIC que na época se comprava em banca de jornal. Na minha primeira tentativa de entrar na faculdade, eu prestei Engenharia Mecatrônica. Eu acho que naquela eu era muito influenciado pelo que meus pais falavam e eles comentavam muito sobre essa tal de Mecatrônica. Eu prestei sem nem saber direito o que era e tive a grande sorte de não ter entrado 🙂
No ano seguinte, fiz cursinho e estudei melhor quais eram as faculdades que existiam e o que elas ofereciam. Achei que Ciência da Computação se encaixava exatamente no que eu gostava de fazer: software.

2 – O que o levou na época a escolher o BCC da USP?

Estava dentro dos meus objetivos fazer uma faculdade pública e gratuita. Não queria mais que meus pais tivessem gastos com meus estudos e me sentia capaz de entrar numa Universidade pública boa. Prestei UNESP, UNICAMP e USP, além do Mackenzie. A única que eu não entrei, por muito pouco, foi a UNICAMP. Mas mesmo se tivesse entrado, acho que escolheria a USP, não por eu considerar a melhor (acho que UNICAMP e USP são equivalentes), mas pelo fato de eu já morar em São Paulo.

3 – Como você avaliaria sua formação no BCC?

Continue reading

Desenvolvendo a Inteligência Longe do Computador

No último domingo, no Encontro Ágil, fizemos uma sessão de Birds of a Feather e discutimos alternativas para pessoas de TI desenvolverem sua inteligência longe do computador. A discussão foi maravilhosa e gostaria de compartilhar com todos esse momento incrível do Encontro Ágil. O vídeo é longo, mas vale muito a pena parar um tempo para refletir sobre tudo que foi dito nessa conversa de pessoas de várias regiões do Brasil, com históricos completamente diferentes, porém, com algo em comum.

Confira o vídeo:

Arte e Ciência da Computação – de volta aos primórdios

Muitas pessoas me perguntaram qual foi o resultado da minha defesa de mestrado e
qual avaliação que a banca fez. Nós tínhamos uma câmera filmando a defesa, mas a fita acabou (#fail) justamente um pouco depois de a banca começar a argumentar sobre a dissertação. Somente as pessoas que estavam presentes tiveram o privilégio de saber qual foi o impacto que essa defesa teve no Instituto de Matemática e Estatística da USP. Digo isso não para me gabar do meu trabalho, mas porque o fato foi realmente EMOCIONANTE e, sem brincadeira, teve gente que até chorou!

Continue reading

Refactoring Paintings

Refactoring is a well known technique in software development. In short terms, refactoring is to execute a sequence of small well defined steps with the intention to let your code base more clear, more beautiful, more elegant. The result of a continuous refactoring practice is a simpler and easier to maintain software project. There many times also when refactoring takes the programmer to create new abstractions and code generalizations.

Let’s go to a simple example: suppose we are programming a Person entity class. This class contains attributes like name, weight, age, gender, spoken language. After some time, I find out that I need to insert cats in my system for some reason. Continue reading

Fearless

Turn resistance to the new idea to your advantage. Every innovation, in true, breaks something. So, every resistance is welcome. We need the resistance to test our new ideas and convictions. Skeptics are a gift! They give us information about our progress and teach us how we can adapt our approach.

Maybe, the most important point in changing is how we deal with fear. Every change process implies in fear on both sides: those who are being changed want to avoid the pain of (maybe) loose something; those who are promoting change have the fear that their idea are wrong or won’t be accepted. When both these sides get in contact surges an impasse. Resistance is not the main force that takes a change to failure. Reaction to resistance is the problem.

You will hardly get 100% approval of a new idea. This is welcome. Continue reading

Cloud Computing x Grid Computing

We all already know that Cloud Computing is a buzzword since its unknown origin. Moreover, we also know that many concepts of cloud computing are not as knew as some companies and their marketing department pretend they are. Specially when compared to Grid Computing, which is a more than 13 year old paradigm, there are many similarities (and also some differences). I’ll try to expose some of these points here.

Question no. 1: Is “Cloud Computing” just a new name for Grid?

YES, in the sense that both aim to reduce cost of computing, increase reliability and flexibility

But NO: Grid is more than 10 years ago, when we didn’t have the computer power available today. They context and scale it was made to operate (expensive hundreds of machines clusters) is different of today’s available infrastructure (hundreds of thousands of “low cost” computers and virtual machines created within them). Grid and Cloud operate in different scales.

Nevertheless, YES: Cloud and Grid problems are mostly the same. The details are different, but both deal with the same issues.

Question no. 2: What is Cloud Computing?

Yes, I know, there are a lot of different definitions of what Cloud Computing is and not much consensus between those definitions [2]. Then, I choose the best and most complete definition I found til now. It is the US National Institute of Standards and Technology (NIST) definition. Their definition is short and complete, when they say that Cloud Computing is

 “a model for enabling convenient, on-demand network access to a shared pool of configurable resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction” [1]

In other words, Cloud is meant to be:

  1. Massively scalable
  2. Encapsulated as an abstract entity that delivers different levels of services
  3. Driven by economies of scale [3]
  4. Dynamically configured

Question no. 3: What is Grid Computing?

Grid Computing, through well defined standard protocols, aims to

“enable  resource sharing and coordinated problem solving in dynamic, multi-institutional virtual organizations” [4][5]

this means that Grid:

  1. Is distributed computing
  2. Operates across multiple federated organizations
  3. Coordinates resources that are not subject to centralized control
  4. Uses standards, open, and general-purpose protocols
  5. Delivers non-trivial QoS
While points 1, 2 and 3 holds true also for Cloud Computing, points 4 and 5 are still a challenge in the Cloud area.

Question no. 4: How to compare Cloud and Grid side-by-side? [6]

The following Figure is an insightful overview when we try to compare Grid and Cloud:
 

References

[1] MELL, P. and GRANCE, T. 2009. Draft NIST Working Definition of Cloud Computing.
[2] “Twenty Experts Define Cloud Computing”, SYS-CON Media Inc, 2008.
[3] J. Silvestre. “Economies and Diseconomies of Scale,” The New Palgrave: A Dictionary of Economics, v. 2, pp. 80–84, 1987.
[4] I. Foster, C. Kesselman, S. Tuecke. The anatomy of the Grid: Enabling scalable virtual organization. The Intl. Jrnl. of High Performance Computing Applications, 15(3):200–222, 2001.
[5] I. Foster. What is the Grid? A Three Point Checklist, July 2002.
[6] FOSTER, I., ZHAO, Y., RAICU, I. and LU, S. 2008. Cloud Computing and Grid Computing 360-Degree Compared. In Grid Computing Environments Workshop (GCE ’08), Austin, Texas, USA, November 2008, 1-10.