There is nothing like a challenge to bring out the best in man. - Sean Connery
You don't have to be great to start, but you have to start to be great. - Zig Ziglar
Today marks exactly 2 years since we set off on our amazing PyBites journey. In this special post we look back and reflect on what we learned.
1. The best way to learn is to teach
We started out as a simple blog writing articles on Python because we wanted to learn more about this fantastic language.
When you have to explain a concept you notice many gaps which when overcome solidifies your knowledge greatly. Our experience with PyBites fine tuned our learning which actually made it possible to teach.
It would probably not have happened without having each other (and later our community) as accountability buddies: the continuous bouncing ideas/brainstorming, inspiration, motivation, etc.
2. Getting started is more important than having a roadmap
Don’t expect to put up something perfect on iteration #1, nor to have all the answers from the start. We just started as a simple blog, documenting our learning.
Reflecting on our 2 year journey a lot of our important decisions were made on the fly. Our code challenges literally started by challenging each other to solve a coding problem. The same with our platform: we did not set out to build a coding platform from the start, but after 50 blog code challenges it made sense to take that step.
Our first successful piece came as a surprise too: From beginner to pro: Python books, videos and resources - it turned out many Pythonistas wanted a list of resources and we provided one. It went viral on Reddit and was the first time we were featured on a podcast (Python Bytes episode 14).
3. The #100DaysOfCode Challenge
This has been a pivotal moment in our PyBites and Pythonic career. In line with our habit of challenging ourselves and our community, we first took this challenge ourselves. It was tough but we came out stronger and with a portfolio of little scripts and utilities we could use in our later teaching.
Our endeavor sparked quite some traction on Twitter which led to us being interviewed about the challenge on the Talk Python podcast. This interview received incredibly positive feedback and led to our first Talk Python course (in collaboration with Michael Kennedy): #100DaysOfCode in Python which currently is helping a lot of new Pythonistas learn the language by building practical projects.
4. Growing a Slack Community.
From the start we tried to engage a wider community of developers / Python enthusiasts via our blog/Github tailored code challenges. However over time we wanted to have a more interactive way to engage with our community. Building a Slack community has been one of the best things we’ve done so far.
We’re stoked to facilitate a place where passionate Pythonistas can connect and share their learning. It has led to many interesting conversations and collaborations, and has allowed community members to help each other out when stuck on some code.
5. PyBites Platform
Launched one year ago, CodeChalleng.es is the culmination of our learning and teaching of Python! We managed to build it using a cool stack of Django/pytest/Heroku/AWS. It lets you code and verify your solution in the browser. We are reaching 150 exercises and expect to launch ~ 100 more the coming year.
Our initial release one year ago:
We’re most proud of the changes it makes in people’s lives ranging from finding paid gigs, new jobs or becoming better programmers overall. We also added gamification which keeps it fun and engaging:
It’s for all levels, and we support external libraries like BeautifulSoup, feedparser, pytz, dateutil, requests, textblob and recently even Pandas! The main focus though is on Python’s versatile standard library.
We also integrated our blog code challenges (reaching 60 soon) and a #100DaysOfCode progress tracker. Other highlights (full feed of features) are our Enterprise tier for coding in teams (including interviewing new job candidates), PyBites ninja belts and certificates and Bite forums to share code / learn from each other.
We’re proud and humbled to see dozens of tweets flying by each day of people that are learning Python through our materials.
6. PyBites meets at Pycon!
After almost 10 years of friendship being forcefully remote (Spain / Australia) we finally got to meet at Pycon 2018 in Cleveland!
We also did a poster session of our project which was a blast! And we had our first PyBites meetup with members of our community.
Of course we plan to attend Pycon 2019 in Cleveland again so we’re looking forward to meeting many passionate Pythonistas and sharing what makes Python awesome in our and your day-to-day.
7. Flask and Django
8. Some Stats
We published 116 articles, 58 code challenges and 89 news digests. Bob wrote guest articles on dbader.org, Twilio and RealPython. We are grateful for the 13 guest authors that wrote blog posts on PyBites, as well the almost 400 (!) PRs that were submitted for our challenges.
9. Getting more Pythonic at work
In our jobs we increased our Pythoning too!
Bob transitioned into a cloud developer team at Oracle 4 months after launching PyBites. He did Python for 5 years before, but being part of a professional dev team was an eye opener and he sharpened his saw. He also delivered a company-wide webinar about how to write more Pythonic code.
Julian has started running workshops within his org at AWS teaching basic Python to his team through simple, usable projects. While we can’t mention details here, he’s also working on some cool, Python-based tools internally.
10. Managing time/productivity.
Both of us have full-time day jobs and families! Yes, we’re not going to lie, at times juggling all 3 has been very hard/challenging.
Much of it comes down to priorities though: we mostly ditched TV and Netflix (but that's also because we are avid readers / Audible consumers). And yes we did lose sleep when delivering the platform and 100 Days course as these were monsters to create! They were however, worth every minute spent.
We learned how to focus and go “deep”. We learned about the Pomodoro technique. But overall it comes down to sprint and rest. Accept that you go in small increments, it all compounds to something great if you remain consistent and set your course correctly. It’s hard work for sure and requires a hell of a lot of tenacity, but above all requires a balance with rest and family time.
We could talk for days about this so we’re planning a community piece on productivity in the new year.
>>> from dateutil.relativedelta import relativedelta >>> relativedelta(date.today(), date(2016, 12, 19)).years 2
We are stoked and energized, proud and humbled to reach such a wide audience!
We learned so much, we coded a ton, met a lot of great people along the way and most importantly never forgot to keep it fun.
Inspired by this great momentum we can only aim to - as Jobs said - stay hungry and foolish. So for 2019 we just want to continue this awesome journey of becoming more proficient at Python, becoming better developers and teaching more Pythonistas in innovative ways. It’s our passion and we are grateful for having so many passionate people supporting our mission.
I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,000 times. - Bruce Lee
There is always opportunity for improvement, the Python space is never ending so we look forward to growing with you, our wonderful PyBites Community, and serving you over the next year!
Keep Calm and Code in Python!
-- Bob & Julian from PyBites