Técnicas de Programação
Principais Livros e Artigos
- BAU, David et al.
Learnable Programming: Blocks and Beyond.
Communications of the ACM, New York, v. 60, nº 6, p. 72-80, jun. 2017.
[Descreve o uso de ambientes e linguagens de programação baseadas em blocos, ressaltando suas vantagens e aplicação para programadores profissionais.]
- FOWLER, Martin.
Refatoração: Aperfeiçoando o Projeto de Código Existente.
Porto Alegre: Bookman, 2004. 373 p.
[Trata especificamente da melhoria de programas já existentes. Apresenta um catálogo de
atividades para melhoria do código, com todos os exemplos feitos em Java. Contudo, os princípios da
refatoração podem ser aplicados a qualquer linguagem de programação.]
- GUO, Philip.
Teaching Real-World Programming.
Communications of the ACM, New York, v. 56, nº 8, p. 10-11, aug. 2013.
- McCONNELL, Steve C.
Code Complete: A Practical Handbook of Software Construction.
Redmond, WA: Microsoft Press, 1993. 890 p.
- RASKIN, Jeff.
Comments are More Important than Code.
Queue, New York, v. 3, nº 2, p. 62-64, mar. 2005.
- SEBESTA, Robert.
Conceitos de Linguagens de Programação.
5ª ed. Porto Alegre: Bookman, 2003. 638 p.
- SEELY, Donn M.
Coding Smart: People vs. Tools.
Queue, New York, v. 1, nº 6, p. 32-40, sep. 2003.
[Boas práticas no desenvolvimento de sistemas.]
Outros Livros e Artigos Interessantes
- ADL-TABATABAI, Ali-R.; KOZYRAKIS, Christos; SAHA, Bratin.
Unlocking Concurrency.
Queue, New York, v. 4, nº 10, p. 24-33, dec. 2006-jan. 2007.
[Discute as vantagens da utilização de técnicas de concorrência em programas em sistemas com múltiplas CPUs.]
- ARNOLD, Ken.
Programmers Are People, Too.
Queue, New York, v. 3, nº 5, p. 54-59, jun. 2005.
[Projeto de APIs considerando fatores humanos.]
- BALL, Thomas; ZORN, Benjamin.
Teach Foundational Language Principles.
Communications of the ACM, New York, v. 58, nº 5, p. 30-31, may 2015.
- BATES, Rodney.
Syntatic Heroin.
Queue, New York, v. 3, nº 5, p. 62-64, jun. 2005.
[Discute os problemas do uso de sobrecarga em linguagens de programação.]
- BOEHM, Hans-J.; ADVE, Sarita V.
You Don't Know Jack About Shared Variables or Memory Models.
Communications of the ACM, New York, v. 55, nº 2, p. 48-54, feb. 2012.
- CANTRILL, Bryan; BONWICK, Jeff.
Real-World Concurrency.
Communications of the ACM, New York, v. 51, nº 11, p. 34-39, nov. 2008.
[Discute as implicações do uso de concorrência no desenvolvimento de software.]
- CHEVREUIL, Wellington R. et al.
MapReduce Detalhado.
Mundo J, [s.l.], [s.n.], p. 56-64, [s.d.].
- COBBS, Archie L.
Persistence Programming.
Communications of the ACM, New York, v. 65, nº 9, p. 43-47, Sep. 2022. DOI 10.1145/3546957.
- COX, Russ.
Surviving Software Dependencies.
Communications of the ACM, New York, v. 62, nº 9, p. 36-43, Sep. 2019. DOI 10.1145/3347448.
[Discute detalhadamente maneiras de minimizar dependências de código externo.]
- DOEDERLEIN, Osvaldo P.
Baixo Acomplamento.
Java Magazine, [s.l.], nº 76, p. 58-66, [s.d.].
- EDWARDS, Chris.
Teaching Transformed.
Communications of the ACM, New York, v. 67, nº 2, p. 12-13, Feb. 2024. DOI 10.1145/3637208.
[Discute o impacto do uso de LLMs como o ChatGPT no ensino de programação.]
- ELRAD, Tzila; FILMAN, Robert E.; BADER, Atef.
Aspect-Oriented Programming.
Communications of the ACM, New York, v. 44, nº 10, p. 28-32, oct. 2001.
- GREEN, Robert; LEDGARD, Henry.
Coding Guidelines: Findind the Art in the Science.
Communications of the ACM, New York, v. 54, nº 12, p. 57-63, feb. 2012.
- HENNING, Michi.
API Design Matters.
Queue, New York, v. 5, nº 4, p. 24-36, may-jun. 2007.
[Defende a melhoria urgente das APIs devido ao enorme potencial de causar danos ao software alheio.]
- HILL, Robin K.
What Makes a Program Elegant?
Communications of the ACM, New York, v. 60, nº 3, p. 13, mar. 2017.
- JENKINS, Stephen B.
Musing of an ‘Old-School’ Programmer.
Communications of the ACM, New York, v. 49, nº 5, p. 124-126, may 2006.
[Apresenta argumentos a favor de uma abordagem mais simples para o desenvolvimento de software, baseado
nas experiências anteriores do autor.]
- JOHNSON, Bruce.
Reveling in Constraints.
Communications of the ACM, New York, v. 52, nº 9, p. 44-48, sep. 2009.
[Discute o Google Web Toolkit como uma solução para contornar as limitações atuais no desenvolvimento de aplicações Web.]
- LARUS, James; KOZYRAKIS, Christos.
Transactional Memory.
Communications of the ACM, New York, v. 51, nº 7, p. 80-88, jul. 2008.
[Discute o conceito de memória transacional e propõe o seu uso para aperfeiçoar a programação paralela de aplicações.]
- LE GOUTS, Claire; PRADEL, Michael; ROYCHOUDHURY, Abhik.
Automated Program Repair.
Communications of the ACM, New York, v. 62, nº 12, p. 56-65, Dec. 2019. DOI 10.1145/3318162.
- LIMONCELLI, Thomas A.
Documentation is Automation.
Communications of the ACM, New York, v. 61, nº 6, p. 48-53, Jun. 2018. DOI 10.1145/3190572.
- LUQUE, Leandro; SILVA, Rodrigo R.
Coesão e Acoplamento em Sistemas OO.
Java Magazine, [s.l.], nº 77, p. 68-74, [s.d.].
- MARTIN, Fred.
Toy Projects Considered Harmful.
Communications of the ACM, New York, v. 49, nº 7, p. 113-116, jul. 2006.
- MASHEY, John R.
Languages: Levels, Libraries, and Longevity.
Queue, New York, v. 2, nº 9, p. 32-38, dec. 2004/jan. 2005.
[Discute as razões do sucesso de certas linguagens em detrimento de outras.]
- MEDEIROS, André.
Dynamics of Change: Why Reactivity Matters.
Communications of the ACM, New York, v. 59, nº 10, p. 42-46, oct. 2016.
- NEVILLE-NEIL, George V.
Code Spelunking: Exploring Cavernous Code Bases.
Queue, New York, v. 1, nº 6, p. 42-48, sep. 2003.
- NEVILLE-NEIL, George V.
Cold, Hard Cache.
Communications of the ACM, New York, v. 60, nº 12, p. 27-28, Dec. 2017.
- NEVILLE-NEIL, George V.
KV Unscripted.
Queue, New York, v. 3, nº 8, p. 14-16, oct. 2005.
[Alerta contra os perigos de abusar do recortar-e-colar, ignorando o uso de sub-rotinas e bibliotecas.]
- NEVILLE-NEIL, George V.
Login On With KV.
Queue, New York, v. 4, nº 5, p. 9-10, jun. 2006.
[Dificuldades em escrever um bom sistema de log.]
- NEVILLE-NEIL, George V.
Peerless P2P.
Queue, New York, v. 4, nº 10, p. 12-13, dec. 2006-jan. 2007.
[Propõe vários modelos de arquitetura para aplicações que permitem o compartilhamento de arquivos de forma segura.]
- NEVILLE-NEIL, George V.
The Unholy Trinity of Software Development.
Communications of the ACM, New York, v. 60, nº 2, p. 34-36, feb. 2017.
- NEVILLE-NEIL, George V.
Version Aversion.
Communications of the ACM, New York, v. 53, nº 10, p. 28-29, oct. 2010.
[Discute um esquema de versionamento de software.]
- NEVILLE-NEIL, George V.
Wanton Acts of Debugging.
Communications of the ACM, New York, v. 55, nº 2, p. 33-34, feb. 2012.
- OLIVEIRA, Renato G.
Desenvolvimento Baseado em Componentes.
Java Magazine, [s.l.], nº 110, p. 40-45, [s.d.].
- PUGA, Sandra; RISSETTI, G.
Lógica de Programação e Estruturas de Dados.
São Paulo: Makron, 2004.
- SALIBA, Walter L. C.
Técnicas de Programação.
São Paulo: Makron, 1992.
- SANTOS, Rafael.
Entendendo Programação com Restrições Através da Resolução de Sudokus.
Mundo J, Curitiba, nº 48, p. 33-41, jul./ago. 2011.
- SAVAGE, Neil.
Gradual Evolution.
Communications of the ACM, New York, v. 57, nº 10, p. 16-18, oct. 2014.
[Discute a adoção de tipagem opcional em algumas linguagens de programação.]
- SAVAGE, Neil.
Using Functions for Easier Programming.
Communications of the ACM, New York, v. 61, nº 5, p. 29-30, May 2018. DOI 10.1145/3193776.
- SAVAGE, Neil.
Your Wish is My CMD.
Communications of the ACM, New York, v. 63, nº 7, p. 15-16, Jul. 2020. DOI 10.1145/3398392.
[Discute o uso de Inteligência Artificial para automatizar a geração de código, bem como apresenta seu uso em testes de programas.]
- SEELY, Donn M.
How Not to Write FORTRAN in Any Language.
Queue, New York, v. 2, nº 9, p. 58-65, dec. 2004/jan. 2005.
[Apresenta boas práticas no estilo de codificação para aumentar a legibilidade dos programas.]
- SHRESTHA, Nischal et al.
Here We Go Again: Why Is It Difficult for Developers to Learn Another Programming Language?
Communications of the ACM, New York, v. 65, nº 3, p. 91-99, Mar. 2022. DOI 10.1145/3511062.
- SPINELLIS, Diomidis.
Reading, Writing and Code.
Queue, New York, v. 1, nº 7, p. 84-89, oct. 2003.
[Boas práticas no estilo de codificação.]
- STACHOUR, Paul; BROWN, David C.
You Don't Know Jack About Software Maintenance.
Communications of the ACM, New York, v. 52, nº 11, p. 54-58, nov. 2009.
[Propõe simplificar a manutenção de software através de um projeto inicial adequado.]
- TORRES, Edwin.
Why Code Comments Still Matter.
Communications of the ACM, New York, v. 61, nº 5, p. 24-25, May 2018. DOI 10.1145/3193752.
- VIDELA, Alvaro.
Meaning and Context in Computer Programs.
Communications of the ACM, New York, v. 65, nº 5, p. 56-58, May 2022. DOI 10.1145/3498850.
- VILLAS, Marcos V.; VILLASBOAS, Luiz F. P.
Programação: Conceitos, Técnicas e Linguagens.
Rio de Janeiro: Campus, 1997.
- WILSON, Gregory V.
Extensible Programming for the 21st Century.
Queue, New York, v. 2, nº 9, p. 48-57, dec. 2004/jan. 2005.
[Propõe estender os ambientes de desenvolvimento de forma a aumentar a expressividade das linguagens de programação.]