今日推荐英文原文：《Great Developers Never Stop Learning》
推荐理由：有好的操作方法，自然也就有坏的。这个项目就是讲在 Python 开发中的一些反向操作，希望开发者能够引以为戒，不要重蹈覆辙。学习好代码的长处，看得到坏代码的缺点，不是只看到为什么好代码是好的，多想一步，看看自己为什么是不好的，要如何改成好的代码，而不是直接套用好的代码，将好的想法装进脑子里才是最终需要达到的目的。
今日推荐英文原文：《Great Developers Never Stop Learning》作者：Semi Koen
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
BooksI 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.
BlogsReading 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 CalacanisAs 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.
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 WriterFor 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 JoubertNot 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 CoursesDon’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 ProjectsPet 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 SourceContributing 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 CommunityBecoming 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.
KatasKatas 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.
HackathonsHackathons 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 NetworkWhile 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 EventsAttending 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.
Join Professional OrganisationsProfessional 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 GroupThe 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 NetworkWould 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!