開源日報 每天推薦一個 GitHub 優質開源項目和一篇精選英文科技或編程文章原文,堅持閱讀《開源日報》,保持每日學習的好習慣。
今日推薦開源項目:《反向操作 python-anti-patterns》
今日推薦英文原文:《Great Developers Never Stop Learning》

今日推薦開源項目:《反向操作 python-anti-patterns》傳送門:GitHub鏈接
推薦理由:有好的操作方法,自然也就有壞的。這個項目就是講在 Python 開發中的一些反向操作,希望開發者能夠引以為戒,不要重蹈覆轍。學習好代碼的長處,看得到壞代碼的缺點,不是只看到為什麼好代碼是好的,多想一步,看看自己為什麼是不好的,要如何改成好的代碼,而不是直接套用好的代碼,將好的想法裝進腦子裡才是最終需要達到的目的。
今日推薦英文原文:《Great Developers Never Stop Learning》作者:Semi Koen
原文鏈接:https://towardsdatascience.com/great-developers-never-stop-learning-77b9ce867eac
推薦理由:保持學習的好習慣

Great Developers Never Stop Learning

7 ways I.T. Professionals can foster a Continuous Learning mindset

Technology moves forward — so should you!

As software engineers, developers or architects, it is pivotal to stay current and relevant within the technologies and the domains we work. Some of the skills we studied a few years ago at uni have become outdated, so unless we get in charge of our learning we will lose our competitiveness. Also, we quite often sacrifice learning and development in favour of project deadlines.

This short-term thinking carries a long-term price!

Although it is impossible to stay up to speed with everything in this rapidly changing world of I.T., we need to choose a few areas that interest us (whether these areas are related to our current job, or the one we want in the future) and carve time out to up-skill.
Step #1 towards continuous learning is to set time aside!
In this article I will share the ways I use to sharpen my skills and a couple of others that are next in my list!

❶ — The Art of Reading

Books

I read a lot! Irrespective of the methodology (conventional or digital), having a broad library of books is essential, as they provide a deep understanding of the subject in question. I avoid buying any technology specific books as they have an expiration date: when a new version of the technology they cover is released, or a different way of doing things becomes more popular, they become obsolete. I instead favour:
  • conceptual books, i.e. those that cover new (or old) concepts, paradigms or practices e.g. Behaviour Driven Development, object oriented design patterns, modelling, etc,
  • behavioural books, for topics like project management, SDLC, soft skills, leadership etc,
  • influential books, which are a must-read for every developer as they are constantly mentioned in technical conversations. Some examples are: The Mythical Man-Month, Clean Code, Design Patterns: Elements of Reusable Object-Oriented Software, Domain-Driven Design, The Pragmatic Programmer.
My O』Reilly subscription is worth every penny, as it provides on demand access to a plethora of technical books (and other media, like videos, conferences, tutorials, etc). Although I prefer paper books, the ability to quickly browse a book is really handy.

Blogs

Reading blogs is one of my favourite methods to keep up to date: I totally respect other fellow-developers who take time to share their personal experiences, opinions, successes and failures using specific technologies. Some of the best tutorials out there are written by amateur technical authors, hidden deep down Google』s search! I use bookmarking apps (like Pocket and OneNote) to save them into my personal stack and then read them when I am commuting or between meetings at work.
The currency of blogging is authenticity and trust — Jason Calacanis
As long as we use our critical thinking to distinguish good quality blogs to those written in haste (frequently with half-cooked ideas or even misleading), then blogs are great to help us evolve and gain insights in new territories.

Medium is a terrific home for technical know-how articles and my preferred publication is, by far, Towards Data Science (cc: TDS Team). Other blogs include Coding Horror, The Seattle Data Guy (cc: SeattleDataGuy), DZone etc.

Twitter

