Aprendendo a aprender: Aprender em público (ou ensinando) é o que funciona melhor!

Post baseado no post do SWYX.IO

Muitas das vezes que tentamos aprender uma coisa, não sabemos por onde começar ou como começar, porém, existe uma regra de ouro para aprender algo: faça-o em público.

Não que o aprendizado de forma “individual” não seja possível, porém não foi compartilhado nada nesse período e você não se expôs ao erro.

Continue lendo “Aprendendo a aprender: Aprender em público (ou ensinando) é o que funciona melhor!”

Aprenda a implementar o Banco Imobiliário em Python

Você provavelmente deve estar pensando que sou louco agora!

Aquele jogo destruiu jantares e tardes com sua família e ainda te traumatiza quando você ouve o nome.

Mas dessa vez é diferente…

Dessa vez a gente vai programar um Banco Imobiliário para podermos simular diferentes estratégias que podem ser empregadas no jogo enquanto você joga com sua família.

Vamos às instruções

Esse será um jogo de Banco Imobiliário com todas as dinâmicas simplificadas, assim não teremos de implementar totalmente tudo.

O jogo tem 20 propriedades, 4 jogadores (um com cada estratégia diferente que será explicada mais a frente).

Quando um jogador para em uma propriedade, ele tem 3 possíveis ações: comprar a propriedade caso ninguém tenha feito ainda e ele possua saldo OU pagar o aluguel ao dono OU não fazer nada.

A cada volta no tabuleiro, o jogador ganha 100 moedas, permitindo com que ele gaste da forma que entender melhor.

Um jogador que fica com saldo negativo perde o jogo, e não joga mais. Perde suas propriedades e portanto podem ser compradas por qualquer outro jogador.

O jogo acaba de 2 formas: por timeout (quando nenhum jogador saiu e ou ficou sem saldo) OU por eliminação (quando só restou um jogador).

#PartiuSimulação?

Nada é tão legal quanto uma simulação computadorizada, certo? (pelo menos é o que eu acho hehehe), então vamos fazer uma simulação com 4 players com diferentes comportamentos:

  • O jogador um é impulsivo – compra qualquer propriedade sobre a qual ele parar.
  • O jogador dois é exigente – compra qualquer propriedade, desde que o aluguel pago seja maior do que 50.
  • O jogador três é cauteloso – compra qualquer propriedade desde que ele tenha uma reserva de 80 saldo sobrando depois de realizada a compra.
  • O jogador quatro é aleatório – compra a propriedade que ele parar em cima com probabilidade de 50%.

Definindo tudo em código

Para definirmos tudo isso em código, precisamos definir quais serão nossas entidades principais! Como podemos presumir logo de cara, teremos 3 entidades principais:

  • O tabuleiro (classe Board) – onde serão armazenadas as propriedades existentes em cada posição e os players que estão no jogo
  • O player (classe Player)- onde serão armazenadas as informações de nome, saldo, se ele ainda está no jogo, se ele possui dinheiro o suficiente, e a ação de andar
  • A propriedade (classe RealEstate) – onde será armazenada as informações de nome, preço, valor do aluguel e quem é o dono

Logo, para cada classe deveremos ter um construtor que guarde e inicialize as propriedades do objeto com os parâmetros que queremos.

Pensando nisso, a classe do Tabuleiro que defini é esta:

class Board:
    def __init__(self):
        self.real_estate = []
        self.players = []
    
    def add_real_estate(self, real_estate):
        self.real_estate.append(real_estate)

    def add_players(self, players):
        self.players = players
    
    def shuffle_players(self):
        random.shuffle(self.players)

A de players:

class Player:
    def __init__(self, name, initial_balance=300.00):
        self.name = name
        self.balance = initial_balance
        self.is_in_the_game = True
        self.board_position = 0
        self.initial_balance = initial_balance

    def subtract_from_balance(self, amount):
        self.balance = self.balance - amount

    def owner_has_amount_available(self, needed_amount):
        return True if self.balance >= needed_amount else False

    def kick_player(self):
        if self.balance < 0:
            self.is_in_the_game = False
        return self.is_in_the_game

    def walk(self):
        thrown_dice = random.choice(range(1, 7))
        self.board_position += thrown_dice

        if self.board_position > 19:
            print(f"{self.name} RECEBEU PELA RODADA")
            self.board_position -= 19
            self.balance += self.initial_balance

        return self.board_position

E a de propriedades (casas):

