Computer Programming Books I own

12:15 PM 3/10/2019

I enjoy reading books and plan on building a a large collection that one day turns to be a sizable library. That is how Yale got started. Here is my list of computer books to read and study:

So far this month I have bought "The art of programming", "The Unix and Linux Administration Handbook", and "AWS System Administration:'Best Practices for Sysadmins in the Amazon Cloud'". Unfortunately the 'best practices' is delayed and this was to be the one I needed soonest to brush up before my convention in Santa Clara on the 27th. The 'art' had been on my list for some time now as it deals with stronger math and explores algorithms in depth. I had gotten bored of pure math and wanted to use programming as a way to break up the monotony. Amazing how many uses for math there is in every field! The Unix book is highly recommended and I both the newest edition as it covers AWS as well but more from an administration point of view than a developer operator approach. I believe these books will serve me well so that I may educate myself and pass the knowledge onto others.

My general opinion is that from complete beginner to knowing all things PC a journey might take the form of:

images art of programming images art of programming images art of programming images art of programming images art of programming images art of programming images art of programming images art of programming images art of programming images art of programming unix and linux administration

Step 1: Learn Administration

In my mind this is the first and most basic beginner step. Traditionally this deals with building a computer, knowing all the parts how they operate and configuring them, format and partition the hard drive, install an operating system of some sort so that there in a graphical user interface (GUI or "gooey"), setup accounts and decide if they should require passwords, finally install and maintain software.

When someone buys a Windows (or any) computer they are the administrator! It is their job to fully vet the equipment and be responsible for utility, routine maintenance and security tasks. Given that this is fairly obvious why is it that some many people who own computers in the dark about the most basic responsibilities that PC ownership comes with? It has been said that it all boils down to creating jobs for service and industry professionals but this makes little sense and represents a poor business model. The concept of creating dependence through a confused customer base only leads to hurt the computer industry as a whole. The less knowledge a population is on a given product the less likely they are to some money and time on it whether as a profession or hobby. Ask yourself who is more likely to spend time researching the latest tech them dropping premium dollars on it to have the best gear, geeks (no offense) or lay persons? My conclusion is that the tech minded group who posses a greater interest the the subject will also be more inclined to spend and upgrade their current systems and may have many while a less informed person who be satisfied to get buy with just one. So why is it that as long as I can remember the debate has been centered around Windows users are less skilled and knowledgeable therefore making them ripe for exploits by some super hacker running a Linux box? This stemming from the belief that if you use Linux then therefore you must be able to piece anything together and turn cheap parts into a super computer for less money than someone just spending copious amounts on Windows setups. It is not a matter of logic really but one of circumstance and backwards marketing. You took the "smart crowd" and made them hate on Microsoft to the point they boycotted the brand and had to struggle to build and maintain Linux systems that offer little in the way of comfort and ease of use just for supposed bragging rights. Then using divide and conquer tactics placed Windows users in a group of supposed "rich group" who were either to lazy or stupid to learn computers and simply shelled out money to spare them the challenge. This led to many problems.

Linux was said to be a better computer because it was less restrictive and it offered more free software as well as a free operating system. So the appeal here is free, that on the surface seems prudent enough but is it really? Linux is more setup for administration duties but who buys a personal computer just to perform chore like utility based operations? I think that Linux was made for business and the backend where pleasure and comfort was not a consideration and Windows was made more for a user experience with more games, better graphics, greater availability, more approachable etc. So either you wanted a low graphics boring work horse that took considerable time to learn or you wanted a game box that had the same basic utilities like word processor etc. The point is that they are not really in direct competition so comparisons are inaccurate and do not fully convey the true value of either. Both have good things to offer for the right consumer.

In either case it seems that Linux users are seen as more sophisticated and knowledgeable but really they just want more control of duties that the majority of people find boring. This control does require understanding certain aspects maybe a little more than a Windows user but it really is just marketing and hype. They hate for Windows being too expensive and all Windows users are rich is silly. Most Linux users could be said to have more money for training and buying more hardware for playing with different builds. ultimately someone using Linux is gearing for work in the industry as an it technician and their duties will revolve around basics that Windows users often do neglect but not out of laziness but rather being inaccessible to knowledge. Computers are a complicated subject regardless of OS or architecture. So while Linux has a larger community of hobbyists most of their solutions and fixes seem to be rather contrived hacks or gimmicks to 'trick' the machine to performing a certain way. This hardly seems like a reliable fix given that the more control a user has over a system greater choice options it has for builds, so how can you be sure what worked for one user will work for another? There are simply too many variables and not enough constants.

