The Deep Dive staff and faculty are deep into preparations for the next cohort of the Java+Android bootcamp, marking the start of its 5th year.
As usual, more than one student in the upcoming cohort has asked me how best to prepare for the bootcamp. Most often, the question is expressed as "Is there some Java introduction I should read, or some coding exercises I should start doing, before the bootcamp begins?" My usual answer to this specific question is that the pre-work itself is intended to be sufficient preparation, but anything beyond that is even better. Then I might direct the student to a site like CodingBat.com, which has good warmup problems for beginners (as well as more challenging problems, grouped by topic).
However, the more general question, "How best should I prepare for the bootcamp?", has at least two more fundamental answers—the second of which can be more difficult (and also more beneficial, in the long run) to put into practice than any coding exercises I can think of.
First, practice using your computer effectively and efficiently. This may sound like sarcasm, or stating the obvious, but it's not: as developers, we need a very different relationship with the computer—and with the keyboard in particular (or an alternative assistive input device for text input)—than most users do.
When writing and editing code, switching unnecessarily between different input devices is usually a great way to slow your work down. Practice avoiding these frequent switches. In particular, if you're using a keyboard and mouse/trackpad/trackball, learn and practice using the keyboard instead of the mouse for these operations:
- Basic clipboard access (cut, copy, and paste).
- Moving forward and backward through the contents of a text file—a character at a time, a word at a time, a line at a time, a page at a time, etc.
- Switching between open programs, and between open tabs/windows within a program.
- Selecting text and other content; extending or reducing the selection.
- Launching and quitting a program.
Beyond using keyboard shortcuts, you'll spend a significant amount of your time as a developer working in a command shell, such as Git Bash, PowerShell, or the Command Prompt in Windows, or the Bash shell in the OS X or Ubuntu Terminal. Shells are command-line environments, where commands are typed and executed one line at a time, or included in script/command/batch files. If you're not already familiar with shells, the pre-work will help you get started. You'll see that almost all shells include features that help reduce unnecessary typing, thereby reducing the opportunity for typing errors; learn and practice using these features.
On the positive side, bootcamp participants will have plenty of opportunity to work on all of this—but the sooner started, the better. Further, if you stay in practice, good keyboard and command-line skills will increase your efficiency throughout your career, even if you're not a touch-typist (I'm certainly not).
This is the tough one: Give yourself permission to be a beginner. It may sound contradictory, especially in the context of an intensive learning environment such as a full-time programming bootcamp, but you will learn and retain much more if you can give yourself permission simply to be a beginner. On the face of it, this may sound easy, but it can be surprisingly difficult—especially for a career-changer who's spent years working to become an expert in their previous field. But this is difficult for nearly everyone: as human beings, we naturally want to be good at the things we attempt to do—even in the early stages, when any such expectation may not be realistic.
Does being a beginner mean that you have to forget anything you might already know about programming? Certainly not. For example, some students come into a bootcamp with real-world programming experience, hoping to expand or update their skills. It wouldn't make much sense to ask these students to ignore what they already know—though they may need to work on resisting the natural inclination to assume that a concept or technique they've learned in the past is directly transferable to what they're learning now.
Instead, willingly being a beginner means that we accept that there are many questions we don't yet know the answers to, and we accept that we will make many mistakes along to the path to mastery. In fact, we'll continue making mistakes from time to time, as long as we keep learning. We won't keep making the same mistakes for very long, but we'll always find new mistakes to make. We've all heard it said that "we learn by doing." Well, that's true—but we learn much more effectively by making mistakes and then working to fix them.
As with the previous recommendation, there's a silver lining here: We've chosen a field (software development) that's rapidly evolving, and will continue to evolve. By learning to be a beginner, and to do so repeatedly—not just in the bootcamp, but in our career—we can keep from getting stuck, holding on to a fixed expertise that becomes less and less relevant over time. Does this mean that we no longer work to become experts in the tools and technologies we use? Not at all: instead, we can choose to move from mastery of one skill or technique to beginning fresh with the next, and the next, and so on.
See you in class!
Here are some resources you may find useful:
"Keyboard shortcuts in Windows", Microsoft.com.
"Mac keyboard shortcuts", Apple.com.
"Useful keyboard shortcuts", Ubuntu.com.
Command shells and scripting
"Windows commands", Microsoft.com.
Bash Reference Manual, gnu.org.
SS64 Command line reference, ss64.com.
Being a beginner
D. Robson, "How a 'beginners’ mindset' can help you learn anything", BBC.com.
P. Sudo, Zen Guitar, Amazon.com. (As the title indicates, this book discusses the value of the "beginner's mind" in a different domain than programming, but it's still an excellent book on the subject.)