class RealEstate:
    def __init__(self, re_name, buying_cost, rent_cost, owner=None):
        self.re_name = re_name
        self.buying_cost = buying_cost
        self.rent_cost = rent_cost
        self.owner = owner

    def buyable(self):
        if self.owner:
            return False
        return True

    def buy(self, possible_owner):
        if self.buyable():
            if possible_owner.owner_has_amount_available(self.buying_cost):
                possible_owner.subtract_from_balance(self.buying_cost)
                self.owner = possible_owner
                return True
        return False

    def pay_rent(self, player):
        if not self.buyable():
            print(f"{self.owner.name} recebeu aluguel")
            player.subtract_from_balance(self.rent_cost)
            self.owner.balance += self.rent_cost
            return True

    def bank_reposetion(self):
        self.owner = None
        return True

Legal, e como eu defino as estratégias que eu quero em cada jogador

Em orientação a objetos, temos um conceito fundamental chamado herança: a herança permite com que classes filhas herdem de uma classe mãe todos os comportamentos que já foram escritos para ela, permitindo com que você escreva novos métodos mantendo toda a estrutura da classe mãe apenas nela.

Ou seja, você estará reduzindo a duplicação de código e ao mesmo tempo executando métodos definidos em outra classe.

Um exemplo disso é o seguinte: Queremos implementar o player do Banco Imobiliário que compre toda casa que ele puder com seu saldo.

class AllInPlayer(Player):
    def is_buying_opportunity(self, real_estate):
        if (real_estate.owner is None and self.balance >= real_estate.buying_cost):
            real_estate.buy(self)
            return True
        return False

Como podemos ver, nessa classe definida acima, nós usamos um novo parâmetro na hora de definirmos o nome da classe, esse nome entre parênteses é a nossa classe mãe, de onde herdamos todos os métodos para utilizarmos nessa classe.

Nesse caso, criamos um método novo para checar se é uma oportunidade de compra, assim isolamos o método apenas para aquele player.

Nós poderíamos muito bem ter criado um método de buy e sobreescrito ele, mas para ser mais simples de demonstrar, resolvi usar essa abordagem.

Então como ficariam os outros players?

class RandomPlayer(Player):
    def is_buying_opportunity(self, real_estate):
        if (real_estate.owner is None and self.balance >= real_estate.buying_cost
            and random.choice([True, False])):
            real_estate.buy(self)
            return True
        
        return False


class CautiousPlayer(Player):
    def is_buying_opportunity(self, real_estate):
        if (real_estate.owner is None and (self.balance - 80) >= real_estate.buying_cost):
            real_estate.buy(self)
            return True
        
        return False


class ImpulsivePlayer(Player):
    def is_buying_opportunity(self, real_estate):
        if (real_estate.owner is None and self.balance >= real_estate.buying_cost):
            real_estate.buy(self)
            return True
        
        return False


class HighlyDemandingPlayer(Player):
    def is_buying_opportunity(self, real_estate):
        if (real_estate.owner is None and self.balance >= real_estate.buying_cost 
            and real_estate.rent_cost > 50):
            real_estate.buy(self)
            return True
        
        return False

No próximo post, demonstraremos como fazer a simulação dos players para sabermos qual a estratégia de melhor eficácia.

Conheça os 3 projetos open source que são os corações dessas ONGs

As tecnologias open source estão em diversos locais, desde nossos computadores, até o sinal de trânsito da nossa esquina, e com as ONGs não seria nada diferente.

Diversas tecnologias abertas possibilitam a divulgação, comunicação e troca de informações entre diversos grupos!

Nesse post, resolvemos falar sobre 3 ONGs e suas tecnologias super interessantes desenvolvidas para ajudar as pessoas a se conectarem, engajarem e se comunicarem.

Greenpeace – Planet4

O Planet 4 do GreenPeace é um projeto de modernização do CMS construído e operado pela ONG, esse projeto tem como base o código fonte do WordPress.

Além de gerenciar o conteúdo dos sites do Greenpeace, o Planet 4 tem como objetivo engajar as pessoas às ações. No GitHub da organização, existem diversas ferramentas que foram criadas para facilitar o desenvolvimento, deploy com containers e manutenção das aplicações escritas.

Link do github: https://github.com/greenpeace

Atados – Open Volunteering Platform API

A Atados é uma ONG que permite a conexão entre voluntários e causas de voluntariado, e para poder permitir essa conexão, a Atados utiliza como base a Open Volunteering Platform (plataforma desenvolvida pela própria organização para fazer a conexão entre as pessoas).

A OVP é uma plataforma desenvolvida em Django que expõe uma API e permite com que a plataforma Atados.com.br funcione. O Atados também possui seu backend escrito em Node e algumas outras tecnologias, como bancos de dados NoSQL.

Link do GitHub da OVP: https://github.com/OpenVolunteeringPlatform

Link do Github da Atados: https://github.com/atados

OKFN – Operação Serenata de Amor

