Designing Learning
by Andy Hunt and Dave Thomas
In our last column on StickyMinds,, we boldly stated that the two most fundamental activities in developing software are communication and learning. In this week's column, we'll focus on learning. As software development professionals, we're always learning--not just new technology, but the problem domain, the quirks of the users/clients, even the characteristics of the evolving system itself. That's a lot of learning--from many sources. But for such an important aspect of our profession, we tend to ignore it completely. Even for the traditional things we need to learn, such as new technology, we tend to learn accidentally and at the last minute (sometimes even later). Exercise your brain; take learning into your own hands. Doing so will benefit your skills and your career.
In order to be successful, we need to improve and take a more active role in our own learning whether we are working as developers, testers, or managers.
As we mentioned in the last column, people at different skill levels have different needs when it comes to learning. Beginners need unambiguous, context-free rules, with no confusing reference to the larger picture. More advanced practitioners cannot work to rule, and must see the larger context and a holistic view.
In addition, people have different learning styles--some prefer to read, others to hear a lecture, others to just wade in and play (also known as "experiential learning"). Oh, and before we even start learning, there's the small matter of trying to determine what you need to learn in the first place.
Create a plan
In order to focus deliberately on your own learning, start with these three innocuous questions:
- What do you need to learn?
- How are you going to learn it?
- How will you know you're done?
Let's take a closer look at each of these.
What do you need to learn?
This is a much harder question than it first appears. If you are on a project moving to a new language or environment, then the answer might be pretty simple. But many times, what you really need to learn isn't so obvious.
What's broken? What's lame? What are you guessing at that you really ought to know? What's missing in your knowledge portfolio, either for your current project or for your career in general? Besides obvious things such as a technology or a technique, think about less obvious things like, "What are the characteristics of the system when placed under load?" Make a list. Go on, grab a piece of paper or a keyboard and make a list. We'll wait right here.
How are you going to learn it?
Okay, now you've got a list. For each topic that you've identified as relevant, you need to figure out how you're going to learn it. Unless you've picked all new topics and you're a complete beginner, you will have some experience with each one. Depending on how much experience you have in each topic, you'll have to approach each one differently.
One size does not fit all, even for you! For topics in which you are a novice, you need to find very basic, rule-based, "cookbook"-style instruction, possibly cutting across different technologies. For instance, Greg Wilson's new book Data Crunching gives a beginner's overview--and concrete recipes--using XML, SQL, plain text, and binary file handling.
If you have more experience, you need to find something with more of a big-picture overview. For instance, if you're fluent in several programming languages, a simple overview of a new language's syntax and key features is probably enough to get you going.
How do you learn best? If it's by reading, then go buy some books. If you need to hear it or attend a class, then start scouting the web for an appropriate conference, workshop, or other learning opportunity.
How will you know you're done?
Finally, how do you know when you're done? In all things pragmatic, we need feedback to know when we're done. In this case, just setting a goal of "learning xyz" isn't sufficient. For instance, instead of saying you want to learn Ruby, set a concrete goal like you want to "be able to write a web-based application that manages your to-do list in Ruby." Give yourself a timeline. For instance, write "hello world" on the first day, a small program with unit tests during the first week, and the big web-application at the end of the month.
After achieving this milestone, re-evaluate and reiterate what else you need to learn. Learning is an open-ended activity, of course, so you're never really "done." But if you can set some concrete, achievable milestones and meet them, you'll be in a good position to create the next set, and so on.
You'll be learning a lot--deliberately, not by accident--and your skills and your career will be in much better shape.
About the Authors
Andy Hunt and Dave Thomas are partners in The Pragmatic Programmers, LLC, specializing in helping people find better ways to develop software. They helped author the now-famous Agile Manifesto, and speak internationally on new ways of producing software. From their best-selling book, The Pragmatic Programmer, to the new titles from their Pragmatic Bookshelf publishing company, Dave and Andy are there to help programmers stay on top of their game. Contact them via www.pragmaticprogrammer.com.
分享到:
相关推荐
Designing Machine Learning Systems with Python 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
It’s ideal for practicing developers with experience designing software systems, and useful for scientists and other professionals familiar with scripting but not necessarily with designing learning ...
Designing Machine Learning Systems with Python 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有...
Designing Machine Learning Systems with Python 2016 {PRG} Designing Machine Learning Systems with Python 2016 {PRG}
Machine learning is one of the fastest growing trends in modern computing. It has applications in a wide range of fields, including economics, the natural sciences, web development, and business ...
Designing Machine Learning Systems with Python 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
With the reinvigoration of neural networks in the 2000s, deep learning has become an extremely active area of research that is paving the way for modern machine learning. This book uses exposition and...
《Designing Machine Learning Systems with Python 2016》是一本深入探讨如何使用Python构建高效机器学习系统的专著。作者David Julian以其丰富的经验,引导读者理解如何设计出能提供更准确结果的机器学习系统。这...
Nikhil Buduma, Nicholas Locascio, "Fundamentals of Deep Learning: Designing Next-Generation Machine Intelligence Algorithms" ISBN: 1491925612 | 2017 | EPUB | 304 pages | 16 MB With the reinvigoration...
Human-in-the-Loop Machine Learning lays out methods for humans and machines to work together effectively. Summary Most machine learning systems that are deployed in the world today learn from human ...
Reinforcement Learning with TensorFlow_ A beginner’s guide to designing self-learning systems with TensorFlow and OpenAI Gym (2018, Packt Publishing).pdf Reinforcement Learning _ With Open AI, ...
But finding algorithms and designing and building platforms that deal with large sets of data is a growing need. Data scientists have to manage and maintain increasingly complex data projects, and ...
《深度学习基础》是入门深度学习领域的一本经典著作,英文版为"Fundamentals of Deep Learning",本书结合了理论与实践,旨在帮助读者理解并掌握深度学习的基本概念和技术。这本书不仅提供了详尽的理论解释,还附带...
industry in designing machine learning methods for medical image analysis, cov- ers state-of-the-art reviews of deep learning approaches for medical image analysis, including medical image detection/...
在当今数字化时代,电子学习(E-learning)已经成为教育领域的重要组成部分。然而,许多人错误地认为电子学习是近几十年的新事物,实际上,其起源可以追溯到20世纪50年代。自那时以来,随着互联网技术的不断发展,...