Algumas caracteristicas diferem o processo de desenvolvimento de software de qualquer outro produto manufaturado. Essas diferencas, dadas pela propria essencia do software, que e uma entidade abstrata, provocam tantos problemas durante o processo de transformar uma ideia em um produto.Brooks, em seu artigos Essence and Accident in Software Development, trata de questoes que sempre aparecem em equipes de desenvolvimento, e que sao as principais inimigas dos desenvolvedores.Assim como Aristoteles na filosofia, Brooks encontra duas classes de problemas enfrentados durante o desenvolvimento: os essenciais e os acidentais. Questoes essenciais sao aquelas que sao inerentes ao processo de software e sempre estarao presentes durante o desenvolvimento. Ja os problemas acidentais sao aqueles nao instrinsecos ao software e que surgem em determinados pontos do projeto. O grande erro, segundo Brooks, e quando se da mais atencao ao que e acidental, deixando de lado aquilo que e essencial. Falaremos um pouco sobre os problemas essenciais no projeto de software.Complexidade: Manejar uma entidade abstrata e uma tarefa por si so bastante ardua. A dificuldade de compreender um todo composto por pequenas partes interdependentes contribui para falhas de entendimento e comunicacao. Muitas vezes membros de uma equipe tem visoes diferentes sobre partes do software, o que gera atrasos e retrabalhos.Conformidade: O software nao depende apenas do desejo de um programador bem intencionado. O projeto deve contemplar as expectativas de clientes exigentes, fazendo jus ao tempo de desenvolvimento e ao custo. Esse e um ponto importante, que se mal observado, pode por um projeto inteiro a perder.Mutabilidade: O software esta em constante evolucao. Interesses mudam, objetivos sao trocados e por isso o projeto deve estar pronto para evoluir com o menor impacto possivel. Projete pensando no futuro, pois logo voce estara nele.Invisibilidade: O fato de o software ser uma entidade abstrata e o responsavel pela maior parte dos problemas durante o desenvolvimento. A necessidade de modelos de representacao simples e eficientes e prioridade para a industria do software. Isso nos ultimos anos vem sendo bastante buscado e por vezes alcancado, com linguagens de representacao como a UML, que promove as mais diversas formas de modelar o projeto.Tentar superar esses problemas essenciais e o primeiro passo para um projeto de sucesso. De fato outros problemas aparecerao, mas serao acidentes, que podem ser tratados com outros remedios.Desses acidentes falaremos em outra oportunidade.Ate a proxima! E ai pessoal, beleza? Dessa vez vamos aprender como implementar a funcionalidade de upload de arquivos utilizando PHP e jQuery. O jQuery (http://jquery.com/) e uma biblioteca Javascript que busca simplificar a implementacao de tarefas como manipulacao de HTML, tratamento de eventos, animacao, Ajax, etc. No nosso artigo usaremos o jQuery basicamente para recuperar o status corrente do upload atraves de chamadas assincronas ao servidor.Visao Geral deste TutorialComo ja adiantamos, o tutorial consiste de uma pagina com um campo para upload de arquivos. O arquivo escolhido sera enviado via Ajax ao servidor, que, por sua vez, retornara para o cliente o percentual do arquivo que ja foi copiado. Este valor sera atualizado automaticamente e sera exibido em uma div para o usuario. Codigo do Lado do ClienteNo lado