While Linux users feel pride when a window system gets the "blue screen of death" knowing that their rig is safe, how many hours do they spend researching information and pouring over the internet when upgrading, modifying or fixing a program when too many half baked solutions cause compatibility issues? With Linux it is the same waste of time but just simply more spread out as Windows users kinda get it all at once. This gives the perception of greater stability without actually providing it.

The only stability that is given to Linux users is when they opt for stable builds, anything past that and then they are now risking breaking there system just to test the latest beta version of some "fun" feature that is fully implemented into Windows and optimized for that environment. For Windows users to have the same stability as the most secure Linux options the comparison would be for them to run in "safe" mode all the time. No graphic support or fancy drivers available but basics would still be there. Add to the fact that Windows users are content to just enjoy programs and compute in a mainstream capacity while most young Linux users are lured in by the concepts of becoming a pro hacker. They have watched too many movies and have an unrealistic expectation of what true hacking is. True hacking is learning administration skills and use the the command line to alter permissions thus denying access to unauthorized persons. A company administrator would build and configure the new software, and then create user accounts for employees and assist them when their device freezes, shuts down or they lose their password. So to be a hacker one therefore has to learn administration and any hacking from that point is basically attempting denial of service hacks. The term "pawned" or "powned" is when they successfully hack the targeted users computer and take administration privileges away from the rightful owner and give it to themselves. So what motive would they have for this? Often very little or none. They are not stealing credit cards and making off with tons of loot. The financial sector is secure against theft and fraud. Any actual successful breach leads to near instant tracking and arrest. Any money stolen from credit accounts is protected against fraud and fully reimbursable. While hackers may be annoying they are hardly a threat. They live in a state of perceived importance that they do not actually have. Why were they hacking your computer again? That's right to punish you for not using the system of their choice. That's fascism. Why was your choice so wrong? Apparently everything should be free and you spent too much. After all why should you enjoy a fancy computer when poor mister hacker has to get by with a boring worktop set? Sounds like jealousy. You have a nice fun toy and they don't so they want to break so create a sense of balance or equality. That's communism.

So someone bought a fun computer to play games and watch videos and they bought a Trojan making backdoor finder workhorse, with the sole purpose apparently of depriving that someone a chance at happiness, that same happiness that they wish they had and could have, but instead chose a darker path. They bought a computer just to break a computer they wish they had but are too embarrassed to admit it. I've seen that. When they got the computer they thought it would be cool. When they found out it was not they vented rage against innocent persons using false logic to justify their actions, "they deserve it because xyz". Just because you can does not make it ethical. They are just criminals and are highly overrated. The only people interested in them are the government because the government is criminal too. All top hackers were manipulated into being hackers either by the government or their cohorts. First computers and internet was made by the government for war and espionage. It took awhile for them to role out the technology for public consumption but when they did they made sure they had a plan for how people would use it and that the use was served their own greedy self interests. Snowden and Manning thought it would be cool to work for them but them found out to late it wasn't. Use the skills to take back the freedom them government has taken from you and quit being hypocrites. Most hackers are stupid dropouts that failed the exams and the ones that didn't that are just tools of the beast not some romantic Bonnie and Clyde. It's a dirty game. I am outnumbered and need help. One day soon I will need hackers to help me. I will need the to spot my insecurities. I will need them to locate my enemies. I will need them in ways I do not know yet. Rant over.

So basically administration should be easily understood but Microsoft needed work for it's service guys so made the dumbed down technologically illiterate state of shoppers we have today. Break a Windows (hack┬╣) and it's a Linux, fix a Linux (upgrade/commercialize┬▓) and it's a Windows.

Fear is always government losing power through losing control of people. They made the technology to serve themselves as a for of empowerment. They would not give it away freely unless they were getting in return. In the movie the Matrix Neo must fight the future. Fight the future? This is paradoxical nonsense. A movie aimed at the tech crowd training them subliminally to fear what they love most, technology and information. Why? The answer to to keep them from using it the same way the government does as a form of empowerment. They do not want a shift in the balance power. And it worked. Tech groups and subversive counter culture often intermingle providing an opportunity to use that combined force to unseat the fragile egoed powers that be. But do they act on such occasions? No. They have already been programmed to march chant, be edgy, but they know what lines not to cross and what barriers not to push so they stay in a complacent state of unrest. They lack leadership in key areas that would allow them to be more than what they are. The problem is universal in other groups as well. The masses are controlled pseudo fears and garland wars, fake beliefs guiding real emotions. They fight but in a way that was orchestrated and even if seeing the puppet strings they do not know how to free themselves. As such the game goes on.

