Great teaching isn't about knowledge transfer from the expert to the learner, it's about clearing a path of discovery, and expertly guiding people down it.
Since July of 2016, I’ve been formulating strategies for, and doing research on, how we can introduce the tenets and practices of product UX into the educational environment. I wrote in my journal quite a bit, gathering my thoughts based on the experiments that we've run to date, and reviewing the data we've collected from student.
At the time, I came up with a term Educational Experience (EX). I did some research online to see if anyone else was thinking about this, and I came up empty. I was becoming a bit frustrated because I was sure other people must be thinking about it. It is very important to me as I believe it will be valuable in continuing to differentiate NSS and a thought leader on adult software education.
Through serendipity, I discovered an article on EdSurge titled "UX to LX: The Rise of Learner Experience Design". Looks like my Google Fu still needs work, as I should have discovered it months prior.
It was exhilarating because it gave me the proper term to search (LX or Learner Experience Design), and it led me down a rabbit hole where I discovered that this is an emerging field, and I’m excited to start engaging with some of these people to share what we’ve done here and learn from them.
What is LxD?
For me, designing a learning experience is about creating an environment that removes the obstacles which can prevent a learner from achieving the defined learning outcomes.
One reason I'm attracted to this term is that I've always considered true learning is experience. Information is just noise. My job is to help people filter, and use, the information effectively to begin learning.
Learning happens through experience. The rest is just information.
Most content that I've found which is labeled with "Learner Experience", has its focus on e-learning, and the introduction of technology into the student experience. I'm in a niche of the education field where being able to use, and create, new technology is the core outcome of the entire course - not an augmentation to the learning experience. Focusing solely on designing digital content for students who are learning to write software for the purpose of delivering digital content feels akin to building an ouroboros in a laboratory.
The Entire Experience
I'm looking at it from a holistic viewpoint - the entire experience of the student with the organization, its people, and content.
- It involves developing relevant, easy to consume content - both in the classroom environment and out of it.
- It involves knowledge of andragogy to effectively craft a course for the adult learner.
- It involves having the insight for how learners interact socially with each other and their coaches/instructors.
- It involves the integration of the practices and tenets of User Experience that, until now, has been focused on product design.
At the intersection of those concepts is a great Learner Experience.
Cornerstone: Digital Content
Over the last two years, I've recorded about 12 videos covering a variety of concepts that we teach in class. They aren't meant for public consumption to get from 0 to competent in those concepts, but rather an augmentation of their in-class experience. Something for them to watch over and over again while they reflect on their learning.
Every single cohort of students provides feedback on how much the videos helped them during their time here. Unfortunately, the time I can dedicate to producing videos is constrained by many other demands, so I don't produce them very often.
Given that students receive them so positively, I'm looking at how we can provide more virtual learning resources for them outside of class. More videos is the lowest hanging fruit that we can provide and I will continue to produce them when I have time.
I'm starting to collect data from current students and alumni about what tools they use to learn when they aren't working (alumni), or in the classroom (students).
Cornerstone: Classroom Content
Our delivery of content while at school is where we have iterated most often. I believe that we are getting close to delivering the most innovative, community-aligned, and effective experience for learning in that environment. It's only one part of the LxD but, likely, the most important since the student/instructor relationship is the most important one during the course.
I've developed my own foundational framework for delivering this super praemissis (on premises) experience. I don't want to call it a classroom experience because our students spend the minority of their time actually in the classroom listening to me talk at them. I do very minimal lecturing, where it's just me talking. When I'm in front of the class, it's an interactive experience where I'm live-coding small samples of concepts, or having a discussion with the class about various topics.
I want to be the best instructor, mentor and coach I can be. I felt that, in order to achieve this, I needed to hit the books and discover how the human brain actually learns something. I'm not talking about the ability to regurgitate information in short-term memory on a test. My goal is true comprehension of the fundamentals. What I discovered opened my eyes to theories, techniques, and studies that took my understanding of the human brain to an entirely new level.
The brain doesn't work the way you think it does. The traditional education system that we all grew up experiencing certainly doesn't seem to apply much of the the conclusions of the research in learning and cognitive development.
After reading several books and studies, it became clear that there were 6 common patterns in all of it that described practices and processes that helped the human brain learn most effectively. RIVERS is the acronym I came up with to coalesce these practices.
Retrieval involves forcing the brain to retrieve information after some forgetting happens to harden in long-term memory. By introducing topics in steps, that are appropriately spaced in time, requires students to think harder to retrieve the information into short-term memory in order for the concept to be elaborated upon.
Doing this multiple times strengthens the overall comprehension, and context for the topic, in the brain.
Interleaving is the strategy of changing from one topic to another, while increasing complexity each time. For example, the way I teach SQL to students is to introduce them to drawing Entity Relationship Diagrams (ERD) to represent a fairly simple SQLite database with a few relationships.
Then I give them a simple, populated database that implements the ERD that they developed. They then learn to use simple
SELECT statements query from a single table, and then learn the
JOIN clause to combine data from two tables.
After this process, I then teach them the concepts of a RESTful API. A concept that has very little conceptual connection to the SQL language.
Then they build an ERD for a new database that has a greater number of tables and relationships. I show how them how to use
DROP statements to construct that new database. Once that task is complete, I give them an exercise that requires them to write 7 different SQL statements that joins data across multiple tables, and introduces them to aggregate functions like
Then we move on to unit testing and how to approach a project with a Test Driven Development [TDD] strategy in mind.
Then it's back to SQL where they work with a complex database, and need to use all their skills to complete 23 highly challenging exercises to extract information. They need to use sub-selects, all the aggregate functions,
LEFT JOIN and
Variation involves identifying the core outcomes, and then structuring the learning environment to ensure students experience the variations of the information searching experience. Variation theory states that the most effective way to help students understand a concept is to focus on providing opportunities for students to experience variation in the features of the concept.
One example of that is understanding actors and their relationships in an application. One way to express relationships is at the class level. Understanding inheritance, composition and aggregation as ways to relate different classes with each other is important in order for students to begin to grasp how large systems can be made more flexible and extendable.
Then they must understand how data is related in a relational database. The fundamental relationships are just as important, but it's not a 1:1 translation from how they define the actors in their code.
We have to ensure that every concept, wherever possible, elaborates upon a previously learned concept. Of course, we introduce concepts about software development early in the course for which the students have no previous knowledge that can be built upon. However, once those foundations are laid, we begin the elaborative process.
Functions before modules.
Box model before grid frameworks.
Inheritance before interfaces.
Single Responsibility Principle before MVC.
Reflection is thinking for an extended period by applying current knowledge and experience to previous knowledge in order to build a more complex mental model, and identify patterns. The thinking involves looking for commonalities, differences, and interrelations beyond their superficial elements. The goal is to develop higher order thinking skills.
During an accelerated bootcamp, reflection time comes at a premium. Yet we provide regular times, usually Fridays, where students can take time to work on individual projects for the entire day and think about applying the knowledge they just gained in new ways.
We also encourage students to take breaks from coding while they are not at school. I urge them to get as much sleep as possible. Close the laptop and go do something outdoors over the weekend.
That allows the brain to take a step back from the low-level activity of coding, and build higher order connections between concepts.
Spacing is related to Retrieval and Interleaving. By interleaving concepts in a non-regular time period, and ensuring the appropriate amount of spacing has occurred between the learning and application of a concept, it allows some forgetting to happen.
When some forgetting happens, it requires more mental effort to retrieve the knowledge gained previously in order to apply it again. Again, this hardens the mental connections.
Cornerstone: Social Development
Software is a team sport. the antiquated idea of the solitary hero is completely gone.
There must be strategically placed time slots for each student to complete small tasks individually. This allows the students to have quick successes - which enhances their experience - but also allows instructors the time for individual mentorship and guidance.
However, from the data that I've collected so far, it is clear that the group projects are where the vast majority of learning takes place.
Right now, individual time accounts for, roughly, 30% of a student's time while at school. The other 70% includes in-class lecture, team live-coding, and group projects. These are all scenarios that are highly interactive and build on their social development skills as developers.
This is a ratio that has been tuned over the course of all cohorts that I've taught since January of 2015. If I force them into too much group activity, then they lose the ability to determine their own level of comprehension. This causes stress and uncertainty as they near their completion of the course and are planning for their career search.
At the other extreme, if there is too much individual work, then comprehension plummets because they encounter obstacles more often, and are less likely to approach their teammates, or the instruction staff, to obtain help in overcoming them. Being in a group lowers that hesitance, or friction, and allows them to progress at a more consistent pace.
I believe our observations of this dynamic is a valid application of Vygotsky's Social Development Theory and Constructivism.
Learning to become a software developer is ambiguous, uncomfortable, and remarkably difficult. There is never a "right way" to do things, which is unsettling for many adults.
Here's the basic premises of andragogy - how adults learn.
- Adults cannot be made to learn. I learned this early on. They are here by choice, not compulsion, so trying to enforce a learning schedule on them is pointless. I have to inspire them want to learn.
- Adults learn by doing, not by passive listening, because they are much more self-directed than children. Actively participating in the learning process is critical.
- Adult learning is affected by the different experiences that each adult brings to the group.
- Adults best learn informally.
- Adults need to solve problems instead of being force-fed knowledge.
- Adults are less open-minded with age, and resistant to change. If they are going to be motivated to learn something, they need to know why.
Malcolm Knowles was a major thought leader when it came to the principles of adult education. This infographics shows the 4 major principles that he documented.
In my experiences with the students so far, I've learned that many of them struggle with the fact that we don't teach them "the Right way to write software". We are often asked, "What's the best way to solve this?"
The instructor's answer is always, "The way you did it."
For complex problems, there could be hundreds of possible combinations of code that have no measurable performance benefit over the other, and adults often struggle with that ambiguity. Yes, I could show them how I would write the code, but leads to students thinking it is the correct way, thus stifling their creativity and problem solving skills.
I'm still a neophyte when it comes to product UX, and will likely gain knowledge in trickles because I'm applying all things that I learn to the domain of instruction and learning.
The three main takeaways I use from the field of product UX are as follows.
- Start with users’ needs.
- Do less.
- Design with data.
Given the time constraint, the perfect mix of enjoyment and struggle is what we need to achieve.
Out students need to understand the fundamental pattern of software development. They also need to understand how to implement the core tools that we teach. While they are doing all of that, they need to have as much fun as possible.
If students don't understand how the material is going to help them in their new career, and enjoy the experience of learning it, they aren't getting the education they need. I feel this is especially important in an accelerated bootcamp. Given the time constraint, the perfect mix of enjoyment and struggle is what we need to achieve.
Again, time constraint has made us put a considerable amount of time into defining our Core Path. Looking at everything we can teach, we've systematically eliminated anything that doesn't serve the core outcomes of the course that will make students successful in the first few years of their career.
- Learning successful learning strategies
- SQL & data Relationships
- Single Responsibility Principle
- The language fundamentals
- Core tools (MVC frameworks, component-based libraries, etc.)
Design with Data
I started collecting data back in the Autumn of 2015.
- Self-reported comprehension of subjects
- If the staff was helpful and responsive
- The pace of the course
- If the exercises and assessments were helpful for comprehension
- If they felt we created an effective learning environment
- Assessments of student comprehension by staff
Then in mid-2016, we added a more granular feedback tool. Back then, the entire course was split up into milestones. When the instructor completes the instruction of all the concepts in a milestone, we ask students for feedback about it.
As the team matured and we discovered what data helped us make the best decision about content and strategy, the course evaluation form was updated to help guide us better. All of this data collection has been invaluable. We review the data immediately after a cohort of students have provided it. I look for two things in the data.
- Patterns. We encourage students to provide as much constructive criticism as possible. If they want to tell us we did a great job, that's fine, but I want to hear from them on how we can get better.
- Feedback on experiments. We're lucky enough that we get to constantly experiment with the course content and structure. In the feedback to see if the students remark on the changes, or if their self-reported comprehension in higher.
Once the review is over, and the instruction team gives their report on how the cohort went, we critically evaluate techniques and concepts that may be not working and make adjustments.
The Developer Learner Experience
I don’t enjoy software development because I love coding. I enjoy it because I love to learn.
Changing how I teach, and considering all these aspects of LxD, did not happen overnight. I had to pick the low hanging fruit first, and then collect data. Once the data started to roll in, and we talked about our observations with each other, that's when the real work began of building a great experience for our students.
Since accelerated bootcamps are a new market, it was impossible to find information on what works best in the environment, so I had to research the foundations of adult learning and then apply those principles and see what emerged. It's been fascinating to see how the course has evolved over time, and I do believe I am vastly better at instructing, and coaching than I was two years ago because of this process.