Red-Green-Code

Deliberate practice techniques for software developers

  • Home
  • About
  • Contact
  • Project 462
  • CP FAQ
  • Newsletter

The Role of Questions and Answers in Learning

By Duncan Smith Leave a Comment Dec 16 0

Cantor and Hopper

Here are two approaches you could take to learn something new:

  • Passive review: Consume an explanation of the topic you’re trying to learn. For example, read a textbook chapter, watch a video lecture, or read an online article on the topic.

  • Active recall: Do an activity that requires you to remember something that you know about the topic. For example, go through a set of flashcards, write an essay, or take a practice test.

It shouldn’t be hard to guess which of these approaches is more effective at reinforcing what you know about a topic. Although you have to consume new information at least once through a lecture or other means, continuing to passively consume the same information repeatedly doesn’t help you learn it much better. The brain seems to take retrieval more seriously than storage: neural connections are strongly reinforced when information is actively used, but information that merely arrives through the senses receives a comparatively weak boost.

« Continue »

Software Methodologies for Very Small Teams

By Duncan Smith Leave a Comment Oct 14 0

Bootstrap DNA

When I was working on my undergraduate degree in Computing and Software Systems, I took a class in software engineering. The purpose of this class was to introduce us to the range of real-world processes that professionals use to develop software, processes that didn’t often come up in our academic work. That goal turned out to be a tall order for a three-month class, given the scope it tried to cover. It might have been more effective to pick one process and use it for a group project. Nevertheless, one exercise I remember from the class is matching software development processes to types of projects.

Here’s the type of question I’m talking about, from a University of New Brunswick class assignment:

Giving reasons for your answer based on the type of system being developed, suggest the most appropriate generic software process model that might be used as a basis for managing the development of the following systems:

a) A system to control anti-lock braking in a car

b) A virtual reality system to support software maintenance

c) A university accounting system that replaces an existing system

d) An interactive travel planning system that helps users plan a journey with the lowest environment impact

« Continue »

Summer Review

By Duncan Smith Leave a Comment Aug 5 2

Summer 2015

It’s summertime here in the Pacific Northwest, and seven months into the first year of this blog. After thirty weekly posts, I thought it would be a good time to consider the themes that have come up so far this year. If you’re a new reader, I hope you’ll find this to be a useful primer.

« Continue »

Ignore This Advice

By Duncan Smith Leave a Comment Jul 29 0

Take My Advice

When you’re stuck on a programming problem for a while (everyone has their own time threshold), it’s customary to look for a hint. If you’re working on a competitive programming problem from a past contest, they’re easy to find. Problems on uHunt are categorized by algorithm, so that’s a big hint already. Popular problems often have editorials (I have written a few myself) or even complete source code in multiple programming languages. On the other hand, if your problem has to do with a programming language or tool rather than a puzzle, Stack Overflow is the standard resource.

But what if your problem is more general than a programming puzzle or language quirk? What if you have the type of question that gets closed on Stack Overflow? In other words, what if you’re looking for advice.

« Continue »

The Problem With Codecademy

By Duncan Smith Leave a Comment Jul 1 0

Academy of Athens

I believe in the importance of practicing programming fundamentals, especially through programming puzzles. But puzzle learning works best when you already have some experience with the programming language you’re using to solve them. By prompting you to exercise a core set of programming fundamentals, puzzles help strengthen basic coding skills. To get those basic skills in the first place, you need a starting point for learning. For a few years now, coding instruction in the browser has been a convenient option.

« Continue »

Unit Testing the Java Class Library

By Duncan Smith Leave a Comment Jun 24 0

Latte Art Robot

Unit testing is a controversial topic in developer circles. Opinions range from Most Unit Testing is Waste to You are not allowed to write any production code unless it is to make a failing unit test pass.

For those on the pro-unit testing side, there are numerous benefits to the practice, especially the test-first variety. In my experience, writing unit tests does provide a net gain in productivity compares to programming practices that don’t use them. These are the benefits that I find especially useful:

« Continue »

The Puzzle Approach to Coding Mastery

By Duncan Smith Leave a Comment Jun 17 0

Puzzle

Programming is a skill that’s easy to start learning. You can head over to a site like Codecademy and get up and running instantly. But once you finish a few introductory courses, it’s not as easy to keep making progress. You need another approach.

« Continue »

Asking for Advice is Easier than Taking It

By Duncan Smith Leave a Comment May 27 0