When choosing a computer avoid dumb options. The main offerings are crap and aimed at gullible buyers. The most important component is the processor. Many people botch this aspect because of confusing pricing and tactics. Focus on the processor and build from there. You have Intel's i3,i5,i7 and AMD's equivalent. The i3's are always under powered or have some weird store configuration that induces too many bottlenecks. "If processor is such and such speed then way is it slower than my last PC?". Chalk it up to corporate greed *cough worst buy* and blaming the stupid consumer. Again with the user shaming.

The i5's are mid priced and offer best value without having to splurge for an i7. If you are a builder, and you should be, buy an unlocked i5 and overclock it. If you are coming from Windows, and you are, Take your old PC and start retro fitting it. Building your own from scratch is not cost efficient and ends up similar to buying a new one prebuilt so there are no cost savings there. Instead have a store make it for you to at least get a good base for later upgradeability or spend on specific setups so you can learn building. I recommend two builds: A micro build to see what you can do on a budget using a small form factor and a power build based on using a large tower so you can easily fit multiple drives, gpu's (graphics cards for games, movies), and leave plenty of room for memory. What it comes down to is avoiding confusing naming conventions of cpu's ( the processor) and get an Intel with a "k" after the numbers (i5-3770k not i5-3770) so you can over clock it or pick up a AMD Ryzen if you know a little about what you are doing after having done some preliminary research. I go to benchmark sites to stay abreast the current to semi current chipsets to compare raw data and read up on current architecture. I do not go crazy but know enough to tell certain models from other and not get lost in a sea of weird numbers. Usually higher is better but always check a reputable benchmark site if you are unsure. Some sites make odd comparisons that do not make sense and review sites do not have good quality info they are just shills. If a review is loaded with adds to buy now linked after every comparison then it is bad site but if after comparing two newer high quality cpu's from a benchmark site and you do further searching on that particular one a review that only features it could contain valuable opinion and personal experience, usually from older rich guys. Young guys may not have enough experience and go in for hype while older guys understand math and the science plus real world expectations better.

This is how you find out about which cpu. Next it has to fit your motherboard's socket configuration. So it is really all about chip+board. This adds another layer of confusion to deal with but mobo's (mother boards) are pretty straight forward. Any type of device you want installed has to plug into the motherboard and have power supplied to it. When choosing a motherboard simply ask for a board that has the socket for your chip and then pick one that will not skimp on needed extra's like ram slots and driver slots. Here is the deal: If you buy a good computer now for $1200 you can add as many hdd's/ssd's as you want in the future with enough room for fast cheap memory plus optical drive. Desktop's are cheap now so I would even say $700, $650 if you can find a good deal at an outlet like fry's or even a office store.

You should you know the specs of the motherboard you are getting and make sure you have sufficient ports to install the latest version of usb such as usb 3.1. Often details about how many slots and of what type are neglected so you have to shop intelligently instead of neglecting these details. Find dealers who publish there specs. If a dealer's ad specifies only "6 ports" and it is lower priced than a description of "4 2.0 ports 2 3.0 ports" then they are trying to push off an inferior PC to cheap customers who will probably regret the purchase later. The idea is to buy as high a quality system as possible for reasonable price that you can grow into thus having a well made and maintained system for cheap. Eventually you will want to upgrade the processor for better performance but that is cheaper than buying a new system outright. After that scheme is to start making new chips with new socket sets requiring you to buy another board =$$$. Incidentally they do this with high end cameras too where the ring mounts for cameras change so you can not use old lenses anymore and have to buy new ones (costing hundreds if not thousands) lenses. This prevents you from going on forever as cheap as possible but it does increase life cycle of your PC's and gives you a much more thorough understanding of the different capabilities of hardware and how it and is put together making your next build easier.

Once the system is built and configured the other parts of administration are monitoring internet activity so you are basically acting like a cyber security expert. This is where you use tools to detect problems and fix them before it leads to an attacker gaining entry. I am unfamiliar with the Linux system so bought the books I did to further my knowledge. It seems that the book is mostly about using the command line and the different functions it brings up. I will read the book "The Unix And Linux System Administration Handbook" to gain this knowledge and post my conclusions afterwards.

Step 2: Learn Web Development.

Once we can build a system from scratch we then hooked up routers to servers and then started managing the DNS records all while preventing attacks and and keeping the system from crashing due to high traffic or other anomalies. We know how to monitor a computer to prevent attacks and how to setup our internet services and keep system speed fast so know we should look into building websites and securing them to.

Web development follows a pretty standard order and w3schools.com gives a good outline. The subjects it teaches are:

  1. HTML5:           This is used to make html tags to specify how the text and page is viewed and structured.
  2. CSS:                This takes html further and adds more options for color and using .div to express the page as layers rather than tables of rows.
  3. JAVASCRIPT: This is used to program the page and automate it by running automated scripts.
  4. SQL:                  This is for data bases to keep track of user id names and assign values to them like email or use in comment sections.
  5. PHP:                 This is used for processed actions like filling out form data.                
  6. BOOTSTRAP: This is a web application that uses external plugins to make your page "responsive" so that it automatically scales when viewed on a smartphone.

