Expor o estudante a conceitos e ambientes de programação e integração de módulos e programas, partindo de baixo nível (linguagem de montagem), utilização de ferramentas do sistema operacional e de desenvolvimento de software até atingir os princípios de orientação a objetos. Estes tópicos são aplicados em uma parte prática que consiste em desenvolver um sistema de software em linguagem procedimental.
Arquitetura de computadores. Linguagem de montagem e ligação de código objeto. Interação com o sistema operacional e Shell scripts. Gerenciamento de compilação de programas. Modularização de código. Bibliotecas estáticas e dinâmicas. Teste e depuração. Controle de Versão. Linguagens procedimentais de alto nível. Linguagens dinâmicas de script. Introdução aos conceitos de orientação a objetos.
Conceitos básicos de arquitetura de computadores. Linguagem de montagem e montadores, ligação de código objeto, interface com hardware e com linguagens de alto nível. Interação com o sistema operacional no nível do shell: streams, entrada e saída padrão, redirecionamento e pipes. Shell scripts. Gerenciamento de compilação de programas e bibliotecas com ferramentas como make. Modularização de código. Ligação de módulos, estática e dinâmica. Construção de bibliotecas. Técnicas de depuração e teste de programas. Técnicas e ferramentas de controle de versão. Construção de um sistema em uma linguagem procedimental (por exemplo, C). Estudo de uma linguagem dinâmica de script (por exemplo, Python ou Ruby). Introdução aos conceitos de orientação a objetos no âmbito de linguagens dinâmicas.
Bibliografia Básica W.R. Stevens, S.A. Rago, Advanced Programming in the UNIX Environment (3rd Edition), Addison-Wesley Professional, 2013. B. Neveln, LINUX assembly language programming, Prentice Hall, 2000. B.W. Kernigham and R. Pike, The practice of programming, Addison-Wesley, 1999. N. Nisan, S. Schocken, The Elements of Computing Systems: Building a Modern Computer from First Principles, MIT Press, 2005. E. Roberts, The Art and Science of C, Addison-Wesley, 1995. A. Martelli, Python in a Nutshell, 2nd edition. O'Reilly, 2006. R. Sedgewick, K. Wayne, R. Dondero, Introduction to Programming in Python: An Interdisciplinary Approach, Addison-Wesley, 2015. D. Thomas, C. Fowler, A. Hunt, Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide (The Facets of Ruby), 4th Edition, Pragmatic Bookshelf, 2013. R. Sedgewick, K. Wayne, Introduction to Programming in Java: An Interdisciplinary Approach Addison-Wesley, 2007. Bibliografia Complementar Intel 64 and IA-32 Architectures Software Developers' Manual, https://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax. GNU Make Manual, http://www.gnu.org/software/make. Git Documentation, https://git-scm.com/doc.