-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path5linguagens.tex
1394 lines (1246 loc) · 46.1 KB
/
5linguagens.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
% 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 COPYRIGHTS 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{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} -- <SPACE>\\
%\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} -- <SPACE>\\
%\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}{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}{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}
\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}}
\\
\vcenteredhbox{~$\Downarrow$~}
\\
\vcenteredhbox{\includegraphics[scale=0.13]{pixel.png}}
\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 22 de março de 2017, há 738 ``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}
\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 [...] 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 [...] are used to calculate the ratings. [...] TIOBE index is not about [...] the language in which \tblue{most lines of code have been written}.
\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 março de 2017 era este:
\includegraphics[scale=0.29]{tiobe_languages.png}
\end{frame}
\begin{frame}
De acordo com a TIOBE, o ranking em março de 2017 era este:
\includegraphics[scale=0.29]{tiobe_languages2.png}
% Perl é mais usada que Ruby e JavaScript e Objective-C? C e Python mais usadas que Javascript? Assembly mais usada que Objective-C?
\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 [...] based on the \bred{number of skilled engineers} world-wide, \bred{courses} and \bred{third party vendors}. The \bred{popular search engines} Google, Bing, Yahoo!, Wikipedia [...] are used to calculate the ratings. [...] TIOBE index is \tred{not} about [...] the language in which \tred{most lines of code have been written}.
\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})\vspace{0.2cm}
\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 (de 10/2015)}
\begin{columns}
\begin{column}{5cm}
\hspace*{2cm}\includegraphics[scale=0.4]{sourceforge_languages.png}
%http://sourceforge.net/directory/
\end{column}
\begin{column}{4cm}
{\scriptsize
{\bf Entre parênteses}: número de projetos que declaram usar a linguagem}
\pause
\vspace*{0.2cm}
{\scriptsize
\tred{R, Perl e Swift} aparecem no Top 15 da TIOBE mas {\bf não aqui}}
% As linguagens que aparecem no SourceForge deixam muito claro que essa lista está desatualizada.
% O SourceForge caiu muito em popularidade depois do aparecimento do Github.
\end{column}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Dados do Github (10/2015)}
\includegraphics[scale=0.35]{github_languages.png}
%https://github.com/blog/2047-language-trends-on-github
%Dados obtidos via https://github.com/github/linguist. Correspondem ao número de bytes escritos em cada linguagem.
\end{frame}
\begin{frame}
\frametitle{E sobre quais os programadores estão falando?}
\begin{columns}
\begin{column}{5cm}
Tags do {\tt StackOverflow.com} em março/2017:\vspace{0.2cm}
{\scriptsize
\begin{enumerate}
\item JavaScript (1347902)
\item Java (1229513)
\item C\# (1073182)
\item PHP (1052878)
\item Python (720882)
\item C++ (503932)
\item CSS (457529)
\item SQL (377801)
\item asp.net (312036)
\item Objective-C (274621)
\item Ruby (270146) % Número que refere-se a Ruby-on-rails.
\item C (245446)
\item R (175524)
\item Swift (140342)
\end{enumerate}}
\end{column}
\begin{column}{4cm}
{\scriptsize
{\bf Entre parênteses}: número de posts com aquela tag
}
\\[0.3cm]
\pause
\begin{block}{Isso não é tudo!}
{\scriptsize
% Por que não pegar os números de postagens relativos às tags abaixo e simplesmente somá-los aos
% números das linguagens correspondentes? Porque há uma sobreposição de tags: a maioria das postagens
% sobre JQuery também têm JavaScript como tag. Os números não seriam fidedignos. A única exceção
% que levamos em conta foi Ruby-On-Rails porque há mais postagens com essa tag do que com a tag Ruby.
JQuery, AJAX, Node.js, AngularJS $\Rightarrow$ \textbf{JavaScript} \\[0.3cm]
Django $\Rightarrow$ \textbf{Python} \\[0.3cm]
Rails $\Rightarrow$ \textbf{Ruby} \\[0.3cm]
Android $\Rightarrow$ \textbf{Java} \\[0.3cm]
iPhone, iOS, Xcode1 $\Rightarrow$ \textbf{Objective-C} e \textbf{Swift}.
}% Isso poderia ser feito com outras tecnologias, como .NET. O problema é que .NET tem a ver com várias linguagens.
\end{block}
\end{column}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{The RedMonk Programming Language Rankings (01/2017)}
\includegraphics[scale=0.23]{redmonk_languages.png}
% cruza dados do StackOverflow com dados do Github (número de projetos)
%https://redmonk.com/sogrady/category/programming-languages/
% Dados de janeiro de 2017
\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.26]{lang_pop.png}\\
% 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{Cinco linguagens de programação para que? Quais os critérios para escolhê-las?}\\[0.5cm]
\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 Desenvolvimento Móvel
\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}{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}{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. Desenvolvimento Móvel}
\end{center}
\end{frame}
\begin{frame}
\frametitle{Vendas de Smartphones no mundo}
\begin{center}
\includegraphics[scale=0.43]{smartphones.png}\\
{\tiny {\bf Fonte}: SmartphoneMarketResearch.com}
%http://www.smartphonemarketresearch.com/wp-content/uploads/2015/01/idcsmartphonesq42014.png
\end{center}
\end{frame}
\begin{frame}
\frametitle{Para Android: Java}
\begin{center}
\includegraphics[scale=0.22]{java_logo.png}
\\[0.4cm]
\pause
Também é possível usar JavaScript
\end{center}
\end{frame}
\begin{frame}
\frametitle{Mas...}
\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}
%% 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."
\end{frame}
\begin{frame}
\frametitle{Para iOS: Objective-C}
\begin{center}
\includegraphics[scale=0.35]{obj-c_logo.png}
\\[0.4cm]
\pause
Também é possível usar JavaScript$^2$
\end{center}
\end{frame}
\begin{frame}
\frametitle{Mas...}
\begin{columns}
\begin{column}[c]{5cm}
\includegraphics[scale=0.35]{sarney.jpg}
\end{column}
\hspace{0.8cm}
\begin{column}[c]{5cm}
% Enfatizar: ESTAMOS FALANDO DE OBJECTIVE-C
Objective-C...
\begin{itemize}
\pause
% FEIA
\item tem uma aparência desagradável
\pause
\item tem uma propensão a causar corrupção
\pause
\item está por aí há tempo demais {\footnotesize (alguns dizem que é \tred{imortal})}
% É um sintoma de outra época, quando o desenvolvimento de software era muito diferente do que ele é hoje.
\end{itemize}
\end{column}
\end{columns}
\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}{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.28]{swift_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{}
\begin{center}
\textit{The growth that Swift experienced is essentially unprecedented in the history of these rankings.}
\\[0.8cm]
{\footnotesize {\tt http://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/}}
\end{center}
\end{frame}
\begin{frame}