diff --git a/.~lock.lang_pop.ods# b/.~lock.lang_pop.ods# new file mode 100644 index 0000000..cb4616d --- /dev/null +++ b/.~lock.lang_pop.ods# @@ -0,0 +1 @@ +Fernando Castor,fernando,macbook-de-fernando-castor-filho.local,17.05.2013 17:48,file:///Users/fernando/Library/Application%20Support/BrOffice.org/3; \ No newline at end of file diff --git a/5linguagens.aux b/5linguagens.aux new file mode 100644 index 0000000..4135b01 --- /dev/null +++ b/5linguagens.aux @@ -0,0 +1,153 @@ +\relax +\ifx\hyper@anchor\@undefined +\global \let \oldcontentsline\contentsline +\gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global \let \oldnewlabel\newlabel +\gdef \newlabel#1#2{\newlabelxx{#1}#2} +\gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\let \contentsline\oldcontentsline +\let \newlabel\oldnewlabel} +\else +\global \let \hyper@last\relax +\fi + +\catcode`"\active +\@writefile{toc}{\beamer@endinputifotherversion {3.07pt}} +\@writefile{nav}{\beamer@endinputifotherversion {3.07pt}} +\select@language{brazil} +\@writefile{toc}{\select@language{brazil}} +\@writefile{lof}{\select@language{brazil}} +\@writefile{lot}{\select@language{brazil}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {1}{1}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{2}{2/3}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {2}{3}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{3}{4/4}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {4}{4}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{4}{5/5}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {5}{5}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{5}{6/6}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {6}{6}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{6}{7/7}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {7}{7}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{7}{8/8}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {8}{8}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{8}{9/9}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {9}{9}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{9}{10/15}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {10}{15}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{10}{16/16}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {16}{16}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{11}{17/17}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {17}{17}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{12}{18/18}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {18}{18}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{13}{19/19}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {19}{19}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{14}{20/21}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {20}{21}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{15}{22/22}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {22}{22}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{16}{23/23}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {23}{23}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{17}{24/24}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {24}{24}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{18}{25/25}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {25}{25}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{19}{26/26}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {26}{26}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{20}{27/29}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {27}{29}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{21}{30/30}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {30}{30}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{22}{31/32}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {31}{32}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{23}{33/33}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {33}{33}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{24}{34/35}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {34}{35}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{25}{36/38}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {36}{38}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{26}{39/39}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {39}{39}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{27}{40/40}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {40}{40}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{28}{41/41}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {41}{41}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{29}{42/44}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {42}{44}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{30}{45/45}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {45}{45}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{31}{46/46}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {46}{46}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{32}{47/47}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {47}{47}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{33}{48/49}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {48}{49}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{34}{50/53}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {50}{53}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{35}{54/54}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {54}{54}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{36}{55/55}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {55}{55}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{37}{56/56}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {56}{56}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{38}{57/58}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {57}{58}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{39}{59/59}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {59}{59}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{40}{60/60}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {60}{60}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{41}{61/61}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {61}{61}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{42}{62/62}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {62}{62}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{43}{63/63}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {63}{63}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{44}{64/64}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {64}{64}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{45}{65/67}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {65}{67}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{46}{68/68}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {68}{68}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{47}{69/69}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {69}{69}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{48}{70/70}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {70}{70}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{49}{71/71}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {71}{71}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{50}{72/80}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {72}{80}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{51}{81/81}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {81}{81}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{52}{82/84}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {82}{84}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{53}{85/85}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {85}{85}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{54}{86/86}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {86}{86}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{55}{87/87}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {87}{87}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{56}{88/88}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {88}{88}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{57}{89/89}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {89}{89}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{58}{90/90}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {90}{90}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{59}{91/92}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {91}{92}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{60}{93/96}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {93}{96}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{61}{97/97}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {97}{97}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{62}{98/101}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {98}{101}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{63}{102/102}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {102}{102}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{64}{103/104}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {103}{104}}} +\@writefile{nav}{\headcommand {\beamer@partpages {1}{104}}} +\@writefile{nav}{\headcommand {\beamer@subsectionpages {1}{104}}} +\@writefile{nav}{\headcommand {\beamer@sectionpages {1}{104}}} +\@writefile{nav}{\headcommand {\beamer@documentpages {104}}} +\@writefile{nav}{\headcommand {\def \inserttotalframenumber {64}}} diff --git a/5linguagens.nav b/5linguagens.nav new file mode 100644 index 0000000..872ba0d --- /dev/null +++ b/5linguagens.nav @@ -0,0 +1,134 @@ +\beamer@endinputifotherversion {3.07pt} +\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}} +\headcommand {\beamer@framepages {1}{1}} +\headcommand {\slideentry {0}{0}{2}{2/3}{}{0}} +\headcommand {\beamer@framepages {2}{3}} +\headcommand {\slideentry {0}{0}{3}{4/4}{}{0}} +\headcommand {\beamer@framepages {4}{4}} +\headcommand {\slideentry {0}{0}{4}{5/5}{}{0}} +\headcommand {\beamer@framepages {5}{5}} +\headcommand {\slideentry {0}{0}{5}{6/6}{}{0}} +\headcommand {\beamer@framepages {6}{6}} +\headcommand {\slideentry {0}{0}{6}{7/7}{}{0}} +\headcommand {\beamer@framepages {7}{7}} +\headcommand {\slideentry {0}{0}{7}{8/8}{}{0}} +\headcommand {\beamer@framepages {8}{8}} +\headcommand {\slideentry {0}{0}{8}{9/9}{}{0}} +\headcommand {\beamer@framepages {9}{9}} +\headcommand {\slideentry {0}{0}{9}{10/15}{}{0}} +\headcommand {\beamer@framepages {10}{15}} +\headcommand {\slideentry {0}{0}{10}{16/16}{}{0}} +\headcommand {\beamer@framepages {16}{16}} +\headcommand {\slideentry {0}{0}{11}{17/17}{}{0}} +\headcommand {\beamer@framepages {17}{17}} +\headcommand {\slideentry {0}{0}{12}{18/18}{}{0}} +\headcommand {\beamer@framepages {18}{18}} +\headcommand {\slideentry {0}{0}{13}{19/19}{}{0}} +\headcommand {\beamer@framepages {19}{19}} +\headcommand {\slideentry {0}{0}{14}{20/21}{}{0}} +\headcommand {\beamer@framepages {20}{21}} +\headcommand {\slideentry {0}{0}{15}{22/22}{}{0}} +\headcommand {\beamer@framepages {22}{22}} +\headcommand {\slideentry {0}{0}{16}{23/23}{}{0}} +\headcommand {\beamer@framepages {23}{23}} +\headcommand {\slideentry {0}{0}{17}{24/24}{}{0}} +\headcommand {\beamer@framepages {24}{24}} +\headcommand {\slideentry {0}{0}{18}{25/25}{}{0}} +\headcommand {\beamer@framepages {25}{25}} +\headcommand {\slideentry {0}{0}{19}{26/26}{}{0}} +\headcommand {\beamer@framepages {26}{26}} +\headcommand {\slideentry {0}{0}{20}{27/29}{}{0}} +\headcommand {\beamer@framepages {27}{29}} +\headcommand {\slideentry {0}{0}{21}{30/30}{}{0}} +\headcommand {\beamer@framepages {30}{30}} +\headcommand {\slideentry {0}{0}{22}{31/32}{}{0}} +\headcommand {\beamer@framepages {31}{32}} +\headcommand {\slideentry {0}{0}{23}{33/33}{}{0}} +\headcommand {\beamer@framepages {33}{33}} +\headcommand {\slideentry {0}{0}{24}{34/35}{}{0}} +\headcommand {\beamer@framepages {34}{35}} +\headcommand {\slideentry {0}{0}{25}{36/38}{}{0}} +\headcommand {\beamer@framepages {36}{38}} +\headcommand {\slideentry {0}{0}{26}{39/39}{}{0}} +\headcommand {\beamer@framepages {39}{39}} +\headcommand {\slideentry {0}{0}{27}{40/40}{}{0}} +\headcommand {\beamer@framepages {40}{40}} +\headcommand {\slideentry {0}{0}{28}{41/41}{}{0}} +\headcommand {\beamer@framepages {41}{41}} +\headcommand {\slideentry {0}{0}{29}{42/44}{}{0}} +\headcommand {\beamer@framepages {42}{44}} +\headcommand {\slideentry {0}{0}{30}{45/45}{}{0}} +\headcommand {\beamer@framepages {45}{45}} +\headcommand {\slideentry {0}{0}{31}{46/46}{}{0}} +\headcommand {\beamer@framepages {46}{46}} +\headcommand {\slideentry {0}{0}{32}{47/47}{}{0}} +\headcommand {\beamer@framepages {47}{47}} +\headcommand {\slideentry {0}{0}{33}{48/49}{}{0}} +\headcommand {\beamer@framepages {48}{49}} +\headcommand {\slideentry {0}{0}{34}{50/53}{}{0}} +\headcommand {\beamer@framepages {50}{53}} +\headcommand {\slideentry {0}{0}{35}{54/54}{}{0}} +\headcommand {\beamer@framepages {54}{54}} +\headcommand {\slideentry {0}{0}{36}{55/55}{}{0}} +\headcommand {\beamer@framepages {55}{55}} +\headcommand {\slideentry {0}{0}{37}{56/56}{}{0}} +\headcommand {\beamer@framepages {56}{56}} +\headcommand {\slideentry {0}{0}{38}{57/58}{}{0}} +\headcommand {\beamer@framepages {57}{58}} +\headcommand {\slideentry {0}{0}{39}{59/59}{}{0}} +\headcommand {\beamer@framepages {59}{59}} +\headcommand {\slideentry {0}{0}{40}{60/60}{}{0}} +\headcommand {\beamer@framepages {60}{60}} +\headcommand {\slideentry {0}{0}{41}{61/61}{}{0}} +\headcommand {\beamer@framepages {61}{61}} +\headcommand {\slideentry {0}{0}{42}{62/62}{}{0}} +\headcommand {\beamer@framepages {62}{62}} +\headcommand {\slideentry {0}{0}{43}{63/63}{}{0}} +\headcommand {\beamer@framepages {63}{63}} +\headcommand {\slideentry {0}{0}{44}{64/64}{}{0}} +\headcommand {\beamer@framepages {64}{64}} +\headcommand {\slideentry {0}{0}{45}{65/67}{}{0}} +\headcommand {\beamer@framepages {65}{67}} +\headcommand {\slideentry {0}{0}{46}{68/68}{}{0}} +\headcommand {\beamer@framepages {68}{68}} +\headcommand {\slideentry {0}{0}{47}{69/69}{}{0}} +\headcommand {\beamer@framepages {69}{69}} +\headcommand {\slideentry {0}{0}{48}{70/70}{}{0}} +\headcommand {\beamer@framepages {70}{70}} +\headcommand {\slideentry {0}{0}{49}{71/71}{}{0}} +\headcommand {\beamer@framepages {71}{71}} +\headcommand {\slideentry {0}{0}{50}{72/80}{}{0}} +\headcommand {\beamer@framepages {72}{80}} +\headcommand {\slideentry {0}{0}{51}{81/81}{}{0}} +\headcommand {\beamer@framepages {81}{81}} +\headcommand {\slideentry {0}{0}{52}{82/84}{}{0}} +\headcommand {\beamer@framepages {82}{84}} +\headcommand {\slideentry {0}{0}{53}{85/85}{}{0}} +\headcommand {\beamer@framepages {85}{85}} +\headcommand {\slideentry {0}{0}{54}{86/86}{}{0}} +\headcommand {\beamer@framepages {86}{86}} +\headcommand {\slideentry {0}{0}{55}{87/87}{}{0}} +\headcommand {\beamer@framepages {87}{87}} +\headcommand {\slideentry {0}{0}{56}{88/88}{}{0}} +\headcommand {\beamer@framepages {88}{88}} +\headcommand {\slideentry {0}{0}{57}{89/89}{}{0}} +\headcommand {\beamer@framepages {89}{89}} +\headcommand {\slideentry {0}{0}{58}{90/90}{}{0}} +\headcommand {\beamer@framepages {90}{90}} +\headcommand {\slideentry {0}{0}{59}{91/92}{}{0}} +\headcommand {\beamer@framepages {91}{92}} +\headcommand {\slideentry {0}{0}{60}{93/96}{}{0}} +\headcommand {\beamer@framepages {93}{96}} +\headcommand {\slideentry {0}{0}{61}{97/97}{}{0}} +\headcommand {\beamer@framepages {97}{97}} +\headcommand {\slideentry {0}{0}{62}{98/101}{}{0}} +\headcommand {\beamer@framepages {98}{101}} +\headcommand {\slideentry {0}{0}{63}{102/102}{}{0}} +\headcommand {\beamer@framepages {102}{102}} +\headcommand {\slideentry {0}{0}{64}{103/104}{}{0}} +\headcommand {\beamer@framepages {103}{104}} +\headcommand {\beamer@partpages {1}{104}} +\headcommand {\beamer@subsectionpages {1}{104}} +\headcommand {\beamer@sectionpages {1}{104}} +\headcommand {\beamer@documentpages {104}} +\headcommand {\def \inserttotalframenumber {64}} diff --git a/5linguagens.pdf b/5linguagens.pdf new file mode 100644 index 0000000..9b56d0e Binary files /dev/null and b/5linguagens.pdf differ diff --git a/5linguagens.tex b/5linguagens.tex new file mode 100644 index 0000000..3a26f97 --- /dev/null +++ b/5linguagens.tex @@ -0,0 +1,1354 @@ +% Author: Fernando Castor. You can contact the author at castor in the cin.ufpe.br domain. + +%THIS WORK IS LICENSED UNDER A CREATIVE COMMONS ATTRIBUTION-NONCOMMERCIAL-SHAREALIKE 3.0 UNPORTED LICENSE. THE WORK (AS DEFINED BY THE LICENSE) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. +% +%BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. +%PLEASE REFER TO THE DESCRIPTION OF THE LICENSE (http://creativecommons.org/licenses/by-nc-sa/3.0/) AND TO ITS FULL TEXT (http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode) FOR MORE INFORMATION. + +% THIS WORK USES A NUMBER OF IMAGES FROM THIRD-PARTIES. THE COPYRIGHT OF THESE IMAGES REMAIN WITH THEIR OWNERS. + +% This license applies solely to the 5linguagens.tex file. + +% Build this file with pdflatex 5linguages.tex +\documentclass[xcolor=dvipsnames]{beamer} +\usecolortheme[named=Brown]{structure} +%\usetheme{Rochester} +\usetheme{Frankfurt} +%\usetheme{Madrid} + +\usepackage{booktabs} +\usepackage{graphics} +\usepackage{multirow} +\usepackage[latin1]{inputenc} % para os acentos +\usepackage[brazil]{babel} % para hifeniza\c{c}\~{a}o +\usepackage{color} + +%\usepackage[english]{babel} +%\usepackage[utf8]{inputenc} + +\definecolor{lightgrey}{rgb}{0.8, 0.8, 0.8} +\newcommand{\shd}[1]{\colorbox{lightgrey}{#1}} + +\newcommand{\tblue}[1]{\textcolor{blue}{#1}} +\newcommand{\tred}[1]{\textcolor{red}{#1}} +\newcommand{\tgreen}[1]{\textcolor{green}{#1}} +\newcommand{\tyellow}[1]{\textcolor{yellow}{#1}} + +\newcommand{\byellow}[1]{\colorbox{yellow}{#1}} +\newcommand{\bred}[1]{\colorbox{red}{\textcolor{white}{#1}}} +\newcommand{\bgreen}[1]{\colorbox{green}{#1}} + +\newcommand*{\vcenteredhbox}[1]{\begingroup +\setbox0=\hbox{#1}\parbox{\wd0}{\box0}\endgroup} + +\definecolor{lightestgrey}{rgb}{0.91, 0.91, 0.91} +\newcommand{\lshd}[1]{\colorbox{lightestgrey}{#1}} + +\title{As próximas cinco linguagens para você aprender... e por quê?} +\author{Fernando Castor} +\pgfdeclareimage[height=0.4cm]{cc}{license} + +\institute{Centro de Informática -- Universidade Federal de Pernambuco \\[2.0cm] {\tiny Alguns direitos reservados }\pgfuseimage{cc} } +\date{} +\pgfdeclareimage[height=0.8cm]{logo}{ines} +\pgfdeclareimage[height=0.8cm]{logo2}{spg} +\pgfdeclareimage[height=0.7cm]{logo3}{cin} +\pgfdeclareimage[height=1.0cm]{logo4}{ufpe} + +\logo{\pgfuseimage{logo4}\hspace{0.1cm}\pgfuseimage{logo3}\hspace{0.1cm}\pgfuseimage{logo}\hspace{0.1cm}\pgfuseimage{logo2} } + +\begin{document} + +\frame{\titlepage} + +%-------------------------------------------------------- + + +%\begin{frame} +% %\frametitle{O que é isso?} +% \begin{columns} +%\begin{column}[l]{7.3cm} +%{\scriptsize +%\texttt{ +%\noindent +%\begin{block}{} +%c7 3c 2a 3c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c\\ +%28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c\\ +%2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b\\ +%2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c\\ +%3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28\\ +%5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a\\ +%2b 2a 00 00 01 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 64 48 65 6c 6c 6f 2c 20 57\\ +%6f 72 6c 64 21 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +%\end{block} +%}} +%% Hex dump de um Hello World escrito em Byte Size. +%% Obtido a partir de http://www.roesler-ac.de/wolfram/hello.htm +%% ``The Hello World Collection'', compilada por Wolfram Rosler. +%\end{column} +% +%\begin{column}[c]{3cm} +%\end{column} +%\end{columns} +%\end{frame} +% +%\begin{frame} +% %\frametitle{O que é isso?} +% \begin{columns} +%\begin{column}[l]{7.3cm} +%{\scriptsize +%\texttt{ +%\noindent +%\begin{block}{} +%c7 3c 2a 3c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c\\ +%28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c\\ +%2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b\\ +%2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c\\ +%3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28\\ +%5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a\\ +%2b 2a 00 00 01 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 64 \tred{48 65 6c 6c 6f 2c 20 57}\\ +%\tred{6f 72 6c 64 21} 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +%\end{block} +%}} +% +%\end{column} +% +%\begin{column}[c]{3cm} +%{\scriptsize +%\texttt{ +%\noindent +%\begin{block}{} +%\tred{48} -- H\\ +%\tred{65} -- e\\ +%\tred{6c} -- l\\ +%\tred{6c} -- l\\ +%\tred{6f} -- o\\ +%\tred{2c} -- ,\\ +%\tred{20} -- \\ +%\tred{57} -- W\\ +%\tred{6F} -- o\\ +%\tred{72} -- r\\ +%\tred{6c} -- l\\ +%\tred{64} -- d\\ +%\tred{21} -- ! +%\end{block} +%}} +%\end{column} +% +%\end{columns} +%\end{frame} + +\begin{frame} + \frametitle{Linguagens de Programação} + % Considero aqui que estamos falando tanto das linguagens quanto das infra-estruturas + % associadas: compiladores, interpretadores e máquinas virtuais. + \begin{itemize} + \item Servem para \textbf{dizer ao computador o que fazer}\vspace{0.1cm} + \item \textbf{Independentemente da máquina} subjacente\vspace{0.1cm} + \item \textbf{Legíveis} para humanos\vspace{0.1cm} + \end{itemize} +\pause +\vspace{0.4cm} +\texttt{ +\begin{block}{Hello World!} +{\footnotesize +C~~~~~Hello World in Fortran 77\\[0.3cm] +~~~~~~PROGRAM HELLO\\ +~~~~~~PRINT*, 'Hello, World!'\\ +~~~~~~END } +\end{block} +} +\end{frame} +% +%\begin{frame} +% %\frametitle{O que é isso?} +% \begin{columns} +%\begin{column}[l]{7.3cm} +%{\scriptsize +%\texttt{ +%\noindent +%\begin{block}{} +%c7 3c 2a 3c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c\\ +%28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c\\ +%2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b\\ +%2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c\\ +%3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28\\ +%5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a\\ +%2b 2a 00 00 01 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 64 \tred{48 65 6c 6c 6f 2c 20 57}\\ +%\tred{6f 72 6c 64 21} 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\\ +%00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +%\end{block} +%}} +% +%\end{column} +% +%\begin{column}[c]{3cm} +%{\scriptsize +%\texttt{ +%\noindent +%\begin{block}{} +%\tred{01001000} -- H\\ +%\tred{01100101} -- e\\ +%\tred{01101100} -- l\\ +%\tred{01101100} -- l\\ +%\tred{01101111} -- o\\ +%\tred{00101100} -- ,\\ +%\tred{00100000} -- \\ +%\tred{01010111} -- W\\ +%\tred{01101111} -- o\\ +%\tred{01110010} -- r\\ +%\tred{01101100} -- l\\ +%\tred{01100100} -- d\\ +%\tred{00100001} -- ! +%\end{block} +%}} +%\end{column} +% +%\end{columns} +%\end{frame} +% +%\begin{frame} +%% \frametitle{Programação no ENIAC} +% \begin{figure} +% \includegraphics[scale=0.65]{eniac.jpg}\\ +% %Fonte: http://24.media.tumblr.com/tumblr_ljbw9nkezX1qcw9y0o1_500.jpg +% +% % Se programar usando os opcodes das instruções da máquina e códigos de caracteres em ASCII, +% % tudo isso escrito usando base 2, parece maluquice, imagine programar como se fazia na época +% % do ENIAC e do EDSAC. É tudo uma questão de perspectiva. Para quem viveu esta época, Assembly +% % (com mnemônicos) provavelmente era uma bênção. +% \end{figure} +%\end{frame} +% + +\begin{frame} + \frametitle{Linguagens de Programação são \tgreen{\textbf{Ferramentas}}} + \begin{block}{Cada uma se presta a um fim} + % Isso é verdade inclusive para as linguagens ditas ``de propósito geral'', ou seja, + % que não estão restritas a um domínio específico. Embora não estejam restritas a + % um domínio, tais linguagens geralmente são mais apropriadas para a construção de + % determinados tipos de aplicação, com certas características. + \begin{columns} + \begin{column}[l]{6.5cm} + \begin{itemize} + \item \textbf{Fortran}: processamento numérico\vspace{0.2cm} + \item \textbf{Cobol}: descrição de dados e aplicações comerciais\vspace{0.2cm} + \item \textbf{Perl}: processamento de cadeias de caracteres + \end{itemize}\vspace{0.2cm} + \end{column} + \begin{column}[r]{4cm} + \begin{figure} + \includegraphics[scale=0.22]{tools.jpg}\\ + % Fonte: http://2.bp.blogspot.com/_axtoXDwp4Zk/TTBbP6aSfzI/AAAAAAAAC8k/pEVG62lPG30/s1600/tools.JPG + \end{figure} + \end{column}t + \end{columns} + \end{block} + +\end{frame} + +\begin{frame} + \frametitle{Esse fim \tred{pode mudar} com o tempo} +Exemplo: \textbf{Java} + \begin{figure} + \vcenteredhbox{\includegraphics[scale=0.20]{interactiveTV.jpg}} + \vcenteredhbox{~$\Rightarrow$~} + \vcenteredhbox{\includegraphics[scale=0.27]{applet.png}} + \vcenteredhbox{~$\Rightarrow$~} + \vcenteredhbox{\includegraphics[scale=0.20]{symantec.jpg}} + \end{figure} +\end{frame} + + +\begin{frame} + \begin{figure} + \includegraphics[scale=0.45]{pls.jpg}\\ + %http://www.collegeteacher.org/csci101/resource_programming/pics/progLanguages.jpg + \end{figure} +{\small \byellow{Em 17 de maio de 2013, havia 669 ``LPs'' na lista da Wikipédia.}} +% Não inclui diversas linguagens ``acadêmicas'', por exemplo, Ptolemy (http://ptolemy.cs.iastate.edu/) +% e Spec# (http://research.microsoft.com/en-us/projects/specsharp/), esta última projetada e +% implementada por pesquisadores da Microsoft Research, +% nem algumas linguagens ``esotéricas'', como Malbolge (http://www.lscheffer.com/malbolge.shtml), +% Whitespace (http://en.wikipedia.org/wiki/Whitespace_(programming_language)) e Shakespeare +% (http://en.wikipedia.org/wiki/Shakespeare_(programming_language). +% Em contrapartida, inclui algumas linguagens que não são estritamente falando linguagens de programação, +% já que não são executáveis em um computador de propósito geral. Exemplos incluem Z e B. +% A lista encontra-se em http://en.wikipedia.org/wiki/List_of_programming_languages +\end{frame} + +\begin{frame} +\frametitle{Certo, são muitas linguagens, mas...} +{\Large +\begin{enumerate} +\item Quais são as linguagens de programação mais usadas na prática?\vspace{1cm} +\item Se você quisesse aprender cinco linguagens para o futuro, quais deveriam ser? +\end{enumerate} +} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{\textbf{Parte 1}}\\[0.3cm] +\Large{Quais são as linguagens de programação mais usadas na prática?} +% Quais são? É um bom momento para se perguntar isso, antes de seguir adiante. +\end{center} +\end{frame} +% Discussão interessante sobre o tema que junta várias das informações apresentadas aqui: +% http://www.readwriteweb.com/hack/2012/06/5-ways-to-tell-which-programming-lanugages-are-most-popular.php + + + + + + + + + + + + + + + + + +\begin{frame} +\frametitle{Não há um censo oficial sobre uso de linguagens} +\begin{itemize} +\item Resposta precisa vir de várias fontes +\vspace{0.2cm} +\item Com diferentes contextos +\vspace{0.2cm} +\item Dados são \tred{difíceis de comparar} +\begin{itemize} +\vspace{0.2cm} +\item C\# no~\includegraphics[scale=0.6]{codeplex_logo.jpg}~~vs. C\# no~\includegraphics[scale=0.325]{sourceforge_logo.jpg} +% A tag C# é usada no Codeplex 2.476 vezes, sendo a mais popular entre todas naquele sítio. +% Por outro lado, no SourceForge, há 3.300 projetos que ``usam'' C# mas esta é a apenas a +% sexta linguagem com mais projetos. Além disso tudo, é importante levar em conta a maturidade +% dos projetos. No caso do SourceForge, 1031 projetos que usam C# são considerados +% maduros ou estáveis. No Codeplex 908 projetos que incluem a tag C# são estáveis. +%Logo do CodePlex +%http://joel.neubeck.net/wp-content/uploads/2008/06/codeplex-logo_thumb.jpg +%Logo do SourceForge +%http://www.thehostingnews.com/wp-content/uploads/2011/02/Sourceforge-THN.jpg +\end{itemize} + +\begin{columns} +\begin{column}[c]{2.7cm} +\includegraphics[scale=0.35]{codeplex.jpg} +\end{column} +\begin{column}[c]{2.7cm} +\includegraphics[scale=0.35]{sourceforge.jpg} +\end{column} +\end{columns} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{O que significam ``ser usada'' e ``na prática''? } +\begin{itemize} +\item Mais \tred{linhas de código} escritas na linguagem? +\pause +\vspace{0.3cm} +\item Número de \tred{\textit{commits}} de programas que usam a linguagem? +\pause +\vspace{0.3cm} +\item Mais \tred{``projetos''} com linhas de código escritas na linguagem? +\pause +\begin{itemize} +\vspace{0.1cm} +\item O que é um ``projeto''? +\vspace{0.1cm} +\item \tred{\textit{Forks}} contam como projetos separados? +% Pode parecer óbvio que sim mas, quando paramos para examinar o Github (https://github.com/popular/forked) +% e percebemos que há projetos com mais de 7.000 forks, a resposta torna-se menos evidente. +\vspace{0.1cm} +\item Se usar apenas \tred{código de terceiros} conta? +% Código de terceiros: por exemplo, se um programa não inclui nenhuma linha de código desenvolvida +% ``in-house'' em uma dada linguagem mas utiliza uma biblioteca escrita nessa linguagem, deve ser +% levado em conta? +\end{itemize} +\vspace{0.3cm} +\pause +\item Onde a \tred{linha} da ``prática'' é \tred{traçada}? +% Uma linguagem ser usada para implementar o Microsoft Windows significa que ela é usada ``na prática''? Se for usada no Linux também? E no VLC player? E no XMonad? E no Battle for Wesnoth? E em um repositório no Github que tenha 50 seguidores? E nos projetos de disciplinas de graduação? +\pause +\vspace{0.3cm} +\item É relevante saber se desenvolvedores \tred{falam} muito \tred{sobre}? +\end{itemize} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{Em resumo: \\é necessário adotar \\\tred{diferentes perspectivas}. } +\end{center} +\end{frame} + +\begin{frame} +\frametitle{Felizmente...} +\begin{itemize} +\item Alguém já fez \bred{parte} do trabalho\vspace{0.3cm} +\item TIOBE Programming Community Index\vspace{0.1cm} +% Atualizado mensalmente no endereço http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html +% Se você simplesmente buscar TIOBE no Google, vai direto para essa página. Vale ressaltar que, até onde pude +% averiguar, o ranking da TIOBE é o medidor mais popular de popularidade de linguagens de programação. +% Uma breve descrição da TIOBE (que é uma empresa sediada na Holanda): +% Measuring Software Code Quality +%TIOBE checks more than 211 million lines of software code for its customers world-wide, real-time, each day. +%We have combined the best-in-class code quality checking tools into one framework. Via a single web interface you can consult all important software defects and metrics information for all your software projects. We provide the facts and figures, you take the decisions. +% (extraída de http://www.tiobe.com) +\begin{quote} +... is an indicator of the popularity of programming languages. The index is \bgreen{updated once a month}. The ratings are based on the \tblue{number of skilled engineers} world-wide, \tblue{courses} and \tblue{third party vendors}. The \tblue{popular search engines} Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings. +\end{quote} +% Ou seja, o índice da TIOBE já adota diferentes perspectivas, o que é uma coisa boa. Apesar disso, apresenta uma limitação importante. +% Note que nada do que é dito acima menciona diretamente código escrito nas linguagens ou número de repositórios ou projetos que usam certas linguagens. Ou seja, a avaliação de popularidade é feita muito mais com base em quem conhece a linguagem do que em quem de fato a emprega na construção de programas. +\end{itemize} +\end{frame} + +\begin{frame} +De acordo com a TIOBE, o ranking em maio/2013 era este: +\hspace*{2cm}\includegraphics[scale=0.32]{tiobe_pop.jpg} +% Esse ranking faz sentido. Java, C, C++, Objective-C e PHP são, de fato, muito populares. JavaScript, Python, Perl e Visual Basic também. +% Claro que não é um ranking perfeito, conforme discutido a seguir. +\end{frame} + +\begin{frame} +De acordo com a TIOBE, o ranking em maio/2013 era este: +\hspace*{2cm}\includegraphics[scale=0.32]{tiobe_pop2.jpg} +% Essas linguagens destacadas em vermelho (PL/SQL, Transact-SQL, LISP) são mais usadas do que Assembly. LISP é mais usada que BASH? Difícil de acreditar nisso. +% Perl é mais usada que Ruby e JavaScript? É possível, mas estranho, já que Perl é uma linguagem de nicho (embora +% seja uma linguagem de nicho muito popular). +\end{frame} + + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Large{Relembrando:}\\[0.1cm] +{\small \begin{quote} +... is an indicator of the popularity of programming languages. The index is updated once a month. The ratings are based on the \bred{number of skilled engineers} world-wide, \bred{courses} and \bred{third party vendors}. The \tblue{popular search engines} Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings. +% Para aqueles que não se lembram das informações que o ranking da TIOBE captura... +\end{quote} +} +\end{center} +\pause +\begin{block}{} +\begin{center}\Large{Problema do ranking do índice da TIOBE:}\\[0.1cm] +\large{não menciona diretamente \tred{\textbf{código}} escrito nas linguagens ou \tred{\textbf{número de repositórios ou}} \tred{\textbf{projetos}} que as usam.} +\end{center} +\end{block} +\end{frame} + +\begin{frame} +\frametitle{Obtendo informações sobre código} +\begin{itemize} +\item Repositórios de software de código aberto (\textit{forges}) são um bom lugar para procurar\vspace{0.1cm} +\begin{itemize} +\item Os maiores incluem dezenas de milhares de projetos\vspace{0.1cm} +% Grande parte corresponde a software de alta qualidade, com milhares ou milhões de usuários. +\item E já fornecem algumas estatísticas\vspace{0.1cm} +\end{itemize} +\end{itemize} +\vspace{0.2cm} +Examinaremos os dados de dois desses repositórios:\\[0.2cm] +% Github e %SourceForge +~~~~~~~~~~~~~~~\includegraphics[scale=0.40]{sourceforge_logo.jpg}~e~\includegraphics[scale=0.40]{github_logo.png} +%Logo do SourceForge +%http://www.thehostingnews.com/wp-content/uploads/2011/02/Sourceforge-THN.jpg +%Logo do Github +%http://www.srombauts.fr/wp-content/uploads/github_logo.png +\end{frame} + +\begin{frame} +\frametitle{Dados do SourceForge} +\begin{columns} +\begin{column}[l]{5cm} +\hspace*{2cm}\includegraphics[scale=0.45]{sourceforge_pop.jpg} +\end{column} +\begin{column}[l]{4cm} +{\scriptsize +{\bf Entre parênteses}: número de projetos que declaram usar a linguagem} +\end{column} +\end{columns} +\end{frame} + +\begin{frame} +\frametitle{Dados do SourceForge} +\begin{columns} +\begin{column}[l]{5cm} +\hspace*{2cm}\includegraphics[scale=0.45]{sourceforge_pop.jpg} +\end{column} +\begin{column}[l]{4cm} +{\scriptsize +{\bf Entre parênteses}: número de projetos que declaram usar a linguagem}\\[0.3cm] +{\scriptsize +\bred{Objective-C} aparece no Top 10 da TIOBE mas {\bf não aqui}} +\end{column} +\end{columns} +\end{frame} + + +\begin{frame} +\frametitle{Dados do Github} +\includegraphics[scale=0.40]{github_pop.jpg} +\\ +{\scriptsize +Os {\bf números} correspondem à percentagem do código no Github (em LoC) escrito em cada linguagem.} +\end{frame} + + +\begin{frame} +\frametitle{Dados do Github} +\includegraphics[scale=0.40]{github_pop2.jpg} +\\ +{\scriptsize +{\bf \tred{Entre parênteses}:} posição no ranking do SourceForge.} +% Um ano atrás Ruby nem aparecia no ranking do SourceForge. +\end{frame} + + +\begin{frame} +\frametitle{E sobre quais os programadores estão falando?} +\begin{columns} +\begin{column}[l]{5cm} +Tags do {\tt StackOverflow.com} em maio/2013:\vspace{0.2cm} +{\scriptsize +\begin{enumerate} +\item C\# (462080) +\item Java (419524) % Se incluirmos Android (333260), o número sobe para 752784 +\item PHP (389923) +\item JavaScript (377794) % Se incluirmos JQuery (313884) e AJAX (62256), o número sobre para 753934, colocando JavaScript na primeira posição! +\item C++ (201177) +\item Python (188695) % Incluindo o Django (51697), o número sobe para 240392 +\item Objective-C (134764) % Se Incluirmos ios (146927) e iphone (173252), o número sobre para 454943 +\item SQL (133431) +\item C (95882) +\item Ruby (73002) % Incluindo o Ruby-On-Rails (115491) e Ruby-On-Rails-3 (43404), o número sobre para 162223 (ficando acima de C++ e Python) +\item VB.NET (46868) +\end{enumerate}} +\end{column} +\begin{column}[l]{4cm} +{\scriptsize +{\bf Entre parênteses}: número de posts com aquela tag +} +\\[0.3cm] +\pause +\begin{block}{} +{\scriptsize +Se levarmos JQuery, AJAX, Django e Rails em conta: +\begin{enumerate} +\item[1] JavaScript (\tred{753934}) +\item[5] Ruby (\tred{162223}) +\item[6] Python (\tred{240392}) +\end{enumerate} +} +\end{block} +\vspace{0.3cm} +\pause +\begin{block}{} +{\scriptsize +Se incluirmos Android (Java) e iPhone e iOS (Objective-C): +\begin{enumerate} +\item[2] Java (\tred{752784}) +\item[4] Objective-C (\tred{454943}) +\end{enumerate} +} +\end{block} +% Isso poderia ser feito com outras tecnologias, como .NET. O problema é que .NET tem a ver com várias linguagens. +\end{column} +\end{columns} +\end{frame} + + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{Complementarmente: Ohloh.net} +% Sobre o Ohloh.net: +% Ohloh is a free, public directory of Free and Open Source Software and the contributors who create and maintain it. Ohloh Code is a publicly available, free code search site that indexes most of the projects in Ohloh. +% End.: http://www.ohloh.net +\\[0.4cm] +\Large{http://www.ohloh.net/languages/compare} +\\[0.4cm] +Permite comparação em termos de diferentes critérios +\end{center} +\end{frame} + +\begin{frame} + \frametitle{Top 10 a partir de diversas fontes} + \begin{figure} + \includegraphics[scale=0.4]{lang_pop.jpg}\\ + % Pela figura, dá para ver, por exemplo, que muita gente trabalhar com Objective-C, mas muito desse esforço não visa a construção + % de software de código aberto. + \end{figure} + \pause +\begin{block}{} +\textbf{Importante}: não representam a indústria \tred{\textbf{como um todo}}. +\end{block} +% Java, C, C++, JavaScript, Python e PHP definitivamente sõa muito populares. +% Essas não foram as únicas fontes que consultei. Olhei também http://spectrum.ieee.org/at-work/tech-careers/the-top-10-programming-languages/ e outros endereços mencionados acima. Os resultados batem surpreendentemente bem. +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{\textbf{Parte 2}}\\[0.3cm] +\Large{Se você quisesse aprender cinco linguagens para o futuro, quais deveriam ser?} +\end{center} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{Exercício mental: pense numa lista com cinco linguagens com resposta à pergunta}\\[0.5cm] +\pause +\Large{Que critérios lhe levaram a pensar nessa lista?} +\end{center} +\end{frame} + +\begin{frame} +\frametitle{Meus critérios} +\begin{block}{Nada de linguagens ``acadêmicas''} +Não devem servir apenas como prova de conceito para uma ideia +\end{block}\vspace{0.3cm} +\pause +\begin{block}{Linguagens que forneçam \tred{lições amplas}} +\begin{itemize} +\item linguagens que se possa empregar diretamente +\item e linguagens que ajudem a usar melhor outras linguagens +\end{itemize} +\end{block} +\pause +\begin{center} +\Large{Linguagens de programação para você \bred{\textbf{aprender}}} +\end{center} +\end{frame} + +% Opinião pessoal e com contextos específicos. Não estou dizendo que é o melhor conjunto de linguagens e provavelmente cada programador da audiência não apenas proporia uma lista diferente, mas proporia uma lista baseada em critérios diferentes. A ideia é fornecer uma visão abrangente sobre tópicos importantes tanto para quem já programa quanto para uma pessoa que queira começar a programar. Adicionalmente, não afirmo que essas são linguagens que todo mundo deve saber, mas são todas linguagens que expandem sua percepção sobre o desenvolvimento de sistemas com determinadas características. Conhecê-las, mesmo que você nunca venha a programar profissionalmente em nenhuma delas, certamente lhe tornará um desenvolvedor melhor. + +\begin{frame} +\frametitle{Meus critérios} +\begin{block}{Levando em conta certos nichos de aplicação e cenários de uso} +\begin{enumerate} +\item Primeira linguagem de programação para aprender +\item Linguagem Pós-Java +\item Programação multi-núcleo e sistemas confiáveis +\item Desenvolvimento para a Web +\item Software de baixo nível e de alto desempenho +\end{enumerate} +\end{block} +\end{frame} + + + + + + + + +%----------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{1. Primeira Linguagem de Programação para Aprender} +\end{center} +\end{frame} + +% Todos os programas Hello World foram obtidos a partir de http://www.roesler-ac.de/wolfram/hello.htm +\begin{frame} +\frametitle{Olá, Mundo!} +\begin{columns} +\begin{column}[l]{5.5cm} +{\scriptsize +\begin{block}{} +% Java +class HelloWorld \{\\ +~~static public void main( String args[] ) \{\\ +~~~~System.out.println("Hello World!");\\ +~~\}\\ +\} +\end{block} +\begin{block}{} +% C +\#include $<$stdio.h$>$\\[0.2cm] +int main(void) \{\\ +~~puts("Hello World!");\\ +\} +\end{block} +\begin{block}{} +% BASIC +10 PRINT "Hello World!" +\end{block} +} +\end{column} +\begin{column}[l]{5.5cm} +{\scriptsize +\begin{block}{} +% LISP +(defun helloworld ()\\ +~~(print "Hello World!")\\ +) +\end{block} +\begin{block}{} +% Python +print "Hello World!" +\end{block} +\begin{block}{} +% Go +package main\\ +import "fmt"\\ +func main() \{\\ +~~fmt.Printf("Hello World!")\\ +\} +\end{block} +} +\end{column} +\end{columns} +\end{frame} + +\begin{frame} +\frametitle{Linguagem 1} \pause +\includegraphics[scale=0.40]{python_logo.png}\\[0.4cm] +\pause +\begin{block}{Porquês} +\begin{itemize} +\item Sintaxe amigável +\item Dinamicamente tipificada +% Menos overhead para programadores novatos +\item Multiparadigma +% Dá para estudar tanto construções básicas quanto paradigmas mais específicos, como OO e funcional, usando Python. +\item Muito popular na prática +\item Usada como primeira linguagem em vários cursos de computação +% Tanto no Brasil quanto fora dele! +\end{itemize} +\end{block} +\end{frame} + +\begin{frame} +\frametitle{Alternativas} +% Todas essas linguagens têm Hello Worlds de uma linha, têm sintaxe amigável (Ruby um pouco menos, talvez), +% são dinamicamente tipificadas e multiparadigma. Groovy ainda não é muito popular e Lua, apesar de popular, +% é uma linguagem com nicho específico. Ruby tem todas essas características e, ainda por cima, é popular. +% O problema, neste caso, é que, provavelmente devido às influências de Perl, Smalltalk e LISP em seu projeto, +% a sintaxe de Ruby é um pouco menos intuitiva (isso é subjetivo, mas parece ser a opinião de muitos programadores) +% e ela permite mais dinamismo do que Python, o que pode ser útil, mas atrapalha mais do que ajuda um programador +% novato. Por fim, nenhuma dessas três costuma ser usada como primeira linguagem em cursos universitários. +\includegraphics[scale=0.27]{lua_logo.png} \hspace{0.9cm} +\includegraphics[scale=0.69]{groovy_logo.png} \hspace{0.9cm} +\includegraphics[scale=0.90]{ruby_logo.png} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{2. Linguagem Pós-Java} +\end{center} +\end{frame} + +\begin{frame} +\frametitle{Java é Pop} +\begin{center} +\includegraphics[scale=0.33]{java_pop.jpg} +\end{center} +\begin{block}{} +\begin{itemize} +\item Mais de 51.000 projetos no SourceForge +\item Busca por ``Java'' no Github: 49.999 repositórios % Em 17/05/2013 +\item Quase 420.000 tags no StackOverflow.com +\item Linguagem com mais commits em 2012-2013 (Ohloh.net) +\end{itemize} +\end{block} +\end{frame} + +\begin{frame} +\frametitle{Mas envelheceu mal!} +\begin{columns} +\begin{column}[c]{5cm} +% Java, a linguagem, é como o Marlon Brando. Quando jovem, era bonita e a dona do mundo. Quando envelheceu, +% apesar de ter continuado popular, em grande parte por causa de glórias do passado, ficou letárgica e inchada. +% Já do lado do Marlon Brando, The Godfather, Apocalypse Now e Um Bonde Chamado Desejo continuam sendo clássicos. +% Ele, porém, no fim da vida, já não dava mais muito pano para a manga. +% Parte dos problemas de Java têm mais a ver com a velocidade com que outras linguagens apareceram/evoluíram +% do que com problemas inerentes à linguagem Java. Essas linguagens incluem diversas características que Java não +% tem e que os programadores gostariam que ela tivesse. Têm a ver também com o processo de evolução da +% linguagem, guiado pela comunidade. +\includegraphics[scale=0.4]{mb_young.jpg} +\end{column}\pause +\begin{column}[c]{5cm} +\includegraphics[scale=0.35]{mb_old.jpg} +\end{column} +\end{columns} + +\end{frame} + + +\begin{frame} +\frametitle{Males da idade} +% http://www.ibm.com/developerworks/java/library/j-cobol/index.html +% Artigo muito bom sobre porque Java NÃO ESTÁ morrendo. Um dos pontos que mais me chamou a atenção no +% artigo é justamente o autor falar isso: "The Java programming language. Frankly, this is the part of +% the platform that most shows its age, particularly when compared against more "modern" languages +% like C#, Groovy, (j)Ruby, or Scala." +\begin{columns} +\begin{column}[c]{5cm} +% Java é como o Marlon Brando. Quando jovem, era bonita e a dona do mundo. Quando envelheceu, apesar de ter +% continuado popular, em grande parte por causa de glórias do passado, ficou letárgica e inchada. +% Parte dos problemas de Java têm mais a ver com a velocidade com que outras linguagens apareceram/evoluíram +% do que com problemas inerentes à linguagem Java. Têm a ver também com o processo de evolução da +% linguagem. +\includegraphics[scale=1]{old_person.jpg} +% Fonte: http://2.bp.blogspot.com/_kxEJZQp4yUc/TN4wdGb1bsI/AAAAAAAAB0o/Xv4CNdhcnNE/s1600/Old-Person.jpg +\\[0.2cm] +\pause +\begin{block}{Evolução burocrática} +\begin{itemize} +\item \tred{4,5 anos} entre as versões 6 e 7 +\item E as coisas mais legais ficaram para a v8.0. +% Lambdas, funções de alta ordem e coleções paralelas +\end{itemize} +\end{block} +\end{column} +\pause +\begin{column}[l]{5cm} +\begin{block}{Além disso...} +\begin{itemize} +\item Java ficou mais \tred{complexa}\vspace{0.1cm}\pause +\\ +Isso se reflete em sua especificação:{\small +\\ +~~~~1a ed.: 539 págs. %(na verdade são 852, só que 313 apresentam informações que não são incluídas nas versões subsequentes). +\\ +~~~~2a ed.: 544 págs. +\\ +~~~~3a ed.: 688 págs. +\\ +~~~~4a ed.: \textbf{928 págs}.!} +\item Mas ainda não oferece funcionalidades requisitadas por muitos! +% Muitos hoje utilizam linguagens mais simples, como Python e Ruby, para responver problemas que dez ou doze anos atrás eram resolvidos utilizando-se Java. +\end{itemize} +\end{block} +\end{column} +\end{columns} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\Large{\bgreen{Prós de Java:}} +\begin{itemize} +\item \large{Existe código Java para fazer praticamente qualquer coisa} +\vspace{0.2cm} +\item \large{A JVM é uma VM sofisticada} +\begin{itemize} +\item E há implementações dela para diversas arquiteturas e SOs +\end{itemize} +\end{itemize} +\vspace{0.5cm} +\Large{\bred{Contras de Java:}} +\begin{itemize} +\item \large{A linguagem} +\end{itemize} + +\end{frame} + + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Large{Em poucas palavras:}\\[0.2cm] +\Huge{Abandona-se a \bred{linguagem Java} mas mantém-se a \bgreen{plataforma Java}.} +\end{center} +\end{frame} + + +%\begin{frame} +%\begin{center} +%\includegraphics[scale=0.32]{legend_of_zelda_movie.jpg} +%% Fonte: http://www.ign.com/videos/2008/04/01/link-stars-trailer-legend-of-zelda-movie-trailer-debut-hd +%% Brincadeira de 1o de abril da IGN. Essas brincadeiras frequentemente mexem com coisas que muitas pessoas +%% queriam que acontecessem mas não aconteceram ainda (e talvez nunca aconteçam). +%\end{center} +%\end{frame} + +\begin{frame} +\begin{center} +\includegraphics[scale=0.35]{java_deprecated.jpg} +% Fonte: http://www.infoq.com/news/2010/04/scala-q +% Brincadeira de 1o de abril da InfoQ em 2010 +\end{center} +\end{frame} + +\begin{frame} +\frametitle{Linguagem 2} +\includegraphics[scale=0.38]{scala_logo.png}\\[0.4cm] +\begin{block}{Porquês} +\begin{itemize} +\item Compatibilidade retroativa com Java: \textbf{roda na JVM} \vspace{0.1cm} +\item Menos verborrágica \vspace{0.1cm} +\begin{itemize} +\item Inclui \textbf{inferência de tipos}!\vspace{0.1cm} +\end{itemize} +\item Imperativa, OO, funcional e concorrente.\vspace{0.1cm} +\pause +\item Principais funcionalidades de Java 8 \textbf{já estão em Scala} +% Uma comparação detalhada entre Java e Scala está disponível em http://www.infoq.com/articles/java-8-vs-scala +\begin{itemize} +\item Desde as primeiras versões! +\item E Scala implementa outras que Java nem vislumbra\vspace{0.1cm} +% Isso significa que não é necessário inventar gambiarras para integrar essas funcionalidades. +\end{itemize} +\item Sony, Twitter, LinkedIn e Siemens, entre outras, já usam! +\end{itemize} +\end{block} + +\end{frame} + +\begin{frame} +\frametitle{Alternativas} +\begin{center} +% As duas são baseadas na JVM e têm alguns usuários. Diferem fundamentalmente de Scala, porém, porque esta última é +% estaticamente tipificada. Além disso, sua base de usuários é maior. Clojure seria uma boa candidata, já que fornece +% bom suporte para computação multicore, mas a sintaxe baseada em LISP pode ser um ponto negativo para muitos. +\includegraphics[scale=0.27]{clojure_logo} \hspace{0.9cm} +\includegraphics[scale=0.69]{groovy_logo.png} +\end{center} +\end{frame} + + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{3. Programação Multi-Núcleo e Sistemas Confiáveis} +\end{center} +\end{frame} + +\begin{frame} +\begin{center} +\includegraphics[scale=0.52]{multicore.jpg} +\end{center} +\end{frame} + +\begin{frame} +\begin{center} +\Huge{Multi-núcleo $\Rightarrow$ \\concorrência e paralelismo} +\end{center} +\end{frame} +% +%\begin{frame} +%\begin{center} +%\includegraphics[scale=0.52]{contador.jpg} +%\end{center} +%\end{frame} +% +%\begin{frame} +%\begin{center} +%\includegraphics[scale=0.52]{contador2.jpg} +%% Neste exemplo, se supusermos que o valor inicial de v é zero, ela pode terminar +%% com qualquer valor entre -1 e 1. +%\end{center} +%\end{frame} + +\begin{frame} +\frametitle{Problemas oriundos de programação multi-núcleo} +\begin{itemize} +\item Condições de corrida \vspace{0.2cm} +\item Falhas de atomicidade \vspace{0.2cm} +\item Deadlocks, livelocks, starvation \vspace{0.2cm} +\item Morte prematura de threads \vspace{0.2cm} +\item Custo de criação e chaveamento entre threads\vspace{0.5cm} +%\begin{block}{} +%Tornam-se mais graves ainda em um cenário distribuído +%\end{block} +\end{itemize} +\end{frame} + +\begin{frame} +\begin{block}{Três causas fundamentais} +\begin{itemize} +\item \tred{\textbf{Estado compartilhado mutável}} é a raiz de quase todos os males.\vspace{0.3cm} +\item \tred{\textbf{Falta}} de mecanismos para \tred{\textbf{tratamento de erros}} em cenários concorrentes e distribuídos.\vspace{0.3cm} +\item Emprego de \tred{\textbf{threads do sistema operacional}} como unidades de quebra de trabalho.\vspace{0.3cm} +\end{itemize} +\end{block} +\end{frame} + + +\begin{frame} +\frametitle{Linguagem 3} \pause +\includegraphics[scale=0.20]{erlang_logo.png}\\[0.4cm] +\pause +\begin{block}{Porquês} +\begin{itemize} +\item \textbf{Filosofia \textit{Let It Crash}} +\item Puramente funcional e sem estado compartilhado +\item Processos leves -- unidades finas de quebra de trabalho +\item Concorrência e distribuição são \textbf{inerentes} à linguagem +\begin{itemize} +\item É impossível construir sistemas não-triviais ignorando isso +% O maior mérito de Erlang, IMHO, não é o que ela PODE fazer, mas o que ela lhe OBRIGA a fazer. Muda sua forma de ver o desenvolvimento. +\end{itemize} +\end{itemize} +\end{block} +\end{frame} + +\begin{frame} +\frametitle{Alternativas} +\begin{center} +\Huge{Nenhuma.} +\end{center} +\end{frame} + + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{4. Desenvolvimento para a Web} +\end{center} +\end{frame} + +\begin{frame} +\begin{center} +\Huge{Qual o atual \bgreen{estado da prática} de desenvolvimento para a Web?}\\[0.3cm] +\large{(de acordo com a Wikipédia)} +\end{center} +\end{frame} + +\begin{frame} +\begin{center} +\large{{\bf Lado servidor}: ASP, CSP, Server-Side ANSI C, ColdFusion, CGI, Groovy, Grails, Java, Lotus Domino, Perl, PHP, Python (Django), Real Studio Web Edition, Ruby (Rails), Server-Side JavaScript, Mozilla Rhino, Websphere, .NET, (...)} +\\[0.5cm] +\large{{\bf Lado cliente}: \tred{Ajax}, Flash, \tred{JavaScript}, \tred{jQuery}, Silverlight, \tred{HTML5}} +% Todos os itens do lado cliente que aparecem em vermelho são baseados em JavaScript. +% A página também tem uma seção de Client Side + Server Side, mas a maioria das tecnologias baseia-se em JavaScript. Achei covardia incluir aqui. +\end{center} +\end{frame} + + +\begin{frame} +\frametitle{JavaScript é um padrão de fato, mas...} +\begin{itemize} +\item $[]$ + $[]$ = \pause +string vazio!\vspace{0.2cm} +\item $[]$ + \{\} = \pause +$[$object Object$]$?!\vspace{0.2cm} % Isso é um objeto, não uma lista. +\item \{\} + $[]$ = \pause +0!!!\vspace{0.2cm} +\item \{\} + \{\} = \pause +NaN! \vspace{0.2cm}% Faz sentido, mas não faz. +\item \{\} - \{\} = \pause +NaN! \vspace{0.2cm}% Faz sentido, mas não faz. +\item \{\} * \{\} = \pause +syntax error! \vspace{0.2cm}% Faz sentido, mas não faz. +\item Array(16) + 5 = \pause +,,,,,,,,,,,,,,,5\vspace{0.2cm} +\item Array(16) - 5 = \pause +NaN!\vspace{0.2cm} +% Os quatro primeiros exemplos foram retirados do vídeo "WAT" de Gary Bernhardt (http://www.youtube.com/watch?v=kXEgk1Hdze0). +% É uma das coisas mais engraçadas que já vi. +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{E o escopo de variáveis?} +\Large{\textit{``Javascript programmers are practically ranked by how well they understand scope.''}}\\[0.1cm] +~~~~~~~~~~~~~~{\scriptsize http://stackoverflow.com/questions/500431/javascript-variable-scope}\vspace{0.3cm} +\begin{itemize} +%\item Escopos globais e baseados em funções \vspace{0.2cm} +%\item Blocos \tred{não} definem escopos locais \vspace{0.2cm} % há implementações de JavaScript que permitem isso. +%\item \textit{Closures} dependem de escopo léxico \vspace{0.2cm} +\item Cuidado com o significado de \tred{\texttt{this}}! +\end{itemize} +%\pause +%\begin{block}{} +%Fora o \textbf{alto grau de dinamismo} da linguagem +%\end{block} +\end{frame} + +\begin{frame} +\frametitle{Linguagem 4} \pause +\includegraphics[scale=0.40]{dart_logo.jpg}\\[0.4cm] +\pause +\begin{block}{Porquês} +\begin{itemize} +\item Menos caos +\begin{itemize} +\item sem protótipos, objeto global ou atributos adicionados dinamicamente +\end{itemize} +\item Possibilidade de usar \tred{anotações de tipo} +\item Escopos intuitivos, baseados em blocos +% Como em Java, C, C++, C\#, Lua, Go, Pascal e muitas outras +% Python não tem, mas Python não tem blocos. JavaScript tem mas eles não definem escopos! +\item Compilável para JavaScript +\item Desenvolvida pelo Google +% Uma empresa que teve um papel fundamental na popularização de JavaScript, graças à máquina virtual V8. +\end{itemize} +\end{block} +\end{frame} + +\begin{frame} +\frametitle{Alternativas} +% Do FAQ de Dart (http://www.dartlang.org/support/faq.html#compare-to-javascript): +% Both Dart and CoffeeScript are inspired by JavaScript, and both can be translated back to it. They make different choices, particularly in the flavor of their syntax. As a language we think it's fair to say that Dart differs semantically from JavaScript more than CoffeeScript does; that may result in a less line-for-line translation, but we believe Dart-generated JavaScript can have excellent size and speed. +% +%If you like CoffeeScript for its more structured feel than raw JavaScript, you may like Dart's optional type checking. +\begin{center} +\includegraphics[scale=0.27]{clojure_logo} \hspace{0.9cm} +% https://github.com/clojure/clojurescript +% ClojureScript is a basically a variant of Clojure that can be compiled directly to JavaScript, instead of JVM source code. +% A number of features of Clojure are not available in ClojureScript (such as STM). Moreover, the matter of which libraries are +% available is slightly confusing. +\includegraphics[scale=0.27]{coffeescript_logo.jpg} \hspace{0.9cm} +\\[0.3cm] +\includegraphics[scale=0.35]{typescript.jpg} \hspace{0.9cm} + +\end{center} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{5. Software de Baixo Nível e de Alto Desempenho} +\end{center} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{Que linguagem você acha que seria boa para construir um \textit{shooter} 3d?} +\end{center} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{E um escalonador de processos?} +\end{center} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\Huge{Um programa para processar imagens de satélites?} +\end{center} +\end{frame} +\begin{frame} + +\vspace{0.2cm} +\begin{center} +\Huge{E um driver de dispositivo?} +\end{center} +\end{frame} + + +\begin{frame} +\frametitle{Sendo um pouco mais focado} +\begin{block}{Tem algo que nenhuma linguagem discutida anteriormente lhe dá} +\textbf{Controle} sobre a máquina +\end{block}\pause +\begin{block}{Que linguagem usar se eu quiser...} +\begin{itemize} +\item ter acesso direto à memória RAM +\begin{itemize} +\item inclusive para gerenciar memória manualmente +\end{itemize} +\item guardar valores de variáveis explicitamente em registradores +\begin{itemize} +\item em alguns casos, especificando o registrador +\end{itemize} +\item produzir código extremamente eficiente +\item e fazer isso tudo podendo de forma portável? +\end{itemize} +\end{block} +\end{frame} + +\begin{frame} +\frametitle{Linguagem 5} \pause +\begin{columns} +\begin{column}[l]{3.9cm} +\includegraphics[scale=0.60]{c_logo.jpg}\\[0.1cm]\pause +\includegraphics[scale=0.40]{c_logo2.jpg}\\[0.4cm] +\end{column} +\begin{column}[l]{6.1cm} +\pause +\begin{block}{Porquês} +\begin{itemize} +\item Porque permite \textbf{tudo mencionado no slide anterior}\vspace{0.2cm} +\item Porque é muito \tred{menos complexa} que C++\vspace{0.2cm} +\item Porque Assembly só é uma opção quando é a \tred{única opção} +\end{itemize} +\end{block} +\end{column} +\end{columns} +\end{frame} + +\begin{frame} +\frametitle{Mas há outras razões para aprender C} + +\begin{block}{\tred{\textbf{Outros}} porquês} +\begin{itemize} +\item Gerenciamento de memória manual\vspace{0.2cm} +\item Tipificação fraca\vspace{0.2cm} +\item Manipulação de ponteiros é +\begin{itemize} +\item fundamental mesmo para as operações mais básicas +\item complexa +\item insegura \vspace{0.2cm} +% tipos não são checados e diversas operações corriqueiras podem produzir comportamento indefinido, de acordo +% com a especificação da linguagem. +\end{itemize} +\item ausência de suporte decente a programação paralela +% pthreads só viraram parte do padrão em 2011!!! +\end{itemize} +\end{block} +\end{frame} + +\begin{frame} +\vspace{0.2cm} +\begin{center} +\large{\textbf{Resumindo}: é importante aprender C porque:}\vspace{0.4cm}\pause +\end{center} +\Large{ +\begin{itemize} +\item É uma linguagem \bgreen{muito usada na prática}\vspace{0.4cm}\pause +\item Para vários tipos de aplicação é uma \bgreen{excelente ferramenta}\vspace{0.4cm}\pause +\item As \bred{características negativas} da linguagem fornecem lições importantes +\end{itemize} +} +\end{frame} + +\begin{frame} +\frametitle{Alternativas} +\begin{center} +\includegraphics[scale=0.55]{d_logo.png} \hspace{0.7cm} +\includegraphics[scale=0.3]{go_logo.jpg} \hspace{0.6cm} +\includegraphics[scale=0.3]{rust_logo.png} \hspace{0.9cm} +\\[1cm] +\Large{E sempre haverá \textbf{C++}, claro. E Assembly.} +\end{center} +\end{frame} + +\begin{frame} +\vspace{0.2cm} + +\begin{center} +\includegraphics[scale=0.14]{flame_war.jpg} \\[0.2cm] +\pause +\Large{Obrigado!} +\begin{block}{} +\begin{center} +{\small \textbf{Contato}: castor arroba cin.ufpe.br\\[0.1cm] +\textbf{Slides}: http://github.com/fernandocastor\\[0.1cm] +\textbf{Vídeo}: http://www.youtube.com/watch?v=MsWmSCCVj5Y\\[0.1cm] +({\footnotesize Busca no YouTube ou Google: \textbf{cpre1 linguagens}})\\ +} +\end{center} +\end{block} +\end{center} +\end{frame} + + + +%\begin{frame} +%\vspace{0.2cm} +%\begin{center} +%\Huge{Anexo:}\\[0.3cm] +%\Huge{Alguns dados extraídos de Ohloh.net} +%\end{center} +%\end{frame} +% +%%Dados do Ohloh.net sobre atividade de commits obtidos usando a seguinte string de busca: +%% https://www.ohloh.net/languages/compare?measure=commits&percent=true&l0=objective_c&l1=c&l2=csharp&l3=cpp&l4=java&l5=javascript&l6=perl&l7=php&l8=python&l9=ruby&l10=shell&l11=sql&l12=-1&commit=Update +% +%%Dados do Ohloh.net sobre número de projetos obtidos usando a seguinte string de busca: +%% https://www.ohloh.net/languages/compare?commit=Update&l0=objective_c&l10=shell&l11=sql&l12=-1&l1=c&l2=csharp&l3=cpp&l4=java&l5=javascript&l6=perl&l7=php&l8=python&l9=ruby&measure=projects&percent=true +%% A caption é a mesma da primeira figura. +% +%%Dados do Ohloh.net sobre número de pessoas que contribuíram pelo menos uma linha de código em cada linguagem obtidos usando a seguinte string de busca: +%%https://www.ohloh.net/languages/compare?commit=Update&l0=objective_c&l10=shell&l11=sql&l12=-1&l1=c&l2=csharp&l3=cpp&l4=java&l5=javascript&l6=perl&l7=php&l8=python&l9=ruby&measure=contributors&percent=true +%% A caption é a mesma da primeira figura. + +%\begin{frame} +%\frametitle{Percentagem dos commits em cada linguagem} +%\begin{columns} +%\begin{column}[l]{8.5cm} +% \includegraphics[scale=0.25]{ohloh.jpg}\\ +%\end{column} +%\begin{column}[l]{2cm} +% \includegraphics[scale=0.20]{ohloh_caption.jpg}\\ +%\end{column} +%\end{columns} +%\end{frame} +% +%\begin{frame} +%\frametitle{Percentagem dos projetos, por linguagem} +%\begin{columns} +%\begin{column}[l]{8.5cm} +% \includegraphics[scale=0.20]{ohloh_perproject.jpg}\\ +%\end{column} +%\begin{column}[l]{2cm} +% \includegraphics[scale=0.20]{ohloh_caption.jpg}\\ +%\end{column} +%\end{columns} +%\end{frame} +% +%\begin{frame} +%\frametitle{Percentagem dos contribuintes, por linguagem} +%% Considera apenas contribuintes que escreveram ao menos uma linha de código na linguagem +%\begin{columns} +%\begin{column}[l]{8.5cm} +% \includegraphics[scale=0.25]{ohloh_percontributor.jpg}\\ +%\end{column} +%\begin{column}[l]{2cm} +% \includegraphics[scale=0.20]{ohloh_caption.jpg}\\ +%\end{column} +%\end{columns} +%\end{frame} + + +\end{document} diff --git a/applet.png b/applet.png new file mode 100644 index 0000000..96abc8e Binary files /dev/null and b/applet.png differ diff --git a/bloomberg.jpg b/bloomberg.jpg new file mode 100644 index 0000000..bb5f33e Binary files /dev/null and b/bloomberg.jpg differ diff --git a/bloomberg.tiff b/bloomberg.tiff new file mode 100644 index 0000000..7071758 Binary files /dev/null and b/bloomberg.tiff differ diff --git a/codeplex.jpg b/codeplex.jpg index 971bb1e..ccce2b8 100644 Binary files a/codeplex.jpg and b/codeplex.jpg differ diff --git a/github_pop.jpg b/github_pop.jpg new file mode 100644 index 0000000..d00c9b7 Binary files /dev/null and b/github_pop.jpg differ diff --git a/github_pop.tiff b/github_pop.tiff new file mode 100644 index 0000000..9758a58 Binary files /dev/null and b/github_pop.tiff differ diff --git a/github_pop2.jpg b/github_pop2.jpg new file mode 100644 index 0000000..d8af851 Binary files /dev/null and b/github_pop2.jpg differ diff --git a/interactiveTV.jpg b/interactiveTV.jpg new file mode 100644 index 0000000..fbcd533 Binary files /dev/null and b/interactiveTV.jpg differ diff --git a/java_pop.jpg b/java_pop.jpg index 70db11f..180d9dd 100644 Binary files a/java_pop.jpg and b/java_pop.jpg differ diff --git a/lang_pop.jpg b/lang_pop.jpg index d4c0aee..a83b397 100644 Binary files a/lang_pop.jpg and b/lang_pop.jpg differ diff --git a/lang_pop.ods b/lang_pop.ods index 7239012..10a9255 100644 Binary files a/lang_pop.ods and b/lang_pop.ods differ diff --git a/sourceforge.jpg b/sourceforge.jpg index fa01437..c07a4f1 100644 Binary files a/sourceforge.jpg and b/sourceforge.jpg differ diff --git a/sourceforge.tiff b/sourceforge.tiff new file mode 100644 index 0000000..b8174bf Binary files /dev/null and b/sourceforge.tiff differ diff --git a/sourceforge_pop.jpg b/sourceforge_pop.jpg new file mode 100644 index 0000000..3b09f25 Binary files /dev/null and b/sourceforge_pop.jpg differ diff --git a/symantec.jpg b/symantec.jpg new file mode 100644 index 0000000..c5d443c Binary files /dev/null and b/symantec.jpg differ diff --git a/symantec.tiff b/symantec.tiff new file mode 100644 index 0000000..8bccb3e Binary files /dev/null and b/symantec.tiff differ diff --git a/tiobe_pop.jpg b/tiobe_pop.jpg new file mode 100644 index 0000000..263e5bb Binary files /dev/null and b/tiobe_pop.jpg differ diff --git a/tiobe_pop.tiff b/tiobe_pop.tiff new file mode 100644 index 0000000..2053af6 Binary files /dev/null and b/tiobe_pop.tiff differ diff --git a/tiobe_pop2.jpg b/tiobe_pop2.jpg new file mode 100644 index 0000000..3fab367 Binary files /dev/null and b/tiobe_pop2.jpg differ diff --git a/typescript.jpg b/typescript.jpg new file mode 100644 index 0000000..59d207d Binary files /dev/null and b/typescript.jpg differ