JavaRush /Blogue Java /Random-PT /Pausa para café #83. Quais traços de caráter distinguem p...

Pausa para café #83. Quais traços de caráter distinguem programadores excepcionais. Guia de programação simples: funções e métodos

Publicado no grupo Random-PT

Que traços de caráter distinguem os programadores excepcionais?

Fonte: Hackernoon O que separa os grandes programadores dos bons? Descobri dois traços de caráter que os grandes programadores compartilham: eles eram consistentes e persistentes. Essas características em si não são sinais de genialidade e, se desejar, qualquer pessoa pode desenvolvê-las e aplicá-las em seu trabalho. Pausa para café #83.  Quais traços de caráter distinguem programadores excepcionais.  Guia de programação simples: funções e métodos - 1

1. Seja consistente

Bons programadores não programam ocasionalmente. Em vez disso, eles têm um horário específico para aprimorar seus conhecimentos e habilidades durante o tempo livre: antes ou depois do trabalho e nos finais de semana. Por exemplo, um programador que conheço passa as primeiras duas horas do dia – seis dias por semana – em projetos ou tarefas de estudo pessoal. Isso não quer dizer que essas pessoas escrevam código o tempo todo. Eles, como todos nós, têm tempo para suas vidas, obrigações e interesses pessoais. Mas são consistentes: a programação tornou-se um hábito. Como você pode se tornar consistente? Isto é o que muitos de nós estamos tentando alcançar. Descobri que existem várias maneiras de fazer isso. Primeiro, determine o número de horas por semana que você pode dedicar à programação. Este número é a “quilometragem do programa” semanal. Como ex-corredor de longa distância, corria um certo número de quilômetros por semana. Esta foi minha corrida semanal. Agora tenho minha experiência em programação: esse é o número de horas que passo programando por semana. A maioria das pessoas negligencia esta fase. Eles vão direto para o projeto que desejam concluir ou para o tema que desejam estudar, sem pensar em como encontrarão tempo para fazê-lo. Como resultado, trabalham à noite ou 16 horas por dia. Há um problema com esta abordagem: não é sustentável a longo prazo. Aprimorar suas habilidades como programador não é algo que você faz ao longo de uma ou duas semanas agitadas. Em vez disso, você tem que trabalhar continuamente nisso por um longo tempo. É por isso que é tão importante identificar sua experiência em programação. Para fazer isso, considere usar um registro de tempo para ver onde e como você gasta seu tempo. Pegue um pedaço de papel e anote tudo o que você faz todos os dias e por quanto tempo faz isso, incluindo verificar as redes sociais ou e-mail por cinco minutos. Isso tornará mais fácil encontrar vagas abertas em sua programação. Você pode até conseguir um tempinho extra para fazer tarefas domésticas ou assistir TV. Você pode então criar um plano de treinamento de programação que precisa seguir. Um plano de treinamento é uma das maneiras mais eficazes de ser consistente. Permite distribuir todos os detalhes com antecedência. Tudo o que você precisa fazer é colocar esse plano em ação todos os dias. Meus planos de treinamento de corrida delineavam quantos quilômetros eu precisava correr por dia e com que rapidez eu precisava percorrê-los. Agora eu crio planos de treino programados que têm o mesmo propósito: eles me dizem o que preciso fazer a cada dia. No final do dia, abro o Evernote no meu computador e faço uma programação para o dia seguinte. Aqui está um exemplo:
6h30 - 8h30 - Programação
  1. Revisão do deck de flashcards Python Anki (20 minutos).
  2. Resolvendo o problema de dados do Word Cloud.
Sigo este processo ao longo do meu dia de trabalho: determino quanto tempo vou gastar em uma tarefa e o que quero realizar nesse tempo. Também crio um plano de treinamento mensal. Nele, incluo três coisas que desejo realizar, aprender ou concluir no próximo mês. Eu costumava fazer planos trimestrais. Mas então descobri que muita coisa pode mudar em três meses. Um plano mensal permite tempo suficiente para dar passos significativos em seu treinamento.

2. Seja persistente

A segunda característica de bons programadores é a persistência. Eles analisam todas as opções para resolver o problema e encontram a resposta. Este parece ser o segredo. Os grandes programadores que conheci têm uma habilidade incrível de analisar problemas e encontrar diferentes soluções ou soluções para uma situação difícil. Em suma, eles tinham um sistema para resolver problemas. Nunca tive um sistema de solução no ensino médio. Sempre que me deparavam com um problema na aula de matemática, eu mergulhava nele a toda velocidade. Então continuei fazendo isso quando comecei a programar. Nenhum plano. Não existe nenhum sistema. Não há tempo para pensar. Sem análise. Não é de surpreender que, em ambos os casos, eu estivesse girando desnecessariamente e constantemente encontrando obstáculos. Agora tenho um sistema de resolução de problemas que me ajuda a decifrá-los para encontrar opções diferentes. Por exemplo, o primeiro passo no meu processo de resolução de problemas é expor o problema. Este é o primeiro. Depois de entender o problema, concentro-me em cada uma das etapas a seguir.
  • Análise dos dados de entrada e resultados esperados.
  • Criação de um algoritmo de ação.
  • Escrevendo pseudocódigo.
  • Resolvendo uma versão simplificada do problema.
