<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: rogeriosug</title>
    <description>The latest articles on DEV Community by rogeriosug (@sug).</description>
    <link>https://dev.to/sug</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F783831%2Fd8171c12-058d-4709-8170-4269770aebdb.png</url>
      <title>DEV Community: rogeriosug</title>
      <link>https://dev.to/sug</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sug"/>
    <language>en</language>
    <item>
      <title>Mainframe e Distribuída - parte 3 - Linguagens</title>
      <dc:creator>rogeriosug</dc:creator>
      <pubDate>Sun, 27 Aug 2023 03:31:14 +0000</pubDate>
      <link>https://dev.to/sug/mainframe-vs-distribuida-parte-iii-linguagens-4jib</link>
      <guid>https://dev.to/sug/mainframe-vs-distribuida-parte-iii-linguagens-4jib</guid>
      <description>&lt;p&gt;Esta publicação faz parte de uma série para mostrar que muitos dos conceitos de desenvolvimento mainframe também estão presentes na distribuída. Neste post falarei sobre linguagens de programação.&lt;/p&gt;




&lt;h2&gt;
  
  
  Linguagens de programação
&lt;/h2&gt;

&lt;p&gt;Quando se fala de linguagem de programação no mainframe, entre as mais populares temos &lt;code&gt;COBOL&lt;/code&gt;, &lt;code&gt;CICS&lt;/code&gt; e &lt;code&gt;DB2&lt;/code&gt;. Além de &lt;code&gt;PL/I&lt;/code&gt; &lt;code&gt;IMS/DC&lt;/code&gt;, &lt;code&gt;IMS/DB&lt;/code&gt;, &lt;code&gt;VSAM&lt;/code&gt;, &lt;code&gt;NATURAL&lt;/code&gt;, &lt;code&gt;ADABAS&lt;/code&gt;, e várias outras.&lt;/p&gt;

&lt;p&gt;Até mesmo &lt;code&gt;Java&lt;/code&gt;, &lt;code&gt;C&lt;/code&gt; e &lt;code&gt;C++&lt;/code&gt;, muito conhecidas na distribuída, também podem ser encontradas no mainframe.&lt;/p&gt;

&lt;p&gt;Vale lembrar um pouco da história da programação na alta plataforma (mainframe), os conceitos de linguagem e ciclo de desenvolvimento são universais.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cartão perfurado
&lt;/h3&gt;

&lt;p&gt;Já ouviu a expressão "programar em papel de pão"? O início do desenvolvimento de software no mainframe não estava muito longe disso, a programação era feita em cartões perfurados.&lt;/p&gt;

&lt;p&gt;Cada cartão perfurado representava uma linha de código. Caso fosse arquivo a ser processado, cada cartão representava uma linha deste arquivo.&lt;/p&gt;

&lt;p&gt;Cada cartão tinha um limite de 80 colunas.&lt;/p&gt;

&lt;p&gt;No momento de processar os cartões, eles precisavam estar ordenados. Imagina a bagunça se alguém mudasse a ordem dos cartões (por conta disso as linguagens continham colunas reservadas para identificar a posição do código).&lt;/p&gt;

&lt;p&gt;Por conta disso, os desenvolvedores na época precisavam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fazer códigos enxutos: códigos simples, organizados, de fácil manutenibilidade, com reaproveitamento de código. Assim, refletia em menos cartões, menos tempo de compilação, menos processamento e menor custo;&lt;/li&gt;
&lt;li&gt;codificar em uma quantidade limitada de colunas, por conta da limitação dos cartões, mas que de certa forma ajudava em um código mais legível;&lt;/li&gt;
&lt;li&gt;ter a consciência de que quanto mais complexo fosse o código, mais difícil seriam refatorações futuras e a inclusão de novas regras de negócio.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Coincidentemente, todos estes pontos adotados por conta de limitações da arquitetura da época, hoje são adotados no ciclo de desenvolvimento de software por motivos de boas práticas de programação e finops.&lt;/p&gt;

&lt;h3&gt;
  
  
  COBOL
&lt;/h3&gt;

&lt;p&gt;Uma das linguagens mais utilizadas no mainframe é o COBOL. O COBOL é uma linguagem estruturada em &lt;strong&gt;DIVISION&lt;/strong&gt;s, &lt;strong&gt;SECTION&lt;/strong&gt;s e &lt;strong&gt;PARAGRAPH&lt;/strong&gt;s. Este formato de estrutura facilita muito a localização de partes do código e sua manutenção.&lt;/p&gt;

&lt;p&gt;Mas olhando de uma maneira geral, o COBOL não é diferente de qualquer outra linguagem da plataforma distribuída. Basta olhar para as &lt;strong&gt;DIVISION&lt;/strong&gt;s que são o nível mais alto da linguagem. Elas são distribuídas em &lt;code&gt;IDENTIFICATION DIVISION&lt;/code&gt;, &lt;code&gt;ENVIRONMENT DIVISION&lt;/code&gt;, &lt;code&gt;DATA DIVISION&lt;/code&gt; e &lt;code&gt;PROCEDURE DIVISION&lt;/code&gt;, respectivamente representam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;parte do código que identifica o programa&lt;/li&gt;
&lt;li&gt;configurações e interfaces de I/O do programa&lt;/li&gt;
&lt;li&gt;variáveis utilizadas pelo programa&lt;/li&gt;
&lt;li&gt;código e lógica do programa&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou seja, tudo que existe em outras linguagens de programação.&lt;/p&gt;




&lt;h1&gt;
  
  
  Diferenças entre linguagens de alta e baixa plataforma
&lt;/h1&gt;

&lt;p&gt;Romantismo à parte, ao retirarmos estas limitações herdadas do passado, as linguagens do mainframe não se diferenciam das utilizadas na distribuída. Até mesmo existem linguagens que foram portadas de uma plataforma para outra.&lt;/p&gt;