There is no format for learning Web Develop and it's use it loosely defined. From the above it is time consuming to learn every single tag or line of code. To be sane we must jump around and slowly learn what we can over time. I rely way to much on HTML and do not use enough CSS or XML in my pages. I tried to learn by jumping around before and forgot all that I had learned. This time I told myself that I would start from the beginning and gradually work my way up but that left my pages styleless and often cost me more time. I thought since I spent most of my time writing that, as a writer, I should focus on content and worry about how it looks later. The problem with this approach is that html by itself is very weak and is a poor choice for formatting pages. In writing from a design point of view it is often ideal to format you page before you begin so there are no surprises post edit. HTML can place simple , , and

I spend most my time writing trying as quickly as I can getting ideas to print so for me it is sometimes a necessity to write first then style later. Even so I end up spending way too much time trying to fix pages that need to be formatted. I will probably start taking notes from w3schools on the use of every tag available skimming through to find what is most pertinent to me at that time. If I need something specific that is out of order and advanced that is okay I will search from other sites borrowing and modifying code as I go along. Learning basic webpage manipulation is not a strict course and artistic and at one's leisure. Aim for learning a new thing a day and you will start building more talent. With any type of learning or project it is important and valuable to document your work for retention of knowledge. Every programmer or coder must have a notebook for the bits of code they learn. When you see something interesting on a page save it to a dedicated organized set of files and get it available for your coding projects.

Since people learn by combining different skills from odd sources there is no structured course of learning that is both expedient and compete. Teams often share with each other and from that you get diversity in the form of combining unorthodox methodologies. Every person knows computer science in bits and pieces but no one individual has all the answers and that is why we must learn from those around us. I would like to create system of teaching the basic to the advanced to the majority in a way that is fast without sacrificing quality. Perhaps not a master course but a thorough leveling of the playing field so that people become masters of the technology around them not slaves to it. When technology is becoming an ever more influence in our life's those with it will thrive and those without won't. I believe I can find a way to make technology and the understanding of it's properties both useful and accessible to those would otherwise would not benefit from it.

Once you know enough HTML to make a page move quickly to CSS to style it properly so you save time and have the more advanced syntax under your belt. You can learn more HTML later as needed or in spare time as a time killer. Get past CSS and get into javascripting and python to start coding your sites. These are scripting or "glue" languages that lead up to real programming languages but are not full languages on their own. The great thing about this is that anybody can learn html and anybody can learn scripting languages coming off html because scripting languages are written similarly to embed code into a browser. They are used for things like calling services from other sites and using media players and such. We are not trying to become expert html writers but rather learn to program in complex languages like c++17 by working up from lowly html. Without this distinction too much time will have been spend learning formalized html rules instead of getting ahead with selective bias in our approach to choosing what is valuable use of time and what is not.

Step 3: Learn to Code.

This is the hard part. We can get to this stage fairly easy but coding if difficult and requires dedicated study. I plan to learn c++17 and other languages such as ruby and java. There are plenty of books on code and we can either jump into a project book and use cookbook solutions or we can build up a library and academically study serious text books and try to figure out our own solutions. Either way we need a project to guide our development or else we do not have any problem that we are trying to solve for and hence we will not be able to apply what we are learning and in effect not learn at all.

This seems a daunting task and process but basically I have broken down the main reasons why people do not understand the computer world around them, lack of exposure and purpose. Without purpose they will not seek exposure and without exposure they will not be training. This approach seems to satisfy both requirements to a certain extent. A person will probably want a computer and all I am offering is a method to learn how to be able to do more with it. Self help guide on the internet will explode do to increased activity and success and then shrink because of a greater collective rising of intelligence of having known solutions to problems that were seemingly common.

Step 4: Build with code

The idea of using virtualization to compile and build applications really stuck with me. I imagined large scale engines and their immense computing power at my disposal to help me achieve and work on projects that before would probably be inconceivable. This is exciting stuff. Most large companies have the resources to develop but what they could build is not in their economic model so they don't. Never before has so much opportunity existed for smaller companies to get in on such breakthrough technology. THIS CHANGES EVERYTHING.

Summary

I will use Donald's book to brush up on my mathematica, Ben's book to humbly ingratiate myself to the Linux group and learn how to use the damn thing, and finally Mike and Ryan's book to explore cutting edge developments in the cloud to help with networking and building stronger retinue.