Bunkobons

← All curators

Ana Bell's Reading List

Ana Bell is a lecturer in the Electrical Engineering and Computer Science Department at MIT for "Introduction to Computer Science and Programming using Python", "Introduction to Computational Thinking and Data Science", and an Instructor for the same courses on edX.org . She received her PhD in computational biology from Princeton University in 2013. In 2017, she published "Get Programming: Learn to code with Python", with the goal of helping beginners learn their first real programming language.

Open in WellRead Daily app →

Computer Science and Programming (2018)

Scraped from fivebooks.com (2018-04-30).

Source: fivebooks.com

Charles Petzold · Buy on Amazon
"I picked it because it tells you how a computer works. A lot of times, people think that the monitor is the computer. I don’t know how common of a misconception that is, but it is definitely one! This book talks about all the chips and the gates, and it goes from a very low level all the way up. It gets you to use your imagination to virtually build a computer. It’s easy to read, you can lie down on the couch and enjoy it—it’s not so much of a textbook. It demystifies the magic of a computer and what it is. There is no theory involved, rather it presents the components and how they come together. Exactly. If you don’t want to learn how to code but still want to learn what a computer is and a little bit of history behind it, this is a very good book. It goes all the way from the chips that make up the computer, up to the peripherals like the screen and keyboard. The details of how we build computers haven’t changed since Petzold wrote the book. But the size of things has changed! Yes, the first book tells you about the hardware. Then if you want to learn how to program, you’ll need to learn a programming language. To do this, you don’t have to use a book, there are many tutorials online. The first reason is that more people want to learn how to program, and languages like C/C++ and Java are cumbersome, so the syntax is not as easy to understand. What makes Python interesting and easy to learn is that it’s like a rough translation of English into code. You’re speaking this sort of broken English, and if you read Python code out loud, you can often tell what’s going on, which is nice. In Python you also don’t have to declare types of variables, as you’d have to do in C/C++ or Java; that makes it even more accessible. You don’t have to think about that aspect, the language does it for you. Having eliminated these annoying little things is what makes Python enjoyable to everyone. “It’s tough to understand that an algorithm is just a recipe, and even tougher to come up with new recipes yourself” The other reason is the push towards data science , and generally working with a lot of data. It makes Python nicer to use, because it’s close to languages like Matlab or R. With Python, you can write easy and quick scripts, without too many pesky language details. A lot of people who are not computer scientists or programmers want to get into this field of data science and analyse the data that’s coming their way. Usability makes Python a very attractive language. Python is the easiest to learn, and is enough if you’re not going to work in the field of computer science and programming. Beyond that, Java is the other big one that I would recommend, and then C++. You have a lot more control in those languages and your code becomes much more efficient. If you’re dealing with a critical application like flying an airplane, you would not want to write that software in Python! There’s no right or wrong way to teach programming, but one specificity is that I don’t actually get into code before chapter 4. I focus on getting the reader to understand what computer science is, and getting their head around that way of thinking about things. “What makes Python interesting and easy to learn is that it’s like a rough translation of English into code” One of the earliest chapters is “principles of learning a programming language”, the fact that you only do what you’re told to do. As humans we can infer things; if someone tells you to make dinner, you know that means going to the kitchen, taking pots and pans, using ingredients, etc. But if you said “make dinner” to a computer, it wouldn’t know where to start. So I’m trying to get readers to understand that a computer needs very specific commands, because it doesn’t know how to infer anything. Then the book goes through learning Python, while continuing to stress those points along the way. It’s funny you should say that. When I started thinking about this interview and the books I would choose, my first reaction was that you almost don’t need to read books anymore. It’s much easier and quicker to search online. When you have a question, chances are that several people already asked and answered it on sites like StackOverflow. Books can’t compete with that. What you can get out of programming books is the thought process behind the ideas. Language takes a back seat to the concepts presented, in the sense that ideas in a book should be universal to any programming language. They should be relevant to beginners as well as people who have been programming for 20 years, and as relevant today as when people started programming. I tried to focus on books that present this: not books that are language-specific, but books that present ideas you should be aware of, no matter your programming background and what year this is."
Robert C. Martin · Buy on Amazon
"This book is going to show you how to write code that is readable by yourself in the future, or by somebody else. Martin wrote it in a very approachable way, and what I liked when I read it is that it starts talking about code right away. It actually starts with the most basic thing, which is how to name objects in your code. When you’re programming, you’re working with objects all the time; so to make your code readable, you need to use proper names for your variables. That’s the first chapter, and this is often overlooked so I was happy to see that. Get the weekly Five Books newsletter The tone of the book is quite conversational. Again, you can sit on the couch and read it; you don’t need to code. You can actually enjoy it if you don’t know how to program at all. Each chapter begins with a little scenario, often a conversation between two people, and it sets the scene for what the chapter will be talking about. That’s very helpful, and it makes it a very nice book to sit down with and read through. Well, I still haven’t been able to convince my students that it’s important! I don’t know if it’s possible. Sometimes even I don’t do it and regret it later. It’s a matter of not doing it, and then coming back to your code weeks later and not remembering what you did, and learning from those experiences! Two of the books I chose focus on making your code readable; so yes, it’s very important. First, well-crafted code is readable code. This means having comments that describe the thought process and what the code is trying to do—not how it’s doing it. Good variable names would also fall under that category. The other part is organising your code. That means using the right amount of classes and functions, and using them in the right away. You don’t want to write too many and over-engineer your code, but you shouldn’t write too few either so that the few you have are complex and not easy to understand. You want to have the right amount to make them useful and reusable. Support Five Books Five Books interviews are expensive to produce. If you're enjoying this interview, please support us by donating a small amount . Those are the two main conditions to perfectly-crafted code. The balance between them is something that you can’t learn on you own so well. That’s where you would need a lot of practice, or working with somebody else, or reading somebody else’s code. Those are great ways to discover bad pieces of code, but also programs that you’ll find perfect and completely understandable. This craftsmanship part is where the creativity comes into programming, what makes it different from being only about math. It’s closer to learning English in this way."
Steve McConnell · Buy on Amazon
"It’s a pretty long book. It’s like Clean Code but it goes further. Clean Code gives examples in Java; this one gives examples in several different languages, to emphasize that the concepts it’s teaching aren’t language-specific and should be applicable to any language. It doesn’t teach you the code, it teaches you the software construction: commenting, classes, debugging, refactoring… While Clean Code teaches best practices to individuals who are writing code for themselves, Code Complete is for people working in industry, writing software for companies, which means they’re giving their code to other people. It even has little checklists at key points in the book; if you are in industry, you can make sure that your code is readable and debugged by going through these checklists and making sure you’re touching upon all aspects. So it’s definitely more geared toward industry. If you have an interest in going into that, this would be the book to read. It’s a pretty old book, but it’s still very relevant. I remember my dad reading it. Code Complete goes a step beyond cleaning your code, and makes sure that it is also deployable, or works at a larger scale in the context of a company or an industry. But having clean code would be enough to be a pretty good programmer."
Robert Sedgewick & Kevin Wayne · Buy on Amazon
"The book presents some very basic algorithms, using Java. It’s written by two authors I’ve worked with in grad school at Princeton. There are two main books on algorithms used in universities, and this is one of them. They both present the same important algorithms that you’ll need to know, but this one does it in a much more approachable way. Every algorithm you see in the book is also implemented in Java, so if you want to run it, you can copy the code and execute it yourself. I like that it’s so practical. It doesn’t bog you down in mathematical terminology and proofs, which I also like. I wouldn’t recommend sitting on the couch with this one, because you’ll need to be a bit more proactive. But as far as algorithm books go, this one is pretty approachable. I would say it’s also helpful if you’re going to go for programming interviews. They usually ask you to either write some algorithm or piece of code, and reading this book beforehand would be very useful to get ready. That’s a great point. Algorithms sound like something mysterious, but they’re not. They’re recipes, with a series of steps to go from an input to an output. It’s very simple, and there is nothing mysterious or malicious about that. If you’re going to learn computer science, or if you want to start programming, you should learn something about an algorithm at some point. And even the general public should know that there’s nothing crazy going on with algorithms, even though that word is being thrown around without much meaning attached to it. It’s very straightforward, in the same way that you would bake using a recipe, or build a piece of Ikea furniture."
Benjamin C. Pierce · Buy on Amazon
"This final book is pretty advanced. It’s about programming language design. The best way to explain it is to draw a parallel between the physical world and programming languages. If you think about the physical world around us—objects, things in nature, etc.—we have come up with mathematics to help us describe what’s happening, in a systematic and logical way. Computer science is the same thing, but for what’s going on inside a computer. And around this idea of computations, you can build type systems. Type systems are the maths we’ve come up with; they help us describe computations or what’s going in a program, what operations are happening. They help us reason about what a program is doing, and often help programmers avoid mistakes when writing code. For example a type system might be able to say: ‘you’re trying to multiply a word by a decimal number, that doesn’t make any sense.’ “You do need a strong grasp of maths, but not the traditional maths people think of ” It’s not a book for beginners, but it’s a good book if you’re interested in the theory behind programming languages. In the first book you’ve learned about the hardware, and in the next books you’ve learned about good code, and then algorithms. Now you can learn about programming languages themselves: how to write one, and how they do what they’re supposed to do. That’s a great question. You do need a strong grasp of maths, but not the traditional maths that people think of. When people think of maths, they think of operations, adding things, doing calculations. The mathematical grasp that you need is more on the logical side: thinking about binary choices—something that’s ‘true’ or ‘false’. This logical way of thinking, which is the way a computer thinks, is also a branch of mathematics. Unfortunately you only study it in undergraduate education, but you encounter it in life in a lot of ways. When you’re doing an online quiz where you follow a flowchart to find what kind of dog you are, you’re using logic to figure out something. That kind of maths is very useful, and that’s what gives you the mind of a programmer. But you have to change your thought process to think of statements in a programming language instead of pictures of dogs! Get the weekly Five Books newsletter There’s definitely improvement at many levels of education. A lot of women are taking my introductory course in computer science, because they recognise that it’s a useful skill to have. In my class we have about 40% women, which is pretty high. Our staff is somewhat large—we have 15 teaching assistants—and the majority of them are actually women. A lot of times, female students will take the course, they’ll love it, they’ll major in computer science, and towards the end they’ll want to give back. And I love that, because they often want to be teaching assistants, and they’re very dedicated and they do a very good job. And because 80% of our staff is female, then that cycle starts: the students taking the class see that the majority of TAs are women, so they think ‘I can do this too!’, and that helps push rates even higher. Of course the push towards general computer science education in high school will definitely help as well. I would say just go for it. Pick a language, stick with it, and learn as much as you can. It doesn’t matter what language, even if you start with a visual language like Scratch, that’s awesome. It starts to get you thinking about computer science, and the logical way that computers think. That’s a huge step towards succeeding in computer science post-secondary school."

Suggest an update?