Nós não estamos falando do bombom não hahaha =P, a OKFN (Open Knowledge Foundation) é uma ONG com foco em disponibilização de dados públicos de maneira aberta, inteligível e de forma bem mais acessível que o disponibilizado pelos projetos públicos.

Um dos projetos que está dentro da OKFN é a Operação Serenata de Amor, que é responsável por analisar os reembolsos exercidos dentro da Cota para Exercício da Atividade Parlamentar (CEAP).

Para analisar e reportar essas descobertas, a equipe responsável criou a Rosie, uma bot que analisa os gastos e reporta para a sociedade, afim de buscar a averiguação do gasto.

A stack da serenata é bastante simples, porém muito bem implementada. Ela contém códigos feitos em Python, Elm, Django, 

Para poder entender mais sobre a Serenata e sua stack, entre no GitHub: https://github.com/okfn-brasil/serenata-de-amor

E você, pessoa dev, está empolgado para ajudar ONGs a melhorarem suas tecnologias open source?

Se sim, a Hack for Good da Atados permitirá com que você impacte vidas com a sua tecnologia desenvolvida dentro de 12h de trabalho no evento.

Clique aqui e se inscreva!

Prepare-se! Proteja sua empresa do Coronavírus com trabalho remoto!

Não!

Não estou falando para você pegar o vírus e nem arriscar a sua equipe a pegar, mas já parou para pensar o que acontece com a sua empresa se, por algum acaso, todos se infectarem com alguma epidemia transmitida por vias aéreas ou acontecer algum evento natural que não permita a locomoção ao trabalho?

A continuidade de seu negócio pode estar em risco por um vírus infeccioso e sua empresa pode nem sobreviver a ele!

Neste texto, quero contar algumas idéias da filosofia de trabalho remoto que vem ajudando empresas a reduzirem turn-over, facilitarem contratações, aumentarem flexibilidade e tudo isso custando pouco.

Continue lendo “Prepare-se! Proteja sua empresa do Coronavírus com trabalho remoto!”

3 Dicas Rápidas para Criar uma Cultura de Aprendizagem

É comum nos depararmos com pessoas que pulam de empresa em empresa com sede de novos desafios e aprendizados. Mas será que é preciso sair de uma empresa para aprender com outra? Como criamos uma cultura onde os colaboradores experienciem uma relação de troca de informações e conhecimento interna e externa?

Workshops/Aulinhas/Rodas de Conversa Internas

Já não é novidade que a diversidade ajuda na inovação. Sendo assim, criar um ambiente onde os próprios colaboradores falem sobre aqueles assuntos que dominam ou se interessam mais, gera conexões entre a equipe e uma troca muito leve. Sem contar que eles se sentem empoderados e motivados a falar sobre aquilo que amam.

Aqui é legal deixar 100% livre para que eles criem e compartilhem. Valeu tudo! Desde aulas mais técnicas até compartilhar sobre viagens que fizeram.

Meetups e Eventos

A troca não precisa ser somente interna. Incentivar os colaboradores a frequentarem meetups e eventos da área pode motivar-los a buscar mais conhecimento e ainda fazer um networking importante não só para eles, como para a empresa.

Cursos Presenciais/Online e Treinamentos

Oferecer bolsas de estudos as vezes é o empurrãozinho que o colaborador precisava para sair da zona de conforto.

E cada vez que alguém fizer um curso externo, por que não compartilhar com toda a equipe fazendo uma aulinha ou algum tipo de exercício? 😀

Conclusão

Com estes pequenos passos você consegue criar um ambiente de trabalho colaborativo, gera uma melhora na qualidade de vida e ajuda a desenvolver os talentos internos. Os funcionários não ficam desmotivados e a empresa pode reduzir os custos, já que a rotatividade diminui.


Conta para gente como você aprende na sua empresa! 😀

Aprenda a ter uma cultura de Empresa Estrada e retenha talentos de TI!

Estamos passando por um momento de mudanças no mundo todo: pessoas estão em busca de propósito. E empresas que não tem um propósito maior, não vão conseguir reter talento algum.

Sabendo disso, conseguimos classificar as empresas em dois tipos: 

A)Empresas Estradas

Querem trilhar um longo caminho de troca de aprendizado com seus colaboradores.

B)Empresas Pontes

São uma parte do caminho. 

Os colaboradores passam pouco tempo, pois não há muito do que usufruir. 

A estrada é longa e você pode aproveitar a paisagem, conhecer lugares e pessoas novas e aprender muito. Enquanto a ponte é só um pequeno trecho da estrada, não tendo muito o que oferecer.

Eai, a sua empresa quer ser uma estrada ou uma ponte?

Continue lendo “Aprenda a ter uma cultura de Empresa Estrada e retenha talentos de TI!”

