Game AI Pro 1
2024-03-13
The first few chapters of the book talks about the human body and how neurology and signals within your body for things like reflexes are analogous to AI processes. Then the rest of the book jumps around and covers a lot of ground but never goes into the nitty-gritty details of any of the topics. This is fine and the book was a great primer on what kinds of AI is available and what the strengths, weakness, or use-cases for the different varieties of AI you might use in games. Some of the information might be a little dated - they talk about the advanced GPUs having hundreds of pipes - but the core concepts are perfectly applicable today (10 years after publication). If you are interested in general game AI and want to get a feel for the options available, then this is probably a pretty good place to start; if you are interested in a particular type of AI, there are probably better options.
Game Programming Patterns
2023-10-29
This is a fairly no-nonsense look at programming patterns that are specifically, but not exclusively useful for games. Each patterns starts out with a basic definition and a simple use case for when the pattern might be applicable. Next, through pared down C++, a simple code example is given; this is often built up in a few steps so the reader can follow what is going on. After the pattern is thoroughly explained there are usually a few warning or gotchas to look out for when using the pattern. I like how the author, on several occasions, stresses that even though a pattern can work you should, when possible, opt for the simpler solution unless you are certain you need the full power of some of the more complex patterns.
Godot 4 Game Development Projects - Build Five Cross-platform 2D and 3D games
2023-09-07
After a solid introduction the first project is presented and explained in deep detail so that someone who has never used Godot or a game framework in general will be able to follow along. In the beginning many things are shown with screen shots to hold your hand as to where things are and give you an example of how your project should look. As the book progresses, theses screen shots are less common and the description of what you are supposed to do gets more terse, forcing you to have paid attention to and understood the previous lessons. I think that the difficulty curve utilized in this book is done very well so that it takes you from no understanding at the beginning to having a solid foundational understanding by the end. Overall, very pleased with the book and confident that what I learned will position me to successfully tackle more complex aspects of Godot and game dev in general.
Design Patterns - Elements of Reusable Object-Oriented Software
2018-09-13
This book, structured as a catalog describes the original software design patters, most of which are still used today. Its main goal, as it clearly states, is to provide software designers with a common vocabulary so that communication can become more concise. Each section first introduces one of the three main categories of patterns - creational, structural, or behavioral. Next, each section describes, in fair detail, the applicability, the pros, and the cons of each pattern, while also both motivating its use and offering ample sample code. This book, while useful for learning the patterns themselves, shines as the catalog, the dictionary it is laid out as; it is a great resource that allows you to easily skim through the patterns to jog your memory into deciding which pattern may be most applicable to your current problem.
Clean Code
2018-09-03
Being clean today is slower, but it will be faster overall. When you write sloppy code, say, to reach a deadline, it might seem like you are saving time, but the first time someone, which very well may be you, has to make sense of the rat's nest left behind in a mad dash to get it shipped, all that 'savings' is lost. By paying attention to all of the little things as they come up, by making many small good decisions, you will reap a cumulative positive effect, a big payoff, down the road. To get these points across, many little nuances are explored; the most important probably being the names you use and how you design self contained, single responsibility functions. Additionally, design patterns, formatting, unit tests, comments, and successive refinement, among other topics, are covered with examples and several lengthy case studies provided for the Java language.
Software Architecture with Python
2018-08-29
You can't cover every aspect of architecture (or design) in one book. Every single chapter's topic is more of a crash course and could easily (and have been) discussed in their own book. That said, it was an interesting read for someone who has no plans or desires to build a system at the scales the book discusses. So who and when should you read this? Probably best suited for someone with programming experience that wants to scale up their career.
Git Essentials
2018-08-20
After a basic how-to-install introduction you are thrown into the tutorial straight away, learning the basic commands, like init, add, and commit, to get you up and running. After the absolute basics are covered, the book moves toward a more, but not totally complete, understanding of working with local repositories. This is extended to working remotely, with more niche commands, and finally with an overview of the configuration system within Git. Now that you have an understanding and a tutorial under your belt, the most important part is covered; best practices for commits and the various workflows your team can adopt to simplify development. Finally there is a small pair of chapters on migrating from Subversion and a list of resources that lead to other articles, books, tutorials, cheatsheets, and the like, mostly online.
Object Oriented Versus Functional Programming
2018-08-20
The book opens with a short introduction that tries to bring the two competing programming philosophies together. Next a whirlwind tour of the lambda function is covered from the perspective that you already have a solid grasp of general programming principles. The SOLID principles are shown to be complementary or even reinterpretations of functional programming aspects; the strongest example in my opinion was showing that Liskov principle is superfluous in functional programming and, as the 'compose don't inherit' line of reasoning is adopted by object-oriented programmers, it is (slowly) losing its place in the object-oriented world. Two design patterns, command and strategy, are shown to be nothing more than clumsy implementations of functional programming; instead of creating extra classes and interfaces, you can simply pass in functions (as long as they are first-class citizens) to constructors at runtime. The conclusion is that the future of programming languages is neither functional nor object-oriented, but hybrid.
Git for Humans
2018-08-15
First you'll learn, less than exactly, what version control in, and how you've probably used some rudimentary version control already, without ever knowing it. Next you'll learn a handful of basic commands that will take care of 90% of your day-to-day needs. While you can use Git completely locally, if you want to collaborate you'll inevitably need to share your work; this is done with remote repositories, of which the basics are covered.. Finally you'll take a stroll down memory lane with the log command, which allows you to view the history of your project in any number of useful formats. While this is only the most basic of introductions, there are several quality links provided to more detailed books, online references, and tutorials to build on the solid foundation thus provided.
Good Habits for Great Coding Improving Programming Skills with Examples in Python
2018-07-28
It starts off fairly strong with a focus on readability and style, though much of this is subjective and/or determined by your shop style, which boils down to consistency more than anything else. He talks about not being clever or using tricks since they are often hard to read, but then goes on to mix his message while breaking his own advice by being clever multiple times. There are several mentions of problem solving, devoid of any actual advice aside from the suggestion to read Polya. More haphazard advice litters the remainder of the book; advice on comments, tests, and loads of other stuff that isn't necessarily bad, but the tips are all over the place. Lastly there is a few chapters on algorithms and dynamic programming that don't feel like they fit at all.
Practical Python Design Patterns
2018-07-21
The patterns are, overall worth understanding; the more tools you have in your toolbox, the more exposure you have to have various problems can be decomposed, the better. That said, some of the coding style I think could be more harmful than useful. In general I think there is too much emphasis on a Java-like use of abstract base classes (even when you can finally omit the abc), something that doesn't feel like it is in the spirit of python, but, they are a tool, and have their place. My second issue is that there are simply too many classes with 2 methods, 1 being __init__; It feels like the author has overdosed on the object oriented Kool-Aid, sees every problem, ironically after talking about the right tool for the right job, as a problem that should be solved with OOP. The best part of the book, in my opinion, comes in chapter one where there is some solid advice on learning, continued learning, deliberate learning.
Masting Python Regular Expressions
2018-07-12
The book, short and sweet as it is, still has space to devote the first chapter to the history of regular expressions, not failing to mention the grep trivia. After the history is history, it moves on to cover, at first, the basics, including building patterns and match objects. Next it moves into slightly more advanced territory with groups and backreferencing. The most advanced features covered are matching with look ahead and look behind, both positive and negative. It finishes up with some tips on optimization and the advice to not prematurely optimize.
Practical Vim 2E
2018-06-01
This is meant to be picked at, not read cover to cover (I read it cover to cover... and I agree, not all at once). It is set up in a less typical cookbook style, where each tips is grouped with other tips that can be construed in the same vein, but the tips are meaty enough to go into some detail while still providing the curious reader a jumping off point for deeper understanding. The examples are nice, not too contrived, and apparently available on either the website of github. Overall I say this book is highly recommended, no matter what level your vim proficiency might be at. The only word of warning, avoid the vimcasts; the audio is horrible.
Basics of Linear Algebra for Machine Learning - Discover the Mathematical Language of Data in Python
2018-05-29
Slow to start but then picks up the pace as it moves along. gIt is not proof heavy; if you want a full blown linear algebra book this is not it. There are plenty of examples of how to implement various linear algebra operations in python/numpy that are extremely well explained. For someone familiar with the concepts, either python or linear algebra, it may seem a little remedial. All in all it was a little too simple for my tastes (but an enjoyable, breezy, casual read), but as an introduction used before moving on to more advanced books, or for someone that wants to dive right into machine learning who is OK with a less nitty-gritty and more practical approach, it is ideal.
Thoughtful Machine Learning with Python
2018-05-14
This book starts of extolling the virtues of test driven design and the SOLID principles, which, while respectable, seem somewhat forced and out of place in a machine learning book. Next, much of the code is written from scratch, not utilizing libraries and giving a look under the hood. The code itself, while complete, lacks the thorough explanation one would hope for in a book for beginners. The equations underlying the algorithms are presented, but, like the code, lack explanation or proof. All in all the book tries to cover too much in too few pages.
Python - Deeper Insights into Machine Learning
2018-04-08
This is a straightforward, no nonsense book, or three, that will allow you to go from zero understanding of machine learning to quite advanced, assuming you put in the required time and effort. The code provided is detailed, extremely well explained, often line-by-line, and gives you a solid intuitive basis that will make your journey into the more advanced areas more concrete. The book starts slowly and then moves forward at a steady, but more than manageable, pace, building on the previous, often simplified examples using SKLearn, to reach more modern and advanced techniques using libraries such as Theano and Keras to leverage your GPU. It lacks some of the detail you might want when it comes to mathematical proofs, but it does include plenty math to whet your appetite; supplementing this book with a follow up with an appropriate linear algebra/algorithms math book would probably be ideal. Lastly, at the end of each chapter in the third module there are numerous resources provided for further study in regard to the more advanced topics.
Building Machine Learning Systems with Python
2018-03-23
The first, and most important, point that the book tries to instill is that most of your time will be spent on feature engineering - preparing the correct attributes to produce the best results - not on writing or even implementing the other, sexier, aspects of machine learning. As the old adage goes, garbage in, garbage out. Once your data is cleaned up, there are many different algorithms covered that one can use to build a model, clustering, bag-of-words, K-Means, K-Nearest Neighbors, regression, Bayes, or even a combination of several methods, known as an ensemble. The examples are generally applicable to real life problems one might face, text/sentiment analysis, recommendation systems, and audio/visual classifications. It concludes with an introduction to cluster, or cloud, computing that will allow you to take advantage of more powerful processing through the python library 'jug' and to quickly set up your first cluster on Amazon Web Services (AWS).
Mastering Machine Learning with Python in Six Steps
2018-03-16
Chapter 1 is, as usual in many of these kinds of books, a whirlwind introduction to python that is safe to skip or skim. The next few chapters introduce machine learning's fundamentals, supervised versus unsupervised learning, various regression and classification techniques, as well as timed series forecasting. The remainder of the book builds on these concepts with model diagnosis and tuning using probability, cleaning up and engineering the features of imbalanced or 'dirty' data, in addition to introducing variance, biasm hyperparamaterization, grid/random searches, and ensemble training, chaining multiple algorithms together - all important topics that add to an overall understanding of machine learning. Another area, of much current interest, is that of text mining that can be employed in sentiment analysis or recommendation systems. Lastly neural nets, what is often called deep learning, is covered in a less rigorous fashion as it is an extensive topic in and of itself, plus it is on the cutting edge of algorithm development.
Cryptography and Network Security Principles and Practice
2018-03-02
After a brief introduction to historical cryptography, a quick and dirty crash course of the mathematics required to understand most of the book is presented. Various cypher types, or modes, are discussed, including block, stream, chain, feedback, and counter in addition to symmetric/asymmetric cyphers, public/private key encryption and exchange, particular attention is paid to the Diffie-Hellman method of exchange. Some of the cryptographic algorithms covered include DES, AES, and RSA; these are presented alongside various hashing algorithms and it is explained how the use of certain combinations of these tools can provide, integrity, confidentiality, authentication, or any combination of these to data. The cryptographic section concludes with a pair of chapters on trust/key management, and user authentication to close a decidedly well rounded and complete examination of the aforementioned topics. The network security portion of the book covers everything from transport layer security like HTTPS and SSH, wireless security, email security, and includes a final chapter on IP security.
The Designer's Guide to VHDL
2018-02-01
The Designer's Guide starts off with pretty basic concepts such as data types and logic, both combinational and sequential. Next it moves into modeling, procedures, functions, components, aliasing, generate, and generic statements. It discusses a number of more exotic features, like configurations as well as access types that have limitations, if even available, during synthesis. Included are a few case studies, one on DSP pipelining, another on memory design, and a final one on the gumnut, a simple soft core processor. All in all it is a great reference manual for VHDL, assuming you already have knowledge of the digital design process and know what you want to implement.
Fundamentals of Digital and Computer Design with VHDL
2018-01-14
The book is divided into three parts - fundamentals, basic computer design, and enhanced computer design. The VHDL is limited in detail, but it more than makes up for it with many examples. It includes a stroll through some of the historical programmable logic devices that you might run into maintaining legacy systems as well as giving a brief introduction to the manufacturing process associated with various integrated circuits. The last two-thirds of the book focuses on computer design that builds a basic and then slightly more advanced computer on the foundation you should have from reading the first third of the book. Finally there are a large number of problems at the end of each chapter (without solutions) and a host of labs in the appendix that can be worked to give yourself experience in VHDL design, something you can't get from reading alone.
VHDL 101 - Everything You Need to Know to Get Started
2017-12-08
The book is divided into two main parts, the first of which is a review (if you read FPGA 101 first) of coding styles (behavioral, structural, register transfer level) and the design process including synthesis, simulation, and implementation, while the second part is further divided into a 3 pass approach to VHDL, going deeper with each iteration. Part two starts off with the basics including entities and architectures, signals, data types, operators, concurrent statements which give you a solid foundation to build on. The next section builds on this foundation with the introduction of processes, variables, sequential statements, and some of the limitations of simulation versus synthesis. The last, and most detailed, iteration introduces libraries, generics, the generate statement, loops, functions, procedures, and packages. It concludes with a look at a few common libraries and a nice quick reference appendix that is helpful when first learning a language.
Python Algorithms - Mastering Basic Algorithms in the Python Language
2017-03-22
It starts out with an overview of big O running times. Next the basics of graphs and trees are discussed, with more advanced discussion later. Many of the common mathematical equations and concepts are covered as well as more advance topics including proofs, NP hardness, and recurrence equations and their applications and running times. Searching and traversing are covered with basic concepts like depth/breadth first search as well as more advanced algorithms. The appendixes list algorithms, problems, and terminology.
The Pragmatic Programmer
2017-01-04
As a programmer you should always be on the lookout for new technologies, improved techniques, and opportunities to refactor your source. Since user requirements are usually not be set in stone, your abstracting away from a specific 'requirement' may produce a simpler or more robust system. Code should not be duplicated as per the DRY methodology and functionality should be sufficiently delegated via modularity (including teams). The model-view system assists in DRY avoidance, especially when drawing from universal data sources like plain-text files for things like configuration or schema. A version control system and automated tests can help locate and remedy a bug as soon as it becomes a bug.