Advice

We have good options these days for getting answers to programming questions. Stack Overflow provides answers to fact-based questions. They can be targeted questions like How to sort a Collection? or even somewhat speculative questions like Why is there no SortedList in Java? that can be answered factually (does Java provide a list data structure that is always sorted?). Beyond that, things can get tricky on Stack Overflow, which has strict policies about question topics. For example, questions like Best ways to teach a beginner to program? tend to get locked and/or closed. Even on Programmers StackExchange, a question like How to deliberately practice computer programming?, which happens to be the top Google search result for deliberate practice for programmers, is considered off-topic. (Update 6/18/2016: And the question has finally been deleted).

As essential as Stack Overflow is for programmers, sometimes you need an answer to a question that doesn’t work there. For those types of questions, there is Quora. Although Quora does have mechanisms to maintain content quality, the rules are much looser. The advantage of this approach is that you can get answers to a wider variety of questions. The disadvantage is that it’s a lot harder to control quality. For example, Quora gets bombarded with questions of the form Is it too late for an X-year-old to learn how to program? But questions like How should I get started in competitive programming?, which would get closed on the Stack Exchange sites, can actually collect some useful answers on Quora.

There are other sources of programming information that people use for questions and answers. Reddit and Hacker News come to mind. They have voting and, in the case of Reddit, even an “accepted answer” feature. But in my experience, these sites are not as effective when used for Q&A. They are mainly designed to show a link to an article followed by comments from users. This can be adapted for Q&A, but it’s easier to use a site that was designed from the ground up for questions and answers.

« Continue »

Building Mathematical Thinking Skills

By Duncan Smith Leave a Comment Apr 1 0

Pumpkin Pi

When people hear the term competitive programming, they naturally think about programming contests and rankings. People who are encountering the term for the first time are just using the literal meaning, while those who are familiar with the topic think about the top competitors that they hear a lot about. But someone who is just starting to learn to solve the types of problems found in programming competitions may see things differently. In my experience, introductory problems often challenge mathematical thinking skills more than programming skills. Only a small subset of a programming language is required to solve these problems, and there’s plenty of time to look up syntax (since beginners are often not taking part in a timed competition). However, most problems (other than the very easiest ones) are structured to require mathematical thinking.

« Continue »

The Missing Piece of the Computer Science Curriculum

By Duncan Smith Leave a Comment Mar 25 0

Allen Center

Despite the increasing availability of alternative options such as online learning sites and coding boot camps, many students who are interested in programming still pick the traditional approach: getting a Computer Science degree. If you plan to do academic research, a degree is really the only option. But for someone who wants to get a job as a programmer, there are both advantages and disadvantages to a traditional degree.

« Continue »

  • « Previous Page
  • 1
  • 2
  • 3
  • Next Page »

Stay in the Know

I'm trying out the latest learning techniques on software development concepts, and writing about what works best. Sound interesting? Subscribe to my free newsletter to keep up to date. Learn More
Unsubscribing is easy, and I'll keep your email address private.

Getting Started

Are you new here? Check out my review posts for a tour of the archives:

  • 2023 in Review: 50 LeetCode Tips
  • 2022 in Review: Content Bots
  • 2021 in Review: Thoughts on Solving Programming Puzzles
  • Lessons from the 2020 LeetCode Monthly Challenges
  • 2019 in Review
  • Competitive Programming Frequently Asked Questions: 2018 In Review
  • What I Learned Working On Time Tortoise in 2017
  • 2016 in Review
  • 2015 in Review
  • 2015 Summer Review

Archives

Recent Posts

  • Do Coding Bots Mean the End of Coding Interviews? December 31, 2024
  • Another Project for 2024 May 8, 2024
  • Dynamic Programming Wrap-Up May 1, 2024
  • LeetCode 91: Decode Ways April 24, 2024
  • LeetCode 70: Climbing Stairs April 17, 2024
  • LeetCode 221: Maximal Square April 10, 2024
  • Using Dynamic Programming for Maximum Product Subarray April 3, 2024
  • LeetCode 62: Unique Paths March 27, 2024
  • LeetCode 416: Partition Equal Subset Sum March 20, 2024
  • LeetCode 1143: Longest Common Subsequence March 13, 2024
Red-Green-Code
  • Home
  • About
  • Contact
  • Project 462
  • CP FAQ
  • Newsletter
Copyright © 2025 Duncan Smith