Following technical influencers in social media is another popular means of keeping up to date with technology. Reaching out to them with questions is essential to enhance our learning. One reason they maintain their 『industry leader』 status is because they are generous with sharing resources and experiences, and they all welcome the engagement from people who want to learn from them.

Who is reshaping our industry is the million-dollar question. I will refrain from giving any recommendations on here, as we all have different interests and there are literally so many inspirational leaders out there, but you can always see who I follow as an example.

Photo by Anna Demianenko on Unsplash

❷ — From Avid Reader to Avid Writer

For the last 9 months I have started my own blog. Initially it was daunting: I was erroneously thinking that only experts with original ideas should write blogs, or that my views might not be good enough (imposter syndrome, you say?), but I quickly realised that I am writing for myself first — it is a means of recording my own learning but also adding my personal stamp to popular subjects.
To teach is to learn twice — Joseph Joubert
Not to mention that it is a great way to have an online presence, establish my experience and passion in a certain area, and most importantly get live feedback from those who kindly read and engage with my content!
? Did you know? Based on the learning pyramid, the top 3 ways to retain information, are:
1. Teaching others   : 90%
2. Practice by doing : 75%
3. Group discussions : 50%

❸ — Listen Up!

Podcasts are one of my major life hacks: they are tailored for multitasking (while cooking dinner, ironing, running errands etc) and their bite-size format is perfect for my daily routine. This is a selection of the ones I listen to, which cover my chosen tech stack (.Net) as well as generic I.T. updates: Herding Code, .NET Rocks!, Hanselminutes, Software Engineering Radio, Coding Blocks, This Week in Tech, Developer Tea, Software Engineering Daily.

❹ — Take Online Courses

Don』t get me wrong: I prefer to be hands-on and I do learn deeply by doing! This is my first choice — Always! But I now have a young family so my personal time is scarce. In order to kick-start learning a new technology I watch videos: they provide the perfect balance between theory and practice and being a visual learner I find them really effective. I watch them in an increased playback speed to maximise the amount of material I get through. Some of them offer industry certifications too.

There are endless online courses to dive in, but these are the resources/platforms I use more often: PluralSight, Coursera, Khan Academy, edX.

Photo by Christin Hume on Unsplash

❺ — Practice Makes Perfect

Proof of Concepts (POC)

As an architect I need to justify technical project decisions so I resort to developing POCs. They help me experience the challenges or benefits of the technology in question in order to provide forward looking research, as well as I get better at estimating (and not trivialise how long 『easy』 tasks take to develop). Depending on my other commitments, I try to focus on one item at a time (e.g. data science, ReactJs, big data etc) and produce a prototype in that area. Looking at my velocity I get through 6 – 8 POCs per year. Not too shabby!

Pet Projects

Pet projects allow us to play, experiment and learn in a safe environment, so we can then apply what we have learnt to real projects. In fact, they are real projects without the pressure: no deadlines, no restrictions on technologies, no control on the requirements (that are mostly cut due to budgetary reasons), no shortcuts on patterns. We are the bosses — we set the rules!

Open Source

Contributing to open source projects is an excellent way to raise our public profiles and practise: we just locate the project we are interested in, download the source code, inspect the codebase, make sure we can run it end to end, debug through and we are ready to get stuck in.

Although it is an area I have not actively engaged with (i.e. have not checked-in any changes), the main benefit I have experienced is that I get to see the best-of-the-best developers out there, coding in action — this by itself is a fantastic learning experience!
? Double Whammy: You can make your Pet Projects Open Source and double up on the benefits described above!

Online Community

Becoming an active member of an online community by asking and answering questions on sites like Stack Overflow is also a fantastic opportunity not only to learn but help others learn too. Promoting code and knowledge sharing offers a great sense of accomplishment.

Katas