Como desenvolver suas Soft Skills

Os termos Hard e Soft Skills estão cada vez mais em destaque no mercado de trabalho, mas ainda existe muita dúvida quando se fala neste assunto. 

E hoje, vamos entender melhor sobre a diferenças dessas skills e como você pode aprimorá-las. 

Você pode dominar diversas linguagens, saber mexer em dez softwares diferentes, ter feito quatro intercâmbios e ser poliglota, mas se você não tem soft skills, você pode perder sua vaga. 

Assim como você busca conhecimentos para aprimorar as suas habilidades técnicas, é preciso desenvolver as suas habilidades comportamentais e sua inteligência emocional para alcançar seus objetivos profissionais.

Continue lendo “Como desenvolver suas Soft Skills”

Como Criar seu Linkedin do Zero

No post da semana passada apresentamos algumas dicas essenciais para montar um bom currículo e também mostramos que ele deve sempre estar acompanhado do seu perfil completo no Linkedin.

Agora vamos falar sobre esta incrível rede social de profissinais. 

Quando me perguntam o que é o Linkedin eu sempre resumo em uma frase: “É seu currículo online nos mínimos detalhes.”

Ele é a maior rede social de profissionais do mundo! O Lugar perfeito para você acompanhar os profissionais mais renomados do mercado, fazer networking, se atualizar com notícias, participar de discussões, criar conteúdo e até encontrar vagas de emprego!

Se você ainda não tem um perfil, é a sua chance de criar um e deixar ele completinho para brilhar os olhos dos recrutadores! Por isso, separamos algumas dicas para você:

Continue lendo “Como Criar seu Linkedin do Zero”

42 milhões de motivos para você amar open source

Você quer aprimorar seus conhecimentos técnicos, ganhar dinheiro e ainda ajudar as pessoas sem sair da sua casa?

Não importa se você está começando. Qualquer um pode usar open source para dominar a arte da programação e se tornar um melhor programador, além de produzir projetos relevantes para a sociedade.

Melhor de tudo, desenvolver projetos open source lhe ajudará a construir seu portfólio, permitindo com que você seja um destaque para uma empresa e acabe sendo contratado.

A Red Hat, uma das maiores empresas de tecnologia do mundo, é open source, trabalha seus códigos no GitHub e possui um faturamento bilionário.

Ou seja, open source é para você aprender, ensinar, estudar, criar e ainda há a possibilidade de fazer dinheiro, permitindo com que você continue aperfeiçoando o seu trabalho inicial.

Você deve estar se perguntando: Como não amar esse tipo de distribuição de conhecimento e tecnologia?

Vou lhe explicar…

Não tem como rs rs…

Caso você ainda não saiba, open source é uma metodologia de desenvolvimento de software onde todo o código é compartilhado de forma aberta (isso não necessariamente implica em ser gratuito).

Provavelmente a maior parte dos sites que você visita na internet ou são baseados totalmente em tecnologias open source ou tem pelo menos um pedacinho delas em seu código.

Se você deseja aprimorar suas habilidades computacionais e de escrita de código, saiba que você pode começar a fazer isso agora, de sua casa, sem precisar de educação formal na área e nem estar empregado nela.

Se está procurando emprego, saiba que existem diversas empresas aqui no Brasil e no mundo que contratam desenvolvedores de software através de projetos open source.

E, se ainda quiser vender seus serviços, o open source permitirá você ter um portfolio para mostrar ao seu cliente com suas devidas contribuições, e se vender automaticamente como um dos prestadores de serviço diferenciados.

Realmente o open source é uma mina de ouro que pode ser muito explorada e gerar muitos frutos, desde aprendizagens até serviços prestados.

PS: Os 42 milhões são apenas um número ficticio, mas existem inúmeros motivos para você também amar open source e espero que tenha lhe ajudado a encontrar um!

Abraços,

Vinicius

Como fazer seu currículo sem complicações + Bônus Exclusivo!

Você sabia que um recrutador leva apenas 7 segundos para ler o seu currículo? Isto significa que em menos de 10 segundos ele decide se descarta ou não o candidato. Sem contar que ele pode chegar a receber mais de 200 currículos por dia. Dado este cenário, ele tem pouco tempo e muito material para fazer a primeira seleção. Assim é muito importante ter um currículo simples e objetivo.

Algumas pessoas perdem grandes oportunidades somente pela apresentação do currículo, mesmo que elas tenham ótimas experiências. Então para te ajudar com isso, separamos 6 dicas essenciais para você passar na primeira grande peneira: a seleção de currículos! Confira:

Continue lendo “Como fazer seu currículo sem complicações + Bônus Exclusivo!”