&lt;p&gt;Lógica de programação, estrutura de dados, declaração de variáveis, alocação de memória, estruturas condicionais (if-else), operadores lógicos (and-or-not), entre outros recursos, são comuns entre as linguagens independente da plataforma.&lt;/p&gt;

&lt;p&gt;A sintaxe da linguagem podem ser diferentes, porém os conceitos por trás delas são iguais. Para quem conhece mais da plataforma mainframe e quer for explorar as tecnologias mais recentes, é preciso estudo e curiosidade. Boas fontes de informação são: documentações oficiais, tutoriais, livros, podcasts e video-aulas.&lt;/p&gt;

&lt;p&gt;Além de estudar a sintaxe de uma linguagem nova, vale investir um tempo para aprender as arquiteturas e ferramentas por trás das plataformas:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Da mesma forma que no mainframe você já deve ter vivenciado a necessidade em aprender a usar o TSO, ROSCOE, REXX, o esforço vai ser parecido em desvendar Linux, Unix, AWS, Azure, etc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;E quem já trabalhou com VSAM? Algum dia já teve que começar a trabalhar com DB2 ou até mesmo com banco de dados não-relacionais, como ADABAS ou IMS/DB? O esforço não vai ser muito diferente de ter que aprender MongoDB, MySQL, SQLServer, entre muitos outros.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ou então ter que aprender a mapear e desenvolver telas com IMS ou CICS? O esforço vai existir também para aprender um pouco sobre HTML, CSS, React, Angular e até mesmo frameworks ou linguagens nativas para dispositivos mobile.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Falando em CICS, muito utilizado para aplicações transacionais online, também podemos colocar na lista o conhecimento que se adquire ao aprender sobre requisições REST, API's, GRPC.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Existem bastante analogias entre o mainframe e a plataforma distribuída. A dica é sempre entender o conceito por trás das tecnologias, todas no final convergem para o mesmo lugar: resolver alguma necessidade ou problema.&lt;/p&gt;

&lt;p&gt;E se você está migrando do mainframe agora, não tente aprender tudo de uma vez. Foque em algumas tecnologias, se dedique a elas e o resto virá naturalmente. Desenvolva projetos pessoais ou profissionais, pratique! O principal você já tem: lógica de programação e conceitos de máquina.&lt;/p&gt;




&lt;h1&gt;
  
  
  Paradigmas de programação
&lt;/h1&gt;

&lt;p&gt;Para navegar com mais tranquilidade nos estudos de novas linguagens de programação, um capítulo importante para aprender são os &lt;strong&gt;Paradigmas de Programação&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A maior parte dos programas existentes no mainframe atualmente adotam o paradigma de programação &lt;code&gt;procedural&lt;/code&gt;. É um paradigma derivado do paradigma &lt;code&gt;imperativo&lt;/code&gt; e utiliza chamadas em &lt;code&gt;procedures&lt;/code&gt;, que são conjunto de códigos agrupados em subrotinas ou estruturas de códigos.&lt;/p&gt;

&lt;p&gt;Ao estudar novas linguagens de programação mais recentes, é interessante ter o conhecimento mínimo de outros paradigmas de programação, alguns deles: &lt;code&gt;programação orientada a objetos&lt;/code&gt;, &lt;code&gt;programação funcional&lt;/code&gt;, &lt;code&gt;programação orientada a eventos&lt;/code&gt; e &lt;code&gt;programação reativa&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Seguem alguns links de referência:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms"&gt;Wikipedia: Comparison of programming paradigms&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/List_of_programming_languages_by_type"&gt;Wikipedia: List of programming languagens by type&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mainframe</category>
      <category>programming</category>
    </item>
    <item>
      <title>Mainframe e Distribuída - parte 2 - Ferramentas</title>
      <dc:creator>rogeriosug</dc:creator>
      <pubDate>Fri, 07 Jan 2022 02:03:05 +0000</pubDate>
      <link>https://dev.to/sug/mainframe-vs-distribuida-parte-ii-ferramentas-2obh</link>
      <guid>https://dev.to/sug/mainframe-vs-distribuida-parte-ii-ferramentas-2obh</guid>
      <description>&lt;p&gt;  &lt;/p&gt;

&lt;p&gt;Esta publicação faz parte de uma série para mostrar que muitos dos conceitos de desenvolvimento mainframe também estão presentes na distribuída. Neste post falarei sobre ferramentas.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ferramentas e tecnologias
&lt;/h2&gt;

&lt;p&gt;Existem algumas ferramentas e tecnologias que sempre estão presentes no ciclo de desenvolvimento de software de um dev mainframe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TSO/ISPF Edit&lt;/li&gt;
&lt;li&gt;JCL&lt;/li&gt;
&lt;li&gt;Changeman&lt;/li&gt;
&lt;li&gt;SORT, IEFBR14, ICEGENER, IEBGENER&lt;/li&gt;
&lt;li&gt;SDSF&lt;/li&gt;
&lt;li&gt;EASYTRIEVE&lt;/li&gt;
&lt;li&gt;FILE-AID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  TSO/ISPF Edit
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; File Edit Edit_Settings Menu Utilities Compilers Test Help
───────────────────────────────────────────────────────────────────────────────
 EDIT ZOSUSER.EXAMPLE.FILE(TEST01) - 01.00 Columns 00001 00072
 ****** ***************************** Top of Data ******************************
 ==MSG&amp;gt; -Warning- The UNDO command is not available until you change
 ==MSG&amp;gt; your edit profile using the command RECOVERY ON.
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 ''''''
 Command ===&amp;gt; ________________________________________________ Scroll ===&amp;gt; CSR
 F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Provavelmente é uma das ferramentas mais utilizada pelos desenvolvedores mainframe. Seja para editar/visualizar código ou dados de arquivo, esta ferramenta é muito poderosa. Os &lt;code&gt;primary commands&lt;/code&gt; e &lt;code&gt;line commands&lt;/code&gt; proporcionam muitas funcionalidades: &lt;code&gt;CHANGE&lt;/code&gt;, &lt;code&gt;HILITE&lt;/code&gt;, &lt;code&gt;SORT&lt;/code&gt;, &lt;code&gt;FLIP&lt;/code&gt;, &lt;code&gt;FIND&lt;/code&gt;, &lt;code&gt;CUT and PASTE&lt;/code&gt;, entre muitos outros (lista de: &lt;a href="https://www.ibm.com/docs/en/zos/2.1.0?topic=reference-edit-primary-commands" rel="noopener noreferrer"&gt;primary commands&lt;/a&gt; e &lt;a href="https://www.ibm.com/docs/en/zos/2.1.0?topic=reference-edit-line-commands" rel="noopener noreferrer"&gt;line commands&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Na distribuída também existem ferramentas de edição de texto com o mesmo perfil de funcionalidades, algumas mais outras menos, como por exemplo vi, vim, nano, notepad++, textpad, o simples e eficiente notepad, entre tantos outros. O legal é que alguns deles possuem funcionalidades ativadas por teclas de atalho ou por linha de comando, conceito parecido com o TSO/ISPF Edit.&lt;/p&gt;

&lt;p&gt;vim:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwahtj6n0rgjk0iuyut3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwahtj6n0rgjk0iuyut3r.png" alt="vim screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;notepad:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr086wxdx0o9n3b1gke55.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr086wxdx0o9n3b1gke55.png" alt="windows notepad screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Porém, com a evolução das práticas de desenvolvimento de software, surgiram as IDE's (Integrated Development Environment). Estes programas são suites que reunem diversas ferramentas utilizadas no ciclo de desenvolvimento como: editor de texto, gerenciador de testes, terminal de linha de comando, REPL, versionador de arquivos, gerenciador de dependências, etc. As IDE's podem ser específicas para o ecossistema de uma determinada linguagem ou podem ser genéricas e atender mais de um tipo de linguagem de programação. Exemplos conhecidos de IDE: eclipse, visual studio, visual studio code, intellij, sublime, atom, pycharm e uma infinidade de outras.&lt;/p&gt;

&lt;p&gt;pycharm IDE:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgx7iy4lzl0usa5ihahi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgx7iy4lzl0usa5ihahi.png" alt="pycharm screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As IDE's são excelentes ferramentas para ganho de produtividade e o desenvolvimento no mainframe também evoluiu. Existem ferramentas como o &lt;code&gt;RDZ&lt;/code&gt; (baseado no eclipse) e o &lt;code&gt;IBM Z Open Editor&lt;/code&gt; em conjunto com o &lt;code&gt;Zowe Editor&lt;/code&gt; (plugins para o Visual Studio Code) que permitem conexão direta com o mainframe e edição de código, com auto-complete de sintaxe, alertas de typos e muitas outras funcionalidades.&lt;/p&gt;

&lt;p&gt;Conheça o &lt;a href="https://ibm.github.io/zopeneditor-about/" rel="noopener noreferrer"&gt;IBM Z Open Editor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Enfim, quem deseja migrar do TSO/ISPF Edit, fique tranquilo que outros editores ou IDE's possuem funcionalidades conhecidas de edição, é apenas uma questão de costume e prática que são rapidamente aprendidas.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;
  
  
  JCL
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//**********************************************************************        
//* EXEMPLO DE JCL
//**********************************************************************        
//JOBXPTO   JOB 1
//STEP001   EXEC PGM=SORT
//SORTIN    DD DISP=SHR,DSN=ZOSUSER.EXAMPLE.FILE
//SORTOUT   DD SYSOUT=*
//SYSOUT    DD SYSOUT=*
//SYSIN     DD *
SORT FIELDS=(1,10,CH,A)
/*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;O JCL (Job Control Language), é uma linguagem de controle de &lt;code&gt;JOB's&lt;/code&gt;. De uma maneira bem geral, o &lt;code&gt;JOB&lt;/code&gt; orquestra um conjunto de &lt;code&gt;STEP's&lt;/code&gt; que por sua vez executa um ou mais programas (&lt;code&gt;PGM's&lt;/code&gt; ou &lt;code&gt;PROC's&lt;/code&gt;). Cada &lt;code&gt;STEP&lt;/code&gt; tem referência para um programa e seus respectivos inputs e outputs (arquivos, sysout de logs, etc).&lt;/p&gt;

&lt;p&gt;Na distribuída também há algo similar e depende das instalações dos &lt;code&gt;interpretadores de comandos&lt;/code&gt; presentes nos Sistemas Operacionais, também conhecidos por &lt;code&gt;shell&lt;/code&gt;. Um mesmo Sistema Operacional pode ter um ou mais &lt;code&gt;interpretadores de comandos&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Os &lt;code&gt;shell's&lt;/code&gt; são programas que permitem interagir com o sistema operacional e podem fazer chamadas a outros programas, igual ao &lt;code&gt;JCL&lt;/code&gt;. Alguns exemplos de &lt;code&gt;shell's&lt;/code&gt; conhecidos: Bourne shell (sh), bash, powershell, batch (.bat do Windows) e o gitbash.&lt;/p&gt;

&lt;p&gt;Cada &lt;code&gt;shell&lt;/code&gt; possui uma linguagem e sintaxe própria. Podem invocar comandos diretamente na linha de comando ou então criar arquivos de &lt;code&gt;script's&lt;/code&gt; com um conjunto de instruções. Os scripts fazem o que o &lt;code&gt;JCL&lt;/code&gt; faz: orquestra execução de programas, possuem lógicas de processamento, podem ter comentários e podem ter referências a inputs e outputs dos programas.&lt;/p&gt;

&lt;p&gt;A forma de declarar as instruções de um &lt;code&gt;shell&lt;/code&gt; é diferente de um &lt;code&gt;JCL&lt;/code&gt;, porém o conceito por trás deles tem pontos em comum.&lt;/p&gt;

&lt;p&gt;  &lt;/p&gt;
&lt;h3&gt;
  
  
  Changeman
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--- CHANGE MAN n.n.nn PRIMARY OPTION MENU --- NOTIFICATION UPDATED
OPTION  ===&amp;gt;
   1  Build    - Create, update and review package data
   2  Freeze   - Freeze or unfreeze a package 
   3  Promote  - Promote or demote a package
   4  Approve  - Approve or reject a package
   5  List     - Display (to process) package list
   B  Backout  - Back out a package in production     
   C  CDF      - Concurrent Development Facility      
   D  Delete   - Delete or undelete a package
   L  Log      - Browse the activity log
   N  Notify   - Browse the Global Notification File
   O  OFMlist  - Online Forms package list
   Q  Query    - Query packages, components and relationships
   R  Revert   - Revert a package to DEV status
   T  Tutorial - Display information about Change Man
   X  Exit     - Exit Change Man

 Press ENTER to process; enter END command to exit.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;O nome remete ao seriado japonês que a Rede Manchete exibia no final dos anos 80. Quando resolvo algum bug em Produção, às vezes me lembro do personagem Gyodai deste seriado: assim que o problema é resolvido, algo acontece e ele volta maior 😅.&lt;/p&gt;

&lt;p&gt;Voltando para o &lt;code&gt;CHANGEMAN&lt;/code&gt; do mainframe, considero uma ferramenta incrível. Ela realiza versionamento de código, movimenta os tipos de códigos (programas, telas, copybooks, etc) para suas respectivas libs, promove os componentes para os ambientes corretos, gerencia aprovações, gerencia dependências de componentes, executa jobs para validação de qualidade (código, completude, testes), entre outras funcionalidades.&lt;/p&gt;

&lt;p&gt;Na distribuída também existem ferramentas que possuem a mesma característica do &lt;code&gt;CHANGEMAN&lt;/code&gt;. Alguns exemplos: &lt;code&gt;Git&lt;/code&gt;, &lt;code&gt;SVN&lt;/code&gt;, &lt;code&gt;CVS&lt;/code&gt; e &lt;code&gt;RTC&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Alguns destes exemplos precisam da combinação de outras ferramentas para ter os recursos completos do &lt;code&gt;CHANGEMAN&lt;/code&gt;. Por exemplo, o &lt;code&gt;Git&lt;/code&gt; permite realizar o versionamento de código de forma descentralizada. Porém para que possa ter o compartilhamento do projeto com outros membros do time é preciso ter um repositório central, como o github ou gitlab. E para que estes repositórios possam "promover" os programas, é preciso ter esteiras de implantação e deploy, normalmente feito através de scripts em ferramentas como o github actions ou o gitlab-ci.&lt;/p&gt;

&lt;p&gt;github:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8wbmr28onsmkf41i13e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8wbmr28onsmkf41i13e.png" alt="github screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Atualmente na distribuída adota-se muito a prática de CI (Continuous Integration) e CD (Continuous Deploy), vale estudar o assunto. Acredito que se o &lt;code&gt;CHANGEMAN&lt;/code&gt; for bem configurado, é possível replicar esta prática no mainframe também.&lt;/p&gt;

&lt;p&gt;  &lt;/p&gt;
&lt;h3&gt;
  
  
  SORT, IEFBR14, ICEGENER, IEBGENER
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//**********************************************************************
//** CREATE FILES **
//**********************************************************************
//STEP01   EXEC PGM=IEFBR14 
//INPUT    DD DSN=ZOSUSER.EXAMPLE.FILE,DISP=(NEW,CATLG,DELETE), 
//            SPACE=(TRK,0),UNIT=SYSDA,DCB=(RECFM=FB,LRECL=300,BLKSIZE=1024) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;SORT&lt;/code&gt;, &lt;code&gt;IEFBR14&lt;/code&gt;, &lt;code&gt;ICEGENER&lt;/code&gt;, &lt;code&gt;IEBGENER&lt;/code&gt; são alguns de muitos "utilitários" presentes no mainframe. Estes utilitários são programas que realizam tasks específicas e úteis, normalmente para manipulação de arquivo: criar, deletar, ordenar, extrair parte de registros, alterar parte de registros, entre outros.&lt;/p&gt;

&lt;p&gt;Na distribuída também existem "utilitários" instalados junto com as distribuições dos sistemas operacionais e que realizam tarefas semelhantes às do mainframe.&lt;/p&gt;

&lt;p&gt;Exemplos são os programas que acompanham distribuições Linux: &lt;code&gt;sort&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt;, &lt;code&gt;cut&lt;/code&gt;, &lt;code&gt;touch&lt;/code&gt; e &lt;code&gt;rm&lt;/code&gt; que são apenas alguns dos comandos que realizam função semelhante às citadas dos utilitários mainframe. Além deles também existem muitos outros comandos, para conhecer mais dê um google por "Linux commands line list" ou "Linux commands line cheat sheet":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.loggly.com/wp-content/uploads/2015/05/Linux-Cheat-Sheet-Sponsored-By-Loggly.pdf" rel="noopener noreferrer"&gt;Linux-Cheat-Sheet-Sponsored-By-Loggly.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fedoramagazine.org/command-line-quick-tips-wc-sort-sed-and-tr/" rel="noopener noreferrer"&gt;Fedora Magazine Command line quick tips&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Utilizar estes "utilitários" juntamente com os &lt;code&gt;scripts&lt;/code&gt; (comentado acima no tópico de JCL) é um jeito prático e poderoso para realizar tasks no sistema operacional, manipular arquivos e executar programas de forma automatizada.&lt;/p&gt;

&lt;p&gt;  &lt;/p&gt;
&lt;h3&gt;
  
  
  SDSF
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Display  Filter  View  Print  Options  Help
------------------------------------------------------------------------------
ISPF.                             SDSF Primary Option Menu
COMMAND INPUT  ===&amp;gt; _                                      SCROLL ===&amp;gt; PAGE

DA    Active users                             INIT  Initiators
I     Input queue                              PR    Printers
O     Output queue                             PUN   Punches
H     Held output queue                        RDR   Readers
ST    Status of jobs                           LINE  Lines
                                               NODE  Nodes
LOG   System log                               SO    Spool offload
SR    System requests                          SP    Spool volumes
MAS   Members in the MAS
JC    Job classes                              ULOG  User session log
SE    Scheduling environments    
RES   WLM resources
ENC   Enclaves
PS    Processes

END   Exit SDSF  

 F1=HELP      F2=SPLIT     F3=EXIT      F4=RETURN    F5=IFIND     F6=BOOK
 F7=UP        F8=DOWN      F9=SWAP      F10=LEFT    F11=RIGHT    F12=RETRIEVE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;O SDSF (System Display and Search Facility) é uma ferramenta no ISPF muito utilizada para visualizar jobs em execução, verificar logs de execução e gerenciar jobs (hold, release, cancel, purge).&lt;/p&gt;

&lt;p&gt;Na distribuída, os sistemas operacionais possuem ferramentas para visualizar os processos em execução. Alguns exemplos: no Windows existe o &lt;code&gt;Task Manager&lt;/code&gt; (Gerenciador de tarefas), no Mac &lt;code&gt;Task Manager&lt;/code&gt; (Monitor de atividades) e no Linux/Unix existem linhas de comandos que permitem visualizar as tasks por linha de comando &lt;code&gt;ps aux&lt;/code&gt; e &lt;code&gt;top&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;command line &lt;code&gt;top&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Processes: 395 total, 3 running, 392 sleeping, 2233 threads                                                    21:14:37
Load Avg: 1.55, 2.06, 2.02  CPU usage: 0.96% user, 0.96% sys, 98.7% idle
SharedLibs: 182M resident, 58M data, 17M linkedit.
MemRegions: 100694 total, 5008M resident, 151M private, 1687M shared. PhysMem: 16G used (1929M wired), 86M unused.
VM: 2967G vsize, 1993M framework vsize, 528596(0) swapins, 563341(0) swapouts.
Networks: packets: 212079/191M in, 167807/28M out. Disks: 1644472/40G read, 390628/5110M written.

PID   COMMAND      %CPU TIME     #TH   #WQ  #PORT MEM    PURG   CMPRS  PGRP PPID STATE    BOOSTS         %CPU_ME
2171  top          3.2  00:00.66 1/1   0    25    3332K  0B     0B     2171 1460 running  *0[1]          0.00000
1458  Terminal     2.2  00:13.00 9     4    252-  54M-   31M    0B     1458 1    sleeping *0[138]        0.27569
269   WindowServer 2.0  07:28.32 11    4    859+  453M   36M    18M    269  1    sleeping *0[1]          0.65891
0     kernel_task  1.0  10:43.33 173/8 0    0     315M   0B     0B     0    0    running   0[0]          0.00000
178   hidd         0.5  01:40.01 6     3    233   5380K  0B     1092K  178  1    sleeping *0[1]          0.02443
1857  Python       0.3  00:02.34 3     0    20    19M    0B     0B     1849 1849 sleeping *0[1]          0.00000
2038  Python       0.3  00:01.92 3     0    20    22M    0B     0B     1849 1849 sleeping *0[1]          0.00000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pelos &lt;code&gt;Task Manager's&lt;/code&gt; ou pela linha de comando, existem funcionalidades para encerrar os processos em execução, parecido com o &lt;code&gt;SDSF&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A diferença maior entre mainframe e distribuída fica na forma como os logs (sysout) são exibidos. No mainframe existe a opção de output para uma &lt;code&gt;SYSOUT&lt;/code&gt; que é comum a todos os processos do mainframe e facilmente acessada pelo &lt;code&gt;SDSF&lt;/code&gt;. Na distribuída, os programas costumam gravar os logs em arquivos ou, dependendo do tipo de aplicação, exibem na console de execução da própria aplicação.&lt;/p&gt;

&lt;p&gt;log output de uma aplicação em python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$
$python app.py 

Starting application ...
INFO:root:Logging example - this is a info
WARNING:root:Other logging example - this is a warning!
ERROR:root:Oh no! This is a logging error!!!
Application terminated

$
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  EASYTRIEVE
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;EASYTRIEVE&lt;/code&gt; é uma linguagem de programação que pode ser interpretada no momento de execução após ser escrita em um cartão "inline" no &lt;code&gt;JCL&lt;/code&gt; ou também pode ser compilada e processada como programa.&lt;/p&gt;

&lt;p&gt;Na distribuída também existem linguagens de programação interpretadas. Uma das mais utilizadas atualmente é o &lt;code&gt;javascript&lt;/code&gt;, linguagem empregada desde em engines de navegadores de internet até em engines de backend como o &lt;code&gt;node.js&lt;/code&gt;, por exemplo.&lt;/p&gt;

&lt;p&gt;É possível aplicar estas linguagens interpretadas juntamente com os &lt;code&gt;shell scripts&lt;/code&gt; (comentado acima no tópico de JCL).&lt;/p&gt;

&lt;p&gt;exemplo de script.sh, com chamada node em código javascript:&lt;br&gt;
&lt;code&gt;script.sh&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "Inicio do shell script bash..."

node -e " \
   var showMessage = true; \
   console.log('Inicio código javascript'); \
   if (showMessage) { \
      console.log('Hello Mainframe World!'); \
   } else { \
      console.log('No message'); \
   } \
   console.log('Término código javascript'); \
"

echo "Término do shell script bash!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;log de saída do &lt;code&gt;script.sh&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Inicio do shell script bash...
Inicio código javascript
Hello Mainframe World!
Término código javascript
Término do shell script bash!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo acima, o comum é que o código javascript ficasse em um arquivo à parte. Porém, o exemplo foi feito apenas como comparação com o &lt;code&gt;EASYTRIEVE&lt;/code&gt;. A forma dinâmica de fazer código interpretado ou compilado que existe no mainframe, também pode ser aplicada na distribuída.&lt;/p&gt;

&lt;p&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  FILE-AID
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; File-AID - Browse - USEROS.EXAMPLE.FILE ------------------- LINE 0000 COL 1  1
 COMMAND ===&amp;gt;                                                  SCROLL ===&amp;gt; PAGE
COD-IDENTI NOME            IDADE          DT-NASCIM    FILLER                  
5/AN       15/AN           3/AN           10/AN        17/AN                   
(1-5)      (6-20)          (21-23)        (24-33)      (34-50)                 
1--------- 2-------------- 3------------- 4----------- 5-----------------------
********************************* TOP OF DATA **********************-CAPS OFF-*
00001      FULANO          20             01/01/2001                           
00002      CICLANO         30             10/10/1991                           
00003      BELTRANO        40             12/12/1981                           
******************************** BOTTOM OF DATA ********************-CAPS OFF-*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;FILE-AID&lt;/code&gt; é uma ferramenta essencial no dia-a-dia de quem trabalha com muitos arquivos no mainframe. Pela natureza dos arquivos no mainframe terem formato posicionais baseados em copybooks, o &lt;code&gt;FILE-AID&lt;/code&gt; facilita a visualização e edição dos dados.&lt;/p&gt;

&lt;p&gt;Os arquivos utilizados na distribuída possuem uma natureza diferente, normalmente são arquivos do tipo &lt;code&gt;csv&lt;/code&gt; (Comma Separated Values). Estes arquivos possuem seus valores separados por vírgulas ou algum outro caracter delimitador.&lt;/p&gt;

&lt;p&gt;exemplo de arquivo posicional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;00001FULANO         02001/01/2001                 
00002CICLANO        03010/10/1991                 
00003BELTRANO       04012/12/1981                 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;mesmo arquivo, porém em formato csv:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;codigo-identificador,nome,idade,data-nascimento
00001,FULANO,20,01/01/2001
00002,CICLANO,30,10/10/1991
00003,BELTRANO,40,12/12/1981
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(os arquivos csv podem ou não vir acompanhados do cabeçalho)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Na distribuída uma ferramenta muito versátil e conhecida para visualizar este tipo de conteúdo é o &lt;code&gt;Microsoft Excel&lt;/code&gt;. Ele permite converter arquivos posicionais ou csv em formatação tabular, o que facilita muito a visualização e filtros de dados.&lt;/p&gt;

&lt;p&gt;A opção no &lt;code&gt;Excel&lt;/code&gt; para realizar estas conversões é o &lt;code&gt;Dados &amp;gt; Texto para Colunas&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzn33es143v1pn0cqkyn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzn33es143v1pn0cqkyn.png" alt="opção Texto para Colunas do Excel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao converter um arquivo posicional para tabela, escolha a opção &lt;code&gt;Largura Fixa&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc1ic8flgqk910u5p1z06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc1ic8flgqk910u5p1z06.png" alt="opção Largura Fixa na conversão de Texto para Colunas"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E ao converter um arquivo csv para tabela, escolha a opção &lt;code&gt;Delimitado&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchzgbq3jv8yu87andj1r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchzgbq3jv8yu87andj1r.png" alt="opção Delimitado na conversão de Text para Colunas"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existem outros programas que também permitem visualizar este tipo de conteúdo, vale pesquisar. Além disso, na distribuída também existem outros formatos de arquivos, vale verificar sempre o sufixo dos arquivos (também chamado de &lt;code&gt;extensão do arquivo&lt;/code&gt;). Para cada extensão há diferentes aplicações.&lt;/p&gt;




&lt;p&gt;O objetivo deste post é reforçar que apesar das plataformas mainframe e distribuída serem distintas, a maneira de trabalhar é muito parecida. Existem ferramentas similares nos dois mundos.&lt;/p&gt;

&lt;p&gt;O grande desafio na transição do mainframe para a distribuída é descobrir as tecnologias existentes e aprendê-las. Acredito que o segredo para facilitar este aprendizado é descobrir os sinônimos de nomes e jargões entre as duas plataformas. A partir disso, ir atrás das ferramentas e tecnologias.&lt;/p&gt;

&lt;p&gt;Depois que aprender: usar &lt;em&gt;caspeta&lt;/em&gt;, &lt;em&gt;batucar&lt;/em&gt; e &lt;em&gt;gerar um arquivo dummy&lt;/em&gt; serão fáceis de fazer em qualquer lugar!&lt;/p&gt;




&lt;h3&gt;
  
  
  Glossário
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;caspeta:&lt;/strong&gt; aspas&lt;br&gt;
&lt;strong&gt;batucar:&lt;/strong&gt; codar&lt;br&gt;
&lt;strong&gt;arquivo dummy:&lt;/strong&gt; arquivo vazio&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Indice
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/sug/retroceder-nunca-abendar-jamais-i-12fo/edit"&gt;Ambiente&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ferramentas&lt;/strong&gt; (este post)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Linguagens de programação. Exemplo: Cobol vs Python&lt;/em&gt; (em breve)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Setup de ambiente Python: Hello World!&lt;/em&gt; (em breve)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;  &lt;/p&gt;

</description>
      <category>mainframe</category>
      <category>programming</category>
    </item>
    <item>
      <title>Mainframe e Distribuída - parte 1 - Ambiente</title>
      <dc:creator>rogeriosug</dc:creator>
      <pubDate>Sat, 01 Jan 2022 14:50:59 +0000</pubDate>
      <link>https://dev.to/sug/retroceder-nunca-abendar-jamais-i-12fo</link>
      <guid>https://dev.to/sug/retroceder-nunca-abendar-jamais-i-12fo</guid>
      <description>&lt;p&gt;  &lt;/p&gt;

&lt;p&gt;Desenvolvedores que trabalham exclusivamente com mainframe podem sentir alguns impactos quando começam a explorar o universo da computação distribuída.&lt;/p&gt;

&lt;p&gt;Este post é o primeiro de uma série para auxiliar os devs nesta transição e perceberem que muitos dos conceitos conhecidos no mainframe estão presentes na distribuída: mudam-se a panela e o fogão, mas o sabor da comida continua o mesmo.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sobre esta série de posts
&lt;/h2&gt;

&lt;p&gt;O objetivo final destes posts é tentar ajudar quem já conhece o ambiente mainframe e quer explorar o ambiente distribuído, também conhecido como baixa plataforma.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Este texto não tem a intenção de ser um guia exaustivo, ele tem o objetivo de dar algumas noções iniciais e incentivar nos estudos. Nos comentários abaixo, fiquem à vontade para sugerir correções e complementar com mais informações.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;No final existe um glossário e também um índice com os tópicos da série. Esta série está em evolução e novos tópicos surgirão.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Ambiente
&lt;/h2&gt;

&lt;p&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  Sistema Operacional
&lt;/h3&gt;

&lt;p&gt;Todo hardware precisa de um sistema operacional que possa gerir os recursos disponíveis. No mainframe são conhecidos o MVS, OS/390 e atualmente um dos mais predominante é o z/OS.&lt;/p&gt;

&lt;p&gt;Na distribuída, atualmente, os mais conhecidos são o Windows, Linux e macOS.&lt;/p&gt;

&lt;p&gt;A grande diferença é a arquitetura: no mainframe os usuários interagem com o sistema operacional em &lt;code&gt;sessões virtuais&lt;/code&gt; através de terminais como os emuladores de terminais 3270. Já na distribuída os usuários interagem diretamente com o sistema operacional.&lt;/p&gt;

&lt;p&gt;Existem funcionalidades comuns entre os sistemas operacionais, por exemplo da mesma maneira que o z/OS possui o RACF que gerencia permissões de autenticação e acesso, os sistemas operacionais da distribuída também possuem a implementação desta funcionalidade. Este mesmo conceito de segurança também existe nas plataformas de cloud, como o IAM da AWS.&lt;/p&gt;

&lt;p&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  Interface gráfica e não tão gráfica
&lt;/h3&gt;

&lt;p&gt;No mainframe, assim que o desenvolvedor faz login no &lt;code&gt;TSO&lt;/code&gt;, ele pode invocar linhas de comando como &lt;code&gt;CLIST&lt;/code&gt; e &lt;code&gt;REXX&lt;/code&gt; ou então pode chamar uma interface como o &lt;code&gt;ISPF&lt;/code&gt; (ou &lt;code&gt;PDF&lt;/code&gt;). Outra interface conhecida no mainframe é o &lt;code&gt;ROSCOE&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Menu Utilities Compilers Options  Status  Help
------------------------------------------------------------------------------
                           ISPF Primary Option Menu
Option ===&amp;gt;

0  Settings      Terminal and user parameters            User ID .: USER
1  View          Display source data or listings         Time. . .: 00:00
2  Edit          Create or change source data            Terminal.: 3278
3  Utilities     Perform utility functions               Screen. .: 1
4  Foreground    Interactive language processing         Language.: ENGLISH
5  Batch         Submit job for language processing      Appl ID .: PDF
6  Command       Enter TSO or Workstation commands       TSO logon: ACCT
7  Dialog Test   Perform dialog testing                  TSOprefix: USER
8  LM Facility   Library administrator functions         System ID: SC04
9  IBM Products  IBM program development products        MVS acct.: ACCNT#
10 SCLM          SW Configuration Library Manager        Release .: ISPF 5.2
11 Workplace     ISPF Object/Action Workplace
M  More          Additional IBM Products

Enter X to Terminate using log/list defaults

F1=Help F2=Split F3=Exit F7=Backward F8=Forward F9=Swap F10=Actions F12=Cancel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao fazer um paralelo com a distribuída, existem as interfaces conhecidas por &lt;code&gt;terminais&lt;/code&gt; que permitem interagir por linha de comando da mesma maneira que o &lt;code&gt;TSO&lt;/code&gt; faz&lt;br&gt;
E paralelo ao ISPF existem as interfaces gráficas, também conhecidas como GUI (Graphical User Interface), que são as telas em "janelas" que estamos acostumados a utilizar no dia-a-dia no Windows, Mac ou Linux.&lt;/p&gt;

&lt;p&gt;Exemplos de &lt;code&gt;terminais&lt;/code&gt; de linha de comando são: bash, sh, powershell, entre outros.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwc4o5pa6jek2ppwtj2ag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwc4o5pa6jek2ppwtj2ag.png" alt="bash example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exemplo de interface gráfica:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8y5cye5ensuololemq7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8y5cye5ensuololemq7y.png" alt="macOS graphical interface example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existem outras funcionalidades semelhantes entre os dois mundos. Tanto o sistema operacional do mainframe quanto os da distribuída possuem gerenciadores de arquivos ou, no caso do mainframe, datasets. No &lt;code&gt;ISPF&lt;/code&gt; os datasets podem ser visualizados na opção 1 (View) ou então na opção 3.4 (Utilities &amp;gt; DSLIST)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--------------------------  UTILITY SELECTION MENU  ----------------------------
OPTION ===&amp;gt; 4

    1  LIBRARY     - Compress or print data set.  Print index listing.
                       Print, rename, delete, or browse members
    2  DATASET     - Allocate, rename, delete, catalog, uncatalog, or
                       display information of an entire data set
    3  MOVE/COPY   - Move, copy, or promote members or data sets
    4  DSLIST      - Print or display (to process) list of data set names
                       Print or display VTOC information
    5  RESET       - Reset statistics for members of ISPF library
    6  HARDCOPY    - Initiate hardcopy output
    8  OUTLIST     - Display, delete or print held job output
    9  COMMANDS    - Create/change an application command table
   10  CONVERT     - Convert old format messages/menu panels to new format
   11  FORMAT      - Format definition for formatted data Edit/Browse
   12  SUPERC      - Compare data sets (Standard dialog)
   13  SUPERCE     - Compare data sets (Extended dialog)
   14  SEARCH-FOR  - Search data sets for strings of data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-----------------------------  DATA SET LIST UTILITY  --------------------------
OPTION ===&amp;gt;

  blank - Display data set list *              P  - Print data set list
  V     - Display VTOC information only        PV - Print VTOC information only

Enter one or both of the parameters below:
  DSNAME LEVEL  ===&amp;gt;  PREFIX
  VOLUME        ===&amp;gt;


  INITIAL DISPLAY VIEW   ===&amp;gt;  VOLUME  (VOLUME,SPACE,ATTRIB,TOTAL)
  CONFIRM DELETE REQUEST ===&amp;gt;  YES    (YES or NO)

* The following line commands will be available when the list is displayed

B - Browse data set        C - Catalog data set        F - Free unused space
E - Edit data set          U - Uncatalog data set      = - Repeat last command
D - Delete data set        P - Print entire data set
R - Rename data set        X - Print index listing
I - Data set information   M - Display member list
S - Information (short)    Z - Compress data set       TSO command or CLIST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DSLIST - DATA SETS BEGINNING WITH PREFIX ---------------------------  ROW 1 OF 9
COMMAND ===&amp;gt;                                                    SCROLL ===&amp;gt; PAGE
COMMAND      NAME                                      MESSAGE            VOLUME
-------------------------------------------------------------------------------
         PREFIX.$10$09$5                                                  MAR87B
         PREFIX.$15$38$5                                                  OCT87A
         PREFIX.ABDRVR7.ISPPLIB                                           FEB87B
         PREFIX.CURRENT.BILLS                                             TSO007
         PREFIX.MEMO.TEXT                                                 NOV87C
         PREFIX.MY.CLIST                                                  TSO005
         PREFIX.SAMPLE.TEXT                                               MIGRAT
         PREFIX.TEST.COBOL                                                MIGRAT
         PREFIX.TEST.DATA                                                 NOV87C
*************************** END OF DATA SET LIST *******************************
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De forma semelhante podemos visualizar os arquivos na distribuída tanto pela linha de comando (bash) ...&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qz2p71pmk3yr81075bc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qz2p71pmk3yr81075bc.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;... quanto pela interface gráfica&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbvixqmmrd58cotdamqc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbvixqmmrd58cotdamqc.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Spoiler: não se preocupe com os comandos do terminal por enquanto, voltaremos nele futuramente&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Aqui vale destacar a diferença estrutural entre datasets (mainframe) e arquivos (distribuída):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;datasets:&lt;/strong&gt; são formado por qualificadores de no máximo 8 caracteres e separados por "." (ponto) e o tamanho máximo do nome não pode exceder 44 caracteres. Exemplo: &lt;code&gt;USERZOS.ARQUIVO.TESTE.EXEMPLO&lt;/code&gt;. Os datasets ainda podem ser &lt;code&gt;PARTITIONED&lt;/code&gt; e permitem ter &lt;code&gt;MEMBERS&lt;/code&gt; dentro deles, na distribuída, é como se fossem arquivos dentro de uma pasta&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;arquivos:&lt;/strong&gt; são estruturados em pastas e sub-pastas. Os nomes dos arquivos geralmente são compostos por um prefixo e um sufixo (extensão), onde este sufixo indica o tipo de arquivo (.exe, .txt, .sh, .jpeg, .mp3). &lt;/p&gt;

&lt;p&gt;Não é obrigatório que um arquivo tenha prefixo ou um sufixo, mas precisa pelo menos ter um deles. Exemplo: &lt;code&gt;/pasta/sub-pasta/arquivo.txt&lt;/code&gt;, &lt;code&gt;/pasta/sub-pasta/.gitignore&lt;/code&gt;, &lt;code&gt;/pasta/sub-pasta/config&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Como podemos ver, existem muitas similaridades entre as plataformas alta e baixa. Explore e faça este exercício.&lt;/p&gt;

&lt;p&gt;Esta primeira parte da série é apenas para quebrar o gelo e abrir caminho para conhecermos outros conceitos em comum. &lt;/p&gt;

&lt;p&gt;Nos próximos posts veremos que ferramentas de terceiros ou built-in do mainframe também possuem um similar na distribuída. Exemplos destas ferramentas são o &lt;code&gt;CHANGEMAN&lt;/code&gt;, &lt;code&gt;ENDEVOR&lt;/code&gt;, &lt;code&gt;TSO EDITOR&lt;/code&gt;, &lt;code&gt;DFSORT&lt;/code&gt;, &lt;code&gt;FILE-AID&lt;/code&gt;, &lt;code&gt;IEFBR14&lt;/code&gt;, &lt;code&gt;ICEGENER&lt;/code&gt;, &lt;code&gt;EASYTRIEVE&lt;/code&gt;, entre outras.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Mudam-se a panela e o fogão, mas o sabor da comida continua o mesmo.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Glossário
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;baixa plataforma:&lt;/strong&gt; computação distribuída&lt;br&gt;
&lt;strong&gt;alta plataforma:&lt;/strong&gt; mainframe&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>mainframe</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