Katas are simple coding exercises, i.e. they can be understood in a few minutes but are complex enough not to be solved too quickly — the term was coined by Dave Thomas, co-author of the book The Pragmatic Programmer, embracing the Japanese concept of Kata in the martial arts. I tried this technique once as an experiment but lost interest very quickly. I prefer looking at real problems and the big picture, rather than individual puzzle-like exercises. For experienced programmers, I think the other approaches mentioned in this article are more powerful. Nevertheless, a resource for Katas is kata.softwarecraftsmanship.org. ❗️ If this sort of thing tickles your fancy, check these platforms out too: Code Chef, Coder Byte and Hacker Rank.

Hackathons

Hackathons are sprint-like marathons that allow developers and I.T. professionals to collaborate on software projects and create a working prototype, an application feature or an integration (API). The benefits are listed nicely in Quora, so no more for me to say here! I have never participated in one but it is in my list of things to try!
What was new and hot yesterday is old and junky today!

❻ — Tap Into Your Colleagues Network

While learning from textbooks and online resources has plenty of advantages, there is little that can top the day to day interactions we share with our colleagues. I am lucky to be working with some of the best C# developers, they are a source of inspiration and learning for me — Thanks guys ?!

What I have come to realise is that there is no such thing as a dumb question: we all know this old saying, and yet we still take it for granted! Questions are actually the foundation of most learning as they become the basic starting points for conversation.

There are several compelling reasons why pair programming enhances our learning too, but the best advantage I have found is that we are forced to structure our thoughts, making us thoroughly understand our own ideas before we try to explain them to others. Finally, code reviews are the best way to improve our knowledge by getting direct feedback on our code. They are not about exposing our own limitations, but validating our ideas or have them challenged.
? Pro Tip: If there is someone at work whose coding wisdom and skills you admire, consider asking them if they might mentor you.

❼ — Socialise

Attend Industry Events

Attending a conference or a presentation is a brilliant way to get a sense of where the industry is heading, what other companies are doing, which technologies are being adopted, what the best practices are when bringing the technologies in-house etc. Networking with other developers is an added bonus too — swapping ideas with fellow developers is a guaranteed pattern to become sharper and expand your professional connections!

This sort of events can be pricey so it is best if your company sponsors you. Otherwise you can opt for watching the recorded sessions online, once they are published. Here are the ones I watch on their respective YouTube channels: GOTO Conferences, O』Reilly, Thought Works.

LinkedIn

LinkedIn groups are an excellent way to find like-minded professionals, as well as get stay informed in the software development realm.

Join Professional Organisations

Professional organisations (such as the British Computer Society), periodically run training sessions and offer a comprehensive access to industry news, surveys, career information, jobs and details of events (often at discounted rate).

The catch here is that we get what we put in: to fully reap the intrinsic benefits offered to us as members, we need to invest our time to actively participate.

Join Local User Group

The idea that developers are introverted geeks is totally outdated!

Joining local user groups and technical communities is an easy way to interact with other developers. The diversity of backgrounds, domains and experiences is what makes these special. There is one thing in common though: everyone is passionate about programming! And as such everyone is happy to learn and share what they know!

Build Own Network

Would you like to take networking a step further? Here are some hands-on ideas:
  • Start a technical community within your organisation
  • Create a local user group
  • Give a presentation or become a keynote speaker at a conference
  • Hold brown bag sessions or round-tables for group technical discussions
There has never been a better time to be a developer!

Photo by Tim Mossholder on Unsplash

Skill up to keep up!

We often fail to understand that our career is no longer the end product of our education, but itself is an education for us! If we keep the learning habit, we are likely to extend our longevity and improve our employability. Another common pitfall is using time as an excuse for not adopting continuous learning. We all have time! In fact, we all have exactly the same amount of time. The difference is how we choose to spend it! (← this is a friendly reminder to myself)

I have listed here a few resources that I tap into in order to develop my know-how excellence! I hope it helps you too!

Thanks for reading!
下載開源日報APP:https://openingsource.org/2579/
加入我們:https://openingsource.org/about/join/
關注我們:https://openingsource.org/about/love/