Espero que você tenha entendido. As etapas podem não ser fáceis, mas são administráveis. Ao resolver um problema difícil, nos tornamos pessoas melhores. Também inspira confiança. Depois de resolvermos um problema difícil, estaremos prontos para novos.

3. Atitude em relação aos problemas?

No caminho para nos tornarmos melhores programadores, há outra coisa que precisamos considerar: atitude. Você deve ter uma nova abordagem para problemas e ambigüidades. Um dia fiz algumas perguntas a um desenvolvedor sênior sobre um problema que eu estava enfrentando. Fiquei intrigado e desapontado. No início, o desenvolvedor também ficou intrigado. No entanto, sua resposta me chocou. “Uau, isso é um problema legal”, disse ele. Seu interesse foi despertado pelos detalhes que descobriu. Isso não quer dizer que grandes programadores também não fiquem presos em algum problema. Eles ficam presos. Mas a diferença está na atitude. A lição que aprendi naquele dia foi esta: bons programadores não têm medo de se aventurar no desconhecido. Eles entendem que definitivamente aprenderão algo novo ao estudar esse problema. Podemos aprender muito estudando outros programadores. Mas, em última análise, a responsabilidade recai sobre nós: precisamos de trabalhar todos os dias e agir.

Guia de programação simples: funções e métodos

Fonte: DZone O que constitui uma boa função ou método? Isso requer uma combinação de fatores, cada um dos quais é importante. Vejamos quatro dos mais importantes. Pausa para café #83.  Quais traços de caráter distinguem programadores excepcionais.  Guia de programação simples: funções e métodos - 2

Nome significativo

As funções devem ter nomes que descrevam sua finalidade ou funcionalidade. Quando uma função tem um nome significativo, é fácil ler e compreender sua finalidade. Por exemplo, se o objetivo da função é encontrar um cliente por ID, um bom nome pode ser findCustomerById(id: String) . Outra opção poderia ser findCustomer(id: String) . Aqui a assinatura da função implica que o comprador é encontrado pelo seu ID. A palavra “encontrar” também implica que o comprador pode ou não ser encontrado. Se o nome da função for alterado para getCustomer(id: String) então seu significado muda porque agora não implica nenhuma reversão; o cliente é encontrado ou a função falha e possivelmente gera uma exceção. Ambos os nomes são válidos para uma função, mas possuem significados diferentes e, portanto, suas implementações também devem ser diferentes.

Menos parâmetros possíveis

Gosto de seguir a regra de três. Isso significa que a função deve ter três ou menos parâmetros. Quando uma função requer mais de três parâmetros, ela deve ser reescrita e os parâmetros colocados em um suporte de dados, como classe, classe de dados, objeto JavaScript e assim por diante. Esta é uma maneira fácil de reduzir o número de parâmetros e organizar os dados em um aplicativo. Tomemos por exemplo uma função que possui comportamento idêntico, mas assinaturas diferentes:
fun addCustomer(
  firstname: String,
  lastname: String,
  streetAddress: String,
  city: String,
  zipCode: String
)
Aqui está outra opção:
data class Address(
  val street: String,
  val city: String,
  val zipCode: String,
  val streetNumber: String
)

data class Customer(
  val firstname: String,
  val lastname: String,
  val address: Address
)

fun addCustomer(customer: Customer)

A função faz o que é esperado

Uma função deve fazer o que se espera dela. Nem mais nem menos. Se a função for chamada findAddress(latitude, longitude) então ela deverá encontrar o endereço nas coordenadas fornecidas ou, se o endereço não puder ser convertido em coordenadas, retornar None , null , Empty ou qualquer que seja o tipo apropriado para o idioma fornecido. A função não deve fazer mais nada, como procurar endereços próximos ou criar registros de coordenadas. Uma função pode ter efeitos colaterais, como registro ou análise, mas estes são invisíveis para entrada e saída.

A função pode ser testada

Os recursos devem ser projetados para que possam ser testados. No exemplo de código anterior, defini a função addCustomer , mas não defini nenhum tipo de retorno, portanto sua testabilidade é questionável. Claro que pode ser testado usando mocks ou espiões dependendo de como é a implementação interna, isso pode ser conseguido simplesmente fornecendo o tipo de retorno:
fun addCustomer(customer: Customer): Customer
Com esta assinatura de função, podemos retornar a entidade cliente adicionada ao componente chamado. Também podemos verificar se a função faz o que deveria fazer com este objeto cliente (ou seja, atribuir a ele um identificador exclusivo).
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION