Something that I emphasize at the beginning of every class is the importance of cultivating what experts call a "growth mindset". Having a growth mindset means:
- Recognizing that computer programming is a learnable, practiceable skill.
- Understanding that there is no "coding gene.", perma.cc. Comfort, practice, and interest make up the bulk of being a good programmer.
- Allowing yourself to be comfortable failing repeatedly and recognizing that failure is part of the learning process.
- Treating yourself kindly.
Software development gives you multiple chances
Lawyers and law students often find that they have to redefine the meaning of being a successful learner when they tackle coding the first time. In many law school classes, you get a single high stakes test at the end of the semester. As a litigator, you may also have a single opportunity to make your case.
Errors are normal in software development
Software development is not like that. The process of computer programming often involves repeatedly running into errors. Errors are an opportunity to learn. In addition, creating a successful product requires iteration. The first draft is often the first chance to do real discovery about what works and what does not work.
Fluency comes with practice; Memorizing is harmful
Law students, especially coming out of the first year, get used to a Socratic method of instruction. Students are given written decisions and expected to synthesize and puzzle out rules. Being called on unexpectedly is a chance to shine or to be embarassed in front of a hundred peers. Questions in class are given cryptic responses. As a result, students learn to keep questions to themselves, and to wait to ask or share what they learn until they are sure that their answer is right.
In programming, in contrast, the art of looking up answers is a meme that never dies. Programming rewards efficiency, and re-writing a solution that already exists is discouraged. It is not just okay, but expected to use libraries, prewritten code, and samples to reduce reinvention of basic components of your product. There is plenty of room to demonstrate your individual learning while using the available resources to:
- Look up model answers to similar problems;
- Try and fail and try and fail until something works;
- Ask for help when you are stuck, even if you think the problem is embarassingly simple.
Software development is a creative endeavor that can be truly exhilarating. There is the struggle of creation and then the excitement and joy of producing something that can live on in the world. Most of all, it should be fun.