"A language that doesn't affect the way you think about programming is not worth knowing." – Alan Perlis. J has been an "emerging language" for 23 years. It's strange in appearance, and requires a style of thinking that feels awkward for a while. Learning is worth the effort, though, because with J, the way you look at a problem is often radically different. Like APL, its predecessor, J sees everything as an array. Computations are expressed as pipelines among functions that apply on the appropriate axis of each array. With some practice, a J programmer learns to fold, flip and manipulate arrays in her mind. The experience is mind-blowing, and the resulting solutions become sleek and simple. Diverging from its APL roots, J introduces "tacit form" (where arguments are implied.) This concept is fundamental to the definition of J programs. For example, inherent in J's syntax is the "verb train", a kind of branching composition. This lets you naturally express programs as relations among functions. J embodies a peculiar mixture of mathematical purity and industrial practicality. If you're excited by combinatorial, concatenative, point-free, or functional programming techniques in general, J will inspire you and give you new ways of seeing problems. If you're looking for a mature scripting language with a stable implementation, you'll find J to be a pleasantly functional workhorse. In this talk, I will introduce you to patterns of thinking that make J coding possible, and provide a rich introduction to the language. You will come away with a clearer understanding of the concepts that are crucial to confident reading and writing of J notation. While no previous knowledge of J will be assumed, people with some previous exposure will get the most benefit.