In-Memory Computing Essentials for Architects and Developers: Part 1