(Part 2) Best computers & technology books according to redditors
We found 39,382 Reddit comments discussing the best computers & technology books. We ranked the 9,387 resulting products by number of redditors who mentioned them. Here are the products ranked 21-40. You can also go back to the previous section.
>I am pretty good with computers
There you go! Dedicate as much free time as you have to studying to get an A+ Certification, then start searching around for local IT/Helpdesk jobs. Once you're in and get some experience, there is all sorts of room for promotion. It all depends on the time and effort you put into it.
As far as what/where to study, there are a ton of resources out there. Professor Messer has a whole series of totally free videos for not only A+ certification, but most of the other major certifications as well. You should also pick up this book as it covers just everything you'll need to know for the exam plus a lot more.
Here's my list of the classics:
General Computing
Computer Science
Software Development
Case Studies
Employment
Language-Specific
C
Python
C#
C++
Java
Linux Shell Scripts
Web Development
Ruby and Rails
Assembly
Simon Singh explains.
edit: Hey, I didn't expect this to become the top comment. Neat. Might as well abuse it, by providing bonus material:
This is the same Simon Singh discussed in this recent and popular Reddit post; he is a superhero of science popularization. He has written some excellent and highly rated books:
(full disclosure: I have nothing to disclose, other than that I'm a fan of his work.)
Refactoring: Improving the design of existing code
Design Patterns
Working Effectively with legacy code
Clean Code
How to be a programmer
Then there are language specific books which are really good. I think if you read the above, slowly over time, you'll be in a great place. Don't think you need to read them all before you start.
We did something similar as well. The labs were tons of fun. I remember having to run a couple dozen lines of code through the CPU cache on a test once, including some sneakery of using code as data at one point. I do appreciate having done it, but I'm not sure how much practical lasting value that really contributed.
That said, for those who are interested in this there is The Elements of Computing Systems: Building a Modern Computer from First Principles, more commonly known as "NAND to Tetris".
Petzold's Code is excellent as well.
Edit: Actually, while I've suggested those two let me throw Computer Systems: A Programmer's Perspective into the mix. It's a book we used across two courses and I really enjoyed it. We used the 2nd edition (and I have no issue recommending people get a cheaper, used copy of that), but there is a 3rd edition now. Being a proper text book it's stupidly priced (you can get Knuth's 4 book box set for $30 more), but it's a good book.
Anyone have suggestions similar to that Computer Systems's text? I've always wanted to revisit/re-read it, but could always used a different perspective.
Well, this is usually because C++ is not really a beginner friendly language. You need to understand the architecture/fundamentals of a computer system at times to understand certain concepts and are often difficult to understand ex: pointers, dynamic memory allocation etc. and with C++ you never finish learning!
Yes, you are very correct about understanding basics before doing actual game-based programming, C++ Primer is pretty old but it's definitely a golden book alongside it though for someone like you I will suggest some of the books I read a couple years back and some that I believe are better for beginners:
Accelerated C++: Practical Programming by Example
Programming: Principles and Practice Using C++
The C++ Programming Language, 4th Edition- Very big book, read this after you've read the rest.
And a book that I've heard is pretty good for game development with c++: https://www.amazon.com/Mastering-Game-Development-professional-realistic/dp/1788629221
The reviews for that book on Amazon are worth a read. :)
The "Practice of System and Network Administration"; probably a bit too early in your career but has some strong advice.
https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165
There's also a volume 2 which is cloud/site reliability engineering related.
In my opinion; every book in this bundle is a bag of shit.
Here's a list of reputable books, again in my opinion (All links are Non-Affiliate Links):
Web Hacking:
The Web Hackers Handbook (Link)
Infrastructure:
Network Security Assessment (Link)
Please Note: The examples in the book are dated (even though it's been updated to v3), but this book is the best for learning Infrastructure Testing Methodology.
General:
Hacking: The Art of Exploitation (Link)
Grey Hat Hacking (Link)
Linux:
Hacking Exposed: Linux (I don't have a link to a specific book as there are many editions / revisions for this book. Please read the reviews for the edition you want to purchase)
Metasploit:
I recommend the online course "Metaspliot Unleashed" (Link) as opposed to buying the book (Link).
Nmap:
The man pages. The book (Link) is a great reference and looks great on the bookshelf. The reality is, using Nmap is like baking a cake. There are too many variables involved in running the perfect portscan, every environment is different and as such will require tweaking to run efficiently.
Malware Analysis:
Practical Malware Analysis (Link)
The book is old, but the methodology is rock solid.
Programming / Scripting:
Python: Automate the Boring Stuff (Link)
Hope that helps.
A program in any language goes through either a compiler or an interpreter, or a mixture of both. A compiler turns the program into a series of machine instructions, low level codes that the processor knows how to "execute". An interpreter executes a program indirectly.
The first step of both compiling and interpreting is called parsing. This step takes the program text and converts it into an internal representation called an AST (Abstract Syntax Tree). For e.g. this converts "if" and its attached test and statement blocks into one kind of object, and "or" and its attached expressions into another kind. The compiler or interpreter knows that these two objects should be handled differently.
Programming languages are often programmed in themselves. However, a bootstrapping process is required to create the first compiler or interpreter, i.e. the first version needs to be written in a different language. For low level languages like C, this bootstrapping language is usually assembler. For other languages, more often than not the bootstrapping language is C. Some compilers or interpreters are written in different languages, e.g. the most popular version of Python (which is a mix of a compiler and an interpreter) is written in C.
Going from "rand()" to a string of bytes has more to do with calling a library than a specific feature of a programming language. From the PL point of view, "rand()" is a function call. This function resides in a library that may or may not be written in the same language, in any case, it contains the logic to generate a random number. There are several ways to do this, google or wikipedia for Pseudo Random Number Generator (PRNG).
The standard reference on compilers and interpreters is the so-called Dragon Book, I'll leave it up to others to suggest more material.
Here's my rough list of textbook recommendations. There are a ton of Dover paperbacks that I didn't put on here, since they're not as widely used, but they are really great and really cheap.
Amazon search for Dover Books on mathematics
There's also this great list of undergraduate books in math that has become sort of famous: https://www.ocf.berkeley.edu/~abhishek/chicmath.htm
Pre-Calculus / Problem-Solving
Calculus
Linear Algebra
Differential Equations
Number Theory
Proof-Writing
Analysis
Complex Analysis
Functional Analysis
Partial Differential Equations
Higher-dimensional Calculus and Differential Geometry
Abstract Algebra
Geometry
Topology
Set Theory and Logic
Combinatorics / Discrete Math
Graph Theory
P. S., if you Google search any of the topics above, you are likely to find many resources. You can find a lot of lecture notes by searching, say, "real analysis lecture notes filetype:pdf site:.edu"
Long answer is here
Short answer is "stop whining and learn while you still can"
Regards,
Someone who didn't
I wanted to add that if you're brand new to PowerShell then you should take a look at PowerShell in a Month of Lunches.
Also, take a look at /r/PowerShell. There are fantastic people in there, and they're incredibly knowledgeable.
And the ever popular Learn Windows Powershell in a Month of Lunches
The best way to learn anything depends on your learning style. Some people learn better by reading, some by watching videos, and some by doing. It's important to know how you learn effectively.
That said, my recommendation is to find a routine task you do regularly and figure out how to do it automatically with PowerShell. Do you archive old report files to a specific directory structure? Learn about
Copy-Item
. Do you manage Exchange, SCCM, O365, anything like that? They all have automation support with PowerShell. There are even community modules that support a lot of third-party products - for example, the JiraPS project allows you to manage JIRA items with PowerShell, including creating new issues, commenting on existing ones, and closing them out.If you prefer reading, the book Learn PowerShell in a Month of Lunches is often recommended - but it's very important that you actually follow along with the exercises in the book. Type them and run them on a live computer whenever possible.
If you prefer videos, I suggest the Microsoft Virtual Academy series on PowerShell. These are a bit long, but they do a great job of teaching you both concepts and practical knowledge.
Hope that helps!
Consider buying these, or checking them out from local library:
Network Warrior
The Practice of System and Network Administration: Volume 1: DevOps and other Best Practices for Enterprise IT (3rd Edition) 3rd Edition
-----
Cisco / Networking
Stanford University Free Introduction to Networking Online Course
Cisco Learning Center - How to Study for CCNA for Free
Professor Messer's CompTIA Network+ Training Videos
Cybrary Free CCNA Training Videos
Cisco VIRL - Virtual Router & Firewall Training Tool
GNS3 Vault - Free Practice & Training Labs for Cisco Equipment
Cisco Live Training Convention Video Portal - Free Registration Required
Cisco Design Zone - Best Practices
PacketBomb - WireShark Training Center
NetCraftsmen - Network Consultants Blog
PacketPushers News & Podcasts
IOSHints - Ivan Pepelnjak's Blog/site
Cumulus Networks SDN Technical Videos
SDX Central - SDN Resources
-----
The Best of Cisco Live
Cisco Live is Cisco's annual Technology expo & training convention.
All of these presentations are available for free here: http://www.ciscolive.com/online - Many with video presentations of the lectures.
BRKARC-3001 - Cisco Integrated Services Router G2 - Architectural Overview and Use Cases (2013 Orlando) - 2 Hours
BRKARC-3001 - Cisco Integrated Services Router 4000 - Architectural Overview and Use Cases (2015 San Diego) - 2 Hours
BRKARC-2001 - Cisco ASR1000 Series Routers: System & Solution Architectures (2015 San Diego) - 2 Hours
BRKARC-1009 - Cisco Catalyst 2960-X Series Switching Architecture (2016 Las Vegas) - 90 Mins
BRKARC-3438 - Cisco Catalyst 3850 and 3650 Series Switching Architecture (2015 San Diego) - 2 Hours
BRKARC-3445 - Cisco Catalyst 4500E Switch Architecture (2015 San Diego)
BRKARC-3465 - Cisco Catalyst 6800 Switch Architectures (2015 San Diego) - 90 Mins
BRKARC-2222 - Cisco Nexus 9000 Architecture (2015 San Diego)
...
BRKCRS-3147 - Advanced troubleshooting of the ASR1K and ISR (IOS-XE) made easy (2015 San Diego) - 2 Hours
BRKCRS-3146 - Troubleshooting Cisco Catalyst 3650 / 3850 Series Switches (2015 San Diego) - 2 Hours
BRKCRS-3142 - Troubleshooting Cisco Catalyst 4500 Series Switches (2015 San Diego) - 2 Hours
BRKCRS-3143 - Troubleshooting Cisco Catalyst 6500 / 6800 Series Switches (2015 San Diego)
BRKDCT-3101 - Nexus 9000 (Standalone) Architecture Brief and Troubleshooting (2015 San Diego)
...
There are a lot of different ways to get in, and the only real requirements are reading comprehension and knowing how to use google.
Here's what I did: Read this book, took the A+ 801 and 802 on the same day, and applied for tech support jobs. I landed a decent phone tech support job with my second interview. Start to finish, it took about a month. I only made $15/hour to start with.
I immediately started using linux as my daily OS on all of my personal devices, and my skills really started to take off. After a year, I got a raise to 42k. Then I jumped to devops and started at 55k. I've increased my salary by roughly 10k every year ever since.
Sorry to see this getting downvoted. Read the about page to get an idea of why /u/r00nk made the page.
I have to agree with one of the other comments that it is way too terse at the moment. I remember when we learnt about e.g. d-latches in school and it was a lot more magical and hard to wrap your head around at first then the page gives credit for. That and, or, and xor gates can be built up from just nand gates (the only logic gate properly explained) is also glossed over. Either go over it, or don't show the interiors of the other logic gates.
The interactive stuff is really neat. Good work on that.
Edit: If anyone reading wants to learn this stuff in more detail, two good books are
Edit, 9 hours later: Just so people don't think I'm bitching that this post is only 84% upvoted, it was struggling at below zero points and 42% upvoted when I first commented.
I work in web security. For those of you that will be working on the site, please read/have already read/be aware of the lessons found in:
Expect your website to be attacked. Some advice:
If you'd like some advice, have any questions, I should be able to get back on reddit sometime tomorrow (unfortunately, I have a lot of work I need to get started on).
[1] - Blacklist: Allow everything in except for things on this incomplete list of known bad things.
[2] - Whitelist: Only allow in things on this list of known good things and reject everything else.
The movie is okay as a movie, but as as far as historical value goes, it's more in the 'inspired by' category. They touch upon a few of the moments and ideas presented here, however.
For a more (and way more interestingly brought) in depth explanation, I can recommend 'The Code Book' by Simon Singh (amazon)
I would highly recommend the Effective C++ books to anyone who is learning C++. It should be mandatory reading once you grasp the basics of C++. These books are easy to read, and the "holy shit, this could have bit me in the ass hard" factor is high.
But the Dragon Book has cool dragons on it!
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160
​
All you need to start
Some book recommendations:
Others that are great and related but not as "necessary" as the above three:
Unrelated to "better code" but still great:
A good metric is by how expensive the object you're passing around is to make a copy of. In the case where you're passing by value, you're probably returning by value as well so two deep copies there. An alternative is references which are syntactically similar to pass by value but retain the memory niceties of pointers which don't require a full copy but rather just the passing of a memory address.
Typically my rule of thumb is bigger than a pointer use a const reference unless I need a fiddle with the bits in the object I'm passing then I'll go with a pointer. Given enough practice and seeing enough code you sort of get a feel for when it's best to use what, but you kind of need to understand the tradeoffs between how you throw around data.
Passing references everywhere is bad though because it makes it less obvious to person reading/using your code that the object you're passing in could potentially be different object than the one you passed in. If your function takes a pointer it tells the reader that you probably intend to do something with the object's data in the function to change it. Which comes to the second point of using 'const' everywhere which not only informs the reader that the object will not be changed but also binds your function to a contract to not be able to change the value.
For more stuff like this I highly recommend Effective C++ and More Effective C++
Creo que mucha gente se confunde ser autodidacta con hacer algun cursito de como hacer una web y darle con eso.
Para llegar a cierto nivel, tenes que aprender computer science, teoria y trabajar en cosas que te permitan aplicar esa teoria.
Tenes que saber ver un algoritmo y poder calcular la complejidad, tenes que entender que son las patrones de diseño y cuando conviene aplicar tal o cual.
Tenes que entender como funciona OOP, pero tambien tenes que aprender algun lenguaje funcional, te va a hacer un programador más rico.
Tenes que entender de Unit Testing, automated testing, Integration testing.
Los dos libros que más me ayudaron cuando empecé en computer science son :
https://www.amazon.es/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693
y
https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612
Y ir codeando mientras vas leyendo y aplicando las cosas es fundamental.
Me parece que la diferencia entre ser autodidacta es que no tenés esa vara minima que te da la facultad, asi que depende de vos que tan crack queres ser y si estas dispuesto a poner el laburo y a aprender cosas constantemente.
La información esta en internet o Amazon, no hay ningún secreto.
I think the problem is that there are two mutually incompatible teaching requirements here:
1/ Teach nix and C, including fork() and pals
2/ Teach C++ = modern, idiomatic C++ with STL from the outset*, as is generally considered to be the best way.
These are almost entirely separate areas and should be taught separately.
Along those same lines I can recommend: The Elements of Computing Systems. With the book as a guide you build a whole computer, starting with NOR to build the basic logic gates, and finishing by writing a simple OS.
​
You should be aiming to eventually get a position as a Security Operations Center (SOC) analyst.
A SOC analyst position gives you some insight into a whole range of different information security problems and practices. You'll see incoming recon and attacks, your org's defenses and responses, and the attacker's counter responses. You'll get experience using a SIEM. You'll become familiar with all of the tools in place and start to figure out what works and what doesn't. You'll learn the workflow of a security team and what the more senior engineers do to protect the enterprise. After a couple of years, you'll probably have a much better idea about your own interests and the path you want to pursue in your career.
Here's how you get there:
Step 0: Make a habit of using spellcheck, then proofreading what you've written.
Step 1: Get the Network+ certification (Skip the A+, it's a waste of time for your purposes). You MUST understand IPv4 networking inside and out, I can't stress that enough. A used Net+ study guide on Amazon should be less than $10. Professor Messer videos are great and free: https://www.youtube.com/user/professormesser
Mike Meyers has about the best all in one Network + book out right now, you can get that from Amazon. You can also check out Mike Meyers' channel on Youtube, he has a lot of Network+ videos: https://www.youtube.com/watch?v=TcIV\_qc-eOU
Step 2: Start learning some basic Linux. The majority of business computing is done on a unix type platform, this will not change anytime soon.
For Linux, I'd highly recommend "Unix and Linux System Administration Handbook" by Evi Nemeth, et al. The information is presented in a way that is comprehensible to regular people. You can get a used copy of the fourth edition for about $15.00. The second edition got me through my first three jobs back in the day :) https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/ref=sr_1_fkmrnull_1?keywords=evi+nemeth+4th+edition&qid=1551450119&s=gateway&sr=8-1-fkmrnull
Step 3: Get a techie job, probably in entry level tech support or helpdesk. You have to do a year or two here to get some practical experience.
Step 4: Get the Security+ certification.
Step 5: While in your tech support job try to do every security related task you can.
Step 6: Attend Bsides conferences (very cheap), there is almost certainly one within a couple hours of you.http://www.securitybsides.com/w/page/12194156/FrontPage
Step 7: Join a local hackers group similar to NoVA Hackers or Dallas Hackers.
Step 8: Network with everyone you can at security conferences and in your hackers group.
Step 9: After you get those certs and some technical work experience, apply for every SOC position you can.
Step 10: Take the free online Splunk class while you're waiting.
Step 11: Keep going until you get that SOC analyst job.
Guess what, you're an infosec professional!
That SOC analyst job should pay between $50K and $60K. You'll stay there for a year to eighteen months and get a couple more certifications, then leave for a new job making $75K to $85K. After five years in the tech/cybersecurity industry you should be at $100K+.
Not very specific to those technologies but:
>Web Application Hackers Handbook (2nd edition: http://www.amazon.com/The-Web-Application-Hackers-Handbook/dp/1118026470) is pretty thorough with the vectors of attack, examples, and includes a methodology for pentesters.
>The Tangled Web - a "light" but delightful read from Zalewski on the history and modern security of web apps. He also wrote the http://code.google.com/p/browsersec/
Both are pretty recent and cover some good ground.
I'm the manager of application security and research at a mid-level software vendor with over 400 developers and testers and I want to recommend you ignore all of the more generic advice currently in this thread. As someone with coding experience and interest, you have a unique path to infosec that so many companies want, but find it extremely difficult to hire for.
Any company that ships software has to consider the security of their application - full stop. Most rely on scanners or annual third-party vulnerability assessments for this, but obviously that falls short. They need people who can build security in from an architectural standpoint. Someone who can actually implement the fixes suggested by the above methods, and ideally, someone who can help implement security as an integral part of the SDLC instead of as a bolt-on premise.
My recommendation is to make your way through 24 Deadly Sins of Software Security and The Web Application Hacker's Handbook. If you can understand the bulk of concepts in these two books, you'll be leagues ahead of almost any developer you find yourself up against in a hiring scenario. For the coup de gras, learn about threat modeling. It's a great way to teach other developers and testers security and to build security into any system during design instead of post-release. Check out this book which is actually probably a little too comprehensive, use this card game from Microsoft (it seems silly, but I promise you it works), and watch this talk one of the guys on my team gave at BSides Cincinnati.
If you have any questions, PM me.
Literally every part about this sounds like an up hill battle. Frankly, no matter what the course of action, a year isn't going to be enough. You've got to start tempering expectations with that now.
The challenge here is rewriting all that Web Forms logic, and this is the piece that is the biggest hurdle. I assume, that since you are working with web forms you don't have any test suite in place, so you're basically walking a tightrope without a net. I also assume that the actual business logic of the application is probably closely intertwined with web forms as well (which I'm assuming because that's how its been nearly every web forms app I've worked with).
Before you start wondering with MVC is the right fit for you, you've got to prepare your code base from moving out of Web Forms. You should pick up Refactoring by Martin Fowler. And begin to move as much code as you can out of code behind files, and into pure C# classes that you can test. Interfaces are your friend. Facades and Adapters are your friend. Unit tests are your friend. You need to have your business logic as portable as possible in order to move away from Web Forms and not be constantly chasing down bugs and unexpected functionality. The more your code-behind is a facade that just takes inputs and calls other classes with them, the better off you'll be
With that out of the way, now we can get in the framework discussion. First off, I don't think a SPA is a good approach here. It'll be too heavy of a lift for your team, and probably not worth the time and effort at this point in time. So you're pretty much left with MVC as an architecture, which is fine, but I think you're going to have some issues with "vanilla" MVC considering the load and the users you're going to have to service, so you're going to have to look beyond that to make this work.
One of the key components to scaling this will be a good cache. If every read needs to hit the database, then you're done. I would recommend using Redis for caching, but an in-memory cache will help you here as well.
I would also strongly recommend looking into CQRS. That stands for Command Query Responsibility Segregation. The high level idea is that requests that need to modify data gets handled by different classes than reading data. This makes it much easier to scale up/out the read side, and also makes it much easier to know when the cache on the write side can be invalidated (since that's coming from the read side).
The challenge with ramping up on CQRS is that its generally presented with a lot of other solutions; MongoDb/Document databases, Event Sourcing, event messaging. Those are good and interesting in their own right, but they are way more than you need right now and CQRS does not require using them.
The last thing I'll touch on here is that if you've got one big ball of mud, you're path to upgrading this going to be very tough. If you can find isolated parts of the application to split off, and test in a different framework, then you'll be much better off. The more isolated sales is from inventory (or whatever you have) the better off you're going to be in the long run. If you can find the time to isolate those components in the application now, rather than try and rewrite the big ball of mud, your future self will thank you.
I'm not sure I'd consider Powershell devops than a core Windows administration tool. Devops to me would be like Chef, Puppet, Ansible, Salt, etc. (Puppet I think would be good for a Windows person to learn.)
You can do Powershell in a month of lunches: https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
You can do the Microsoft Virtual Academy as well: https://mva.microsoft.com/en-us/training-courses/getting-started-with-powershell-3-0-jump-start-8276
Powershell is very object oriented and pipelined, it's not a bunch of "++1, !, +3," style of true programming. It's more of a "get-aduser doej"
A lot of the commands are the same syntax prefixes, like "get" and "export".
Don't be discouraged, envision yourself knowing this inside and out in a year, and your mind will work you toward this goal.
What, specifically, do you work with that you think can benefit from scripting?
Are you in New England? Amway is a pyramid scheme that a lot of people in my area fall into. As for IT...bro, he doesn't even need to get a degree. Buy him this, make him study the entire guide + do the included practice tests, have him take the exam, and then have him apply for entry-level IT jobs. That is the best way to break into IT at first. You can work your way into a high-paying job and...it's not a scam!
No offense, but someone falling for Amway would be a dealbreaker for me... :-/
Powershell in a month of lunches is apparently quite good, that will cover Powershell from the basics to relatively advanced concepts, although I don't recall it covers AD.
Once you have a grasp of PowerShell, the AD modules are not much trouble to learn at all, MCSA should at least cover some of that.
Also - Take a look under the "resources" tab on the right of this sub.
I never thought I would see the day that A858DE45F56D9BC9 would plagiarize, but this was taken digit-for-digit from RAND's A Million Random Digits with 100,000 Normal Deviates.
Reading some books would be a good idea.
The following are textbooks:
General AI
Machine Learning
Statistics for Machine Learning
There are many other topics within AI which none of these books focus on, such as Natural Language Processing, Computer Vision, AI Alignment/Control/Ethics, and Philosophy of AI. libgen.io may be of great help to you.
For density, you could try Herbert Federer's monograph: Geometric Measure Theory.
As for boring, there is a certain publication from the RAND Corporation you could look into.
Modern C++ (C++11 or later) books are not nearly as plentiful as those for Classic C++, but there are a few notables.
Bjarne's college text may be what you are looking for:
Programming: Principles and Practice Using C++ https://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784/ref=pd_sim_14_2/144-7765085-0122037
It is aimed at engineers, which makes it less general, but might be good for you.
Of course his general intro is also updated to C++11.
The C++ Programming Language https://www.amazon.com/C-Programming-Language-4th/dp/0321563840/ref=pd_sim_14_2/144-7765085-0122037
This is aimed at experienced systems programmers, so it may be a bit heavy for students, which makes the Primer (that you mentioned attractive).
C++ Primer https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113/ref=pd_bxgy_14_img_2/144-7765085-0122037
Be certain to get the 5th edition.
Of Scott's books only the latest is Modern.
Effective Modern C++ https://www.amazon.com/Effective-Modern-Specific-Ways-Improve/dp/1491903996/ref=pd_sim_14_2/144-7765085-0122037?_encoding=UTF8
This is less an introduction for students than for Journeymen (Journeypeople?) programmers.
For just plain good programming style consider Ivan's book.
Functional Programming in C++ https://www.amazon.com/gp/product/1617293814
Don't be put off by "Functional." This style of programming will make your students excellent programmers.
There are some modern books of high quality that are niche.
The ultimate guide to templates:
C++ Templates https://www.amazon.com/C-Templates-Complete-Guide-2nd/dp/0321714121/ref=pd_sim_14_1/144-7765085-0122037
The ultimate guide to concurrency:
C++ Concurrency in Action https://www.amazon.com/C-Concurrency-Action-Anthony-Williams/dp/1617294691/ref=pd_sim_14_1/144-7765085-0122037
Some library options:
Despite its name, this is mostly reference. A very good reference.
The C++ Standard Library: A Tutorial and Reference (2nd Edition) https://www.amazon.com/Standard-Library-Tutorial-Reference-2nd/dp/0321623215/ref=pd_sim_14_2/144-7765085-0122037
Arthur's book covers C++17, which makes it one of the most modern on this list:
Mastering the C++17 STL: Make full use of the standard library components in C++17 https://www.amazon.com/Mastering-17-STL-standard-components-ebook/dp/B076CQ1RFF/ref=sr_1_fkmrnull_1
To what extent are you teaching C++ and to what extent are you teaching programing?
Good luck and have fun!
I was in your same shoes 3 years ago when I took my first SA internship. I was the only person on site for 8 employees locally, 30 around the country.
I was scared to make actions at first but the first thing you need to do is learn your network in and out and document the shit out of everything before you even make a change. After that, you will be confident and I am sure of it.
1.) Begin a document called "IT Department Handbook" - add everything you find to it, except passwords. Refer to it, love it, it will always save you. Include disaster recovery in it. Make it so that a third grader can understand it. I have one thats 50 pages right now. This will save you as it has saved me so many times. Make it confidential though, because it will end up holding information you don't want people to see on the outside such as IP addresses and your network map.
2.) Keep passwords file but separate from the system and indistinguishable. I actually keep a password file on my phone in my memo's app but I don't have the full account usernames associated with each one. I provide really indistinguishable hints to the username, usually riddles that only I would know.
3.) Get Veeam endpoint backup and find a place to backup your DC (full backup) and any databases at the very least. You can create a standard for backups later.
3a.) Find the Domain Controller's recovery password immediately.
3b.) Create a recovery USB for all your servers and put them in a location where you can find them later.
4.) Get a Network Diagram going, then after that...
5.) List all Roles and Features each server has on the network diagram, what each server stores, what applications run on them and how essential they are to the business. Example: Domain Controller. No domain controller, no work can be done. CRM: No crm, people can't keep of their cases on the webserver but rather locally, they can live without it for a short time. Start thinking about disaster recovery.
6.) Develop a Khanban System. It's an agile project management method I learned from reading This Book -- I highly suggest buying this to help you better your practice. Put tasks in the backlog and move the ones you think need to be done sooner than others to your daily or weekly sprint.
7.) Find out who uses what server for certain tasks. This may take a while but it helps.
8.) Something I do personally before doing any changes to Group Policy or Regedit is I save their current configurations before making changes. Therefore, if something doesn't work right after a setting is changed, you can quickly revert back to it's last state.
9.) If you have the capability and hardware, get clustering going. So if a DC1 fails, DC2 takes over and everyone can still authenticate and work.
10.) If you have the capability and hardware, create a test environment reflecting your live network on a very small scale but enough to test "Ok so if I make this change, can people from workstations still login, can they still access the development server... etc." - you can create a test domain under your current forest and have it remain separate in this test environment.
11.) If it's not already in place (this might take some time) create a naming nomenclature standard. I.E. DC1.example.com (domain controller 1), DC2.example.com, PS1.example.com (production), WEBS1.example.com (webserver), TE1.example.com (test env.), WK1.example.com (workstation number 1...2...), VM1.example.com (virtual machines). This will help when it comes to debugging issues. My boss likes to make personal names for his servers which drives me fucking nuts because we have 20 servers between us and our clients that we manage. It's a lot better for him to mention "yea I cant get into PS1." rather "I cant get into rabbit" - and there I am trying to remember which server rabbit is and what features it holds off the top of my head; which is where a network diagram can come into play.
I just finished reading Code: The Hidden Language of Computer Hardware and Software and will state unequivocally that this book is the most satisfying read I've experienced. It starts with flashlights blinking through windows, moves to Morse code, introduces electrical relays and demonstrates how they can be connected to form logic gates, then uses those gates to construct an ALU/counter/RAM and multiplexors. It goes on to describe the development of an assembly language and the utilization of input and output devices.
This book can be described as knowledge hose flooding the gaps in my understanding of computer hardware/software at an extremely enjoyable pace. It may help satisfy your interest in the concepts and technology that led to modern computers. Check out the reviews for more info.
If you haven't already studied logic gates in depth in your formal education, I would suggest using a logic simulator to actually build the combinational logic structures. I now feel very comfortable with logic gates and have a strong understanding of their application in computing from my time spent building the described logic.
I went through the book very slowly, rereading chapters and sections until I felt confident that I understood the content. I can not recommend this book enough.
After reading CODE, I have been working through The Elements of Computing Systems: Building a Modern Computer from First Principles. If you are looking to gain a better understanding of the functions of hardware components, this is the book to read. This book's companion site http://www.nand2tetris.org has the first chapters free along with the entire open source software suite that is used in the book's projects. You will build, in the hardware design language starting with Nand gates, each logic gate and every part of a computing system up to a modern high level language with which you can program custom software of your own design to compile in a compiler you designed into an assembly language you specified which is turned into binary that runs in a processor you built from Nand gates and flip flops. This book was very challenging before reading CODE, now I feel like I'm simply applying everything I learned in code with even more detail. For somebody that hasn't attended college for computing yet, this has been a life changing experience.
http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319
http://www.amazon.com/The-Elements-Computing-Systems-Principles/dp/0262640686
PowerShell in a Month of Lunches is kind of the defacto starter book.
From there, I would recommend diving into The PowerShell Scripting and Toolmaking Book.
Naturally, this sub is also an excellent resource. You could also join the PowerShell Slack, where tons of good discussions/examples can be found.
Most current information you are going to want to read online. There is no substitute for that. The books I'm currently reading through are:
The Web Application Hacker's Handbook 2nd Ed
The Tangled Web
Metasploit: The Penetration Tester's Guide
Webbots, Spiders and Screen Scrapers
NoStarchPress fanboy all the way :)
Keep in mind, though, that the technical requirements are only half of being employable. You also need to be a good employee, who can work with the client and keep them satisfied. For those, I recommend:
True Professionalism
Trusted Advisor
Refactoring. I've known many a coder that loves to engage in this most macho of disciplines. Funny thing is, is that many such coders don't use any unit testing. As anyone who has read or at lest skimmed Refactoring
knows that one should not even contemplate making any changes without a solid test suite to catch the inevitable bugs.
Refactoring isn't about engaging in brutal combat with your code. Refactoring is about careful reshaping.
"Introduction to Algorithms"by Cormen et.al. Is for me the most important one.
The "Dragon" book is maybe antoher one I would recommend, although it is a little bit more practical (it's about language and compiler design basically). It will also force you to do some coding, which is good.
Concrete Mathematics by Knuth and Graham (you should know these names) is good for mathematical basics.
Modern Operating Systems by Tennenbaum is a little dated, but I guess anyone should still read it.
SICP(although married to a language) teaches very very good fundamentals.
Be aware that the stuff in the books above is independent of the language you choose (or the book chooses) to outline the material.
I'm amazed that no-one has mentioned this.
The absolute best book for you is Accelerated C++ by Andrew Koenig and Barbara E. Moo.
It is targeted at people who already know another language, especially Java or Python.
This book has been suggested a few times so I finally got around to reading it. I think it has some good information in it. I'm only about halfway through it, but I like it so far.
Time Management for System Administrators
Other books would be any of the social books like "How to influence people", "7 healthy habits..." Etc.
I haven't read this one yet, but It has been suggested to me if you plan to go more into management/leadership Start with Why
Other books that have I have ear marked due to being mentioned:
Also, do a search for "Books for IT Professionals" to find a lot of other suggestions.
Should have gotten her this dragon book so she can get a headstart on writing compilers.
Thank you all for your responses! I have compiled a list of books mentioned by at least three different people below. Since some books have abbreviations (SICP) or colloquial names (Dragon Book), not to mention the occasional omission of a starting "a" or "the" this was done by hand and as a result it may contain errors.
edit: This list is now books mentioned by at least three people (was two) and contains posts up to icepack's.
edit: Updated with links to Amazon.com. These are not affiliate - Amazon was picked because they provide the most uniform way to compare books.
edit: Updated up to redline6561
I like these and would add:
3) Given how cheap they got lately, I would suggest to use at least two screens for work. More screen real estate equals more efficiency.
4) Master your tools. Memorize the shortcuts your editor provides (or learn Vim :) ), learn to take full advantage of your IDE's debugging capabilities, and so on.
...and regarding this...:
> Design patterns.
Refactoring - Improving the Design of Existing Code is a great book on this topic.
So basically Uncle Bob forgot how to actually refactor, and didn't bother whipping up his copy of Refactoring?
Automated refactoring tool are a good thing, because (especially in statically typed languages) they make refactoring safer (but not safe, if you use e.g. code generation or reflection, your refactoring browser won't help you), more systemic, more systematic and much faster.
But they were never necessary, the basic concepts of refactoring were tool-less, and Refactoring lists only manual recipes (with a discussion on refactoring browsers in another chapter), some of them -- if I remember well, it's been some time since I've read it -- not even being automatically implementable.
You can get a degree or you can teach yourself
The above resource is pretty good in outlining the major topics that all CS programs cover, but I would change some of their textbook and class recommendations.
I would replace the programming book/course with CS for all
Algorithms I would recommend sedgewick which is also available as a website or clrs for a more in depth review.
Those two topics will give you a very solid background. For what you want to do computer architecture, networking, operating systems, math, languages and compilers, and distributed systems aren't as important. If you wanted to expand your abilities as a programmer then you should explore those topics.
As for databases, for your purposes you may not need to learn so much how databases work as opposed to how to query databases. For this you need to learn SQL.
This should give you all the background you need in CS, now its time to start building applications. You'll probably hit roadblocks and need to research how to accomplish certain tasks, but with the above background that should be very doable.
MS Virtual Academy Powershell Jumpstart
Powershell in a Month of Lunches by Don Jones
PowerScripting Podcast
/r/Powershell
Learn how to access all service guides and manuals.... Learn unix/linux basics. Maybe build a small home lab, you can buy cheap servers and networking equipment online. Never say "I don't know" say "I will have to do some research". Nobody knows everything... Google is your friend.... When you are at work do not browse this sub.. Start reading up on that things they want you to work on now.......I am not an admin but work in data centers every day fixing servers. Been in the industry for 13 years.... still get worried about people finding out I have no idea what I am doing lol
Great Guide
UNIX and Linux System Administration Handbook
I'm sort of in the same boat as you, except with an aero and physics background rather than EE. My approach has been pretty similar to yours--I found the textbooks used by my alma mater, compared to texts recommended by MIT OCW and some other universities, looked at a few lists of recommended texts, and looked through similar questions on Reddit. I found most areas have multiple good texts, and also spent some time deciding which ones looked more applicable to me. That said, I'm admittedly someone who rather enjoys and learns well from textbooks compared to lectures, and that's not the case for everyone.
Here's what I gathered. If any more knowledgeable CS guys have suggestions/corrections, please let me know.
Full disclosure: I haven't actually read more than the preface of any of those books. Software engineering topics are more directly applicable to me than CS topics right now, so here are some that I've actually started reading:
I get my randomness the old fashioned way
The absolutely best thing about this post are the customer reviews on a list of random numbers book on Amazon that was linked.
link
I knew Amazon reviews were subject to the occasional troll/subversion, but I never knew the extent of it and the craftsmanship put in. From one of those WTF products, A Million Random Digits with 100,000 Normal Deviates [Paperback]:
> 1 Star - Sloppy., July 27, 2005
The book is a promising reference concept, but the execution is somewhat sloppy. Whatever algorithm they used was not fully tested. The bulk of each page seems random enough. However at the lower left and lower right of alternate pages, the number is found to increment directly.
That is just superb.
I have all these except the CEH (which shouldn't be on this list lol...) and they're all pretty good in their own way. Starting over, I'd go through hacker playbook while reading through the art of exploitation. You'll be pretty rounded at this point, blackhat python and metasploit will be a breeze. Do the ceh one if you're getting a job that wants to see embossed paper. Also, check out Web Application Hacker's Handbook, and Shellcoder's Handbook.
https://www.youtube.com/playlist?list=PL6D474E721138865A
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
I like a nice ham sandwich for a lunch point.
As far as getting into PS. This is the usual recommendation.
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Enjoy your book and sandwich.
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
I've heard good things about this.
Learn Powershell in a Month of Lunches
Also, SS64 has a great Index/reference of PS commands.
Another good thing to do is to start searching the web for "how do I $taskName in Powershell."
During my studies, in my research (information-flow security), and as a working computer scientist, I practically never find use for analysis.
Most of (theoretical) computer science is based on logic and algebra, and deals with discrete structures.
That is not to say that real analysis has no home in computer science. Far from it.
Any aspect of computer science that deals with randomness touches on analysis. These aspects resort to probability theory to reason about randomness. And probability theory applies analysis. Example aspects in computer science include cryptography (pseudo-random number generators, hash functions, etc., which rely on number theory), formal verification (model checking, which sometimes uses continuous-time Markov chains as models), information theory (channel coding and signal processing), and machine learning (Bayesian networks).
And, as I am sure you know, optimization and analysis of algorithms (smoothed analysis).
You might find the following books interesting:
As a beginner, the resources you use to learn are much more important than the programming language you end up learning with them. C++ may be more complex than C#, but they're both incredibly complex for a beginner, and so your effectiveness starting out relies an incredible amount on which books you choose to go through. When I was learning C++, I really enjoyed the book Accelerated C++ by Koeing and Moo. It eschews the "learn c, then c++" attitude some other books have, and believes that C++ is significantly different enough from C to warrant a different approach. And you learn C++ one piece at a time, so it's never overwhelming. I heartily recommend it if you decide to learn C++.
I don't own any C# books for beginners, so you'll have to ask someone else for a recommendation :P.
Just a quick note: programming is incredibly difficult when you're just starting out, but it's 10x as rewarding, and is one of the most fun skills you can pick up. Good luck on your journey!
You have a long journey ahead of you, but here goes :D
Beginner
C++ Primer: One of the better introductory books.
The C++ Standard Template Library: A Tutorial and Reference: Goes over the standard template library in fantastic detail, a must if you're going to be spending a lot of time writing C++.
The C++ Programming Language: Now that you have a good idea of how C++ is used, it's time to go over it again. TCPPL is written by the language's creator and is intended as an introductory book for experienced programmers. That said I think it's best read once you're already comfortable with the language so that you can full appreciate his nuggets of wisdom.
Intermediate
Modern C++ Design: Covers how to write reusable C++ code and common design patterns. You can definitely have started game programming by the time you read this book, however it's definitely something you should have on your reading list.
C++ Templates: Touches on some similar material as Modern C++ Design, but will help you get to grips with C++ Template programming and how to write reusable code.
Effective C++: Practical advise about C++ do's and dont's. Again, this isn't mandatory knowledge for gamedev, but it's advice is definitely invaluable.
Design Patterns: Teaches you commonly used design patterns. Especially useful if you're working as part of a team as it gives you a common set of names for design patterns.
Advanced
C++ Concurrency in Action: Don't be put off by the fact I've put this as an "advanced" topic, it's more that you will get more benefit out of knowing the other subjects first. Concurrency in C++11 is pretty easy and this book is a fantastic guide for learning how its done.
Graphics Programming
OpenGL: A surprisingly well written specification in that it's pretty easy to understand! While it's probably not the best resource for learning OpenGL, it's definitely worth looking at. [edit: Mix it in with Open.gl and arcsynthesis's tutorials for practical examples and you're off to a good start!]
OpenGL Superbible: The OpenGL superbible is one of the best ways to learn modern OpenGL. Sadly this isn't saying much, in fact the only other book appears to be the "Orange Book", however my sources indicate that is terrible. So you're just going to have suck it up and learn from the OGL Superbible![edit: in retrospect, just stick to free tutorials I've linked above. You'll learn more from them, and be less confused by what is 3rd party code supplied by the book. Substitute the "rendering" techniques you would learn from a 3d book with a good 3d math book and realtime rendering (links below)]Essential Mathematics for Game Programmers or 3D Math Primer for Graphics and Game Development: 3D programming involves a lot of math, these books cover topics that OpenGL/DirectX books tend to rush over.
Realtime Rendering: A graphics library independent explanation of a number of modern graphical techniques, very useful with teaching you inventive ways to use your newly found 3d graphical talents!
I guess I'm going to go ahead and be "that guy".
Don't aim to work with a specific language.
I feel you should reframe your goal to be a "problem solver" that knows how to pick and use various tools to solve a problem. C++ may be one of those tools. Maybe C. Maybe Python. Maybe Java. You want to develop your skill set to be flexible enough to adopt the right tool for a job. Now, that's not to say you can't be a language expert. Language experts are very valuable and becoming one is a perfectly reasonable goal. That said, I think you'll find that you have many more opportunities when you remain flexible.
With that out of the way, I would say good next steps for continued C++ mastery are to read and understand Scott Meyers' excellent books:
Also go through the CppCoreGuidelines.
Beyond the language, make sure you know your standard data structures and algorithms.
> creating a strong cryptography algorithm is primarily trial and error
I don't think it's trial and error, more like a series of steps in which each is designed to befuddle a particular class of attack that may have been successful on previous iterations. This sort of goes back to the Cold War and even WWII—a code like Enigma was the scramblers and the plugboard, where the plugboard was specifically added to foil a type of dictionary attack.
Anyhow, not that I really know too much about it, but this is a fantastic book on the topic.
No. C++ is somewhat unique in that you really get what you pay for; I've not seen a single good online resource to learn it. Every tutorial I have ever looked at contains misinformation and bad practice.
The best way to learn C++, if you have done programming before, is with a book like Accelerated C++ or another from this list. If I am to consider you a complete novice, I would suggest you pick up Python or Ruby again before delving in to C++. There are good resources online for those and they are linked in the sidebar and FAQ.
AIMA. A real treasure trove!
This is what I got.
I highly recommend doing these things
Buy/Read this:
http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Look this over:
https://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx
Check out the hey script guy columns
Last browse the script repository for examples
https://gallery.technet.microsoft.com/scriptcenter/site/search/?f%5B0%5D.Type=ScriptLanguage&f%5B0%5D.Value=PowerShell&f%5B0%5D.Text=PowerShell
I keep a copy of this book on my desk. I've never read it but I'll be damned if it's not sitting on my desk.
The code you posted was generated from a grammar definition, here's a copy of it:
http://www.opensource.apple.com/source/bc/bc-21/bc/bc/bc.y
As such, to answer the question in your title, this is the best code you've ever seen, in the sense that it embodies some very powerful computer science concepts.
It [edit: the Bison parser generator] takes a definition of a language grammar in a high-level, domain-specific language (the link above) and converts it to a custom state machine (the generated code that you linked) that can extremely efficiently parse source code that conforms to the defined grammar.
This is actually a very deep topic, and what you are looking at here is the output of decades of computer science research, which all modern programming language compilers rely on. For more, the classic book on the subject is the so-called Dragon Book, Compilers: Principles, Techniques, and Tools.
I love this book: http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X
It's a great read without being too math heavy. That combined with the fact that it has a great associated booksite, a Coursera course, and a couple of followup books by the same author that do go into the more mathy aspect of it, if you're so inclined, make it a great introduction to the world of Algorithms.
What OS? Linux, of course. When TPB order everything locked down, you don't want to be caught using a Microsoft OS. -- What distribution? The easy path is Ubuntu, with the Cinnamon UI, or LinuxMint 13, when issued (May 2012).
What IDE? There's lots to choose from. My favorite is "geany".
https://en.wikipedia.org/wiki/Geany
For TCP/IP protocol tutorial. Recently updated by Wright:
Stevens, "TCP/IP Illustrated", 3-volume set.
http://www.amazon.com/TCP-IP-Illustrated-Volume-Set/dp/0201776316
On human interface guidelines relevant to programming:
https://en.wikipedia.org/wiki/Human_interface_guidelines
For GNOME 2, see:
http://library.gnome.org/devel/hig-book/stable/
To develop Linux applications:
You are right. You MUST know how to program in C. When others tell you that object oriented programming is the thing, know that you can do object oriented programming in C. Avoid interpreted languages (Python, Java, and others) as a first programming language. Interpreted languages teach bad habits and hid too much of what's going on from you such that debugging becomes difficult to impossible.
However, if all you intend is "casual programming", the Python will do, if you must. It's just not the best choice first a first language if your intent is to become a "professional programmer". I use Python myself; It works for what I need to do quick and dirty.
Definitive, but for experienced programmers:
http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628/ref=sr_1_1?s=books&ie=UTF8&qid=1335197606&sr=1-1
As a tutorial for someone learning a first programming language and how to program from zero:
Perry, "Absolute Beginner's Guide to C", 2ed.
-- I have not read the book, but the ToC looks reasonable for a beginner.
http://www.amazon.com/Absolute-Beginners-Guide-2nd-Edition/dp/0672305100/ref=sr_1_6?s=books&ie=UTF8&qid=1335197606&sr=1-6
OK, you don't want a full CS curriculum, but some topics in discrete mathematics are mandatory. ... Ack! Having looked over the offerings at Amazon, I believe that Epp, "Discrete Mathematics with Applications" may be the best of the lot, but at $187, it is hard to recommend without knowing your intent and interest. The reason I suggest this title is that it looks focused on application to computer science topics. It covers a number of topics that are NOT covered in many of the other titles, enough so that should you use other texts you will have spent more than the $187 that this title includes. JMHO.
http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/ref=sr_1_1?s=books&ie=UTF8&qid=1335199316&sr=1-1
See also: Sedgwick, "Algorithms" -- You'll probably need it sooner than later.
http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X/ref=sr_1_1?s=books&ie=UTF8&qid=1335200153&sr=1-1
Remember that Linux OS? You are going to need some programming tools, right? If you intend to write GUI applications based on the GTK+ toolkit, then install the package "glade" or "glade-gtk". Installing a glade package will suck in over 100 other packages essential to building a GTK based GUI application. Specifying glade to the package manager is just easier that finding and installing all the other necessary parts by hand.
If you are going to do command line based UI programs, then package "build-essentials" should be adequate.
There are some other things to read:
On how to organize, grow and maintain a Linux software development project: Fogel, "Producing Open Source Software"
http://producingoss.com/
You can read it online here, but buy the book too to help support Fogel. He's gotta eat too.
On the culture of writing Open Source Software:
Raymond, "The Cathedral and the Bazaar"
http://www.catb.org/~esr/writings/cathedral-bazaar/
Linux programming is not like Windows programming.
Read and study ESR's TAOP.
Raymond, "The Art of Unix Programming"
http://www.catb.org/~esr/writings/taoup/html/
You can read it online, free. However, buy a hardcopy too. Raymond has to eat too.
Now to get really technical. What interface do you write to?
Kerrick, "The Linux Programming Interface: A Linux and UNIX System Programming Handbook"
http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200/ref=sr_1_1?s=books&ie=UTF8&qid=1335201257&sr=1-1#reader_1593272200
Beginning to focus on GNU style programming:
GNU Coding Standards
https://www.gnu.org/prep/standards/
GNU Coding Standards is more than how to and how much to indent a line or how to set braces. You will get into the topic of Make and Autotools. Make is a program to build complex softare and Autotools is about how to build a package for distribution, the package that any Unix flavor can use; it is not focused on any specific distribution. See also: "configure and make"
Enough! There's more, but I have too much time in this already for today.
[edit: typos]
>So if DF is telling the truth, Valve lied to the community...
DF is wrong when he says "the random chance is all BS." There's nothing mutually exclusive about "random" and "pre-determined."
If you roll dice, you get random numbers; if you write those numbers down, they're still random numbers. This was, in fact, the old school way of using random numbers for all sorts of stats problems.
Valve didn't lie. DF et al. just don't know what "random" means.
The dark side has lot of facets, it depends on what you want to achieve.
If you are already working on web applications and web in general, then you may want to start with the Web Application Hackers Handbook by Dafydd Stuttard and Marcus Pinto.
This is a very valid book and with your existent knowledge it will be a very interesting read: i may also advise you to read The Tangled Web by Michal Zalewski, this instead will give you a very in-depth look of browsers' quirks and their inner working, quirks you'll learn to exploit.. for science!
Then there is the world of binary reverse engineering and exploitation, my preferred literature on this is Hacking: the art of exploitation: keep in mind that the techniques there may be outdated, but the reasoning and much of the concepts are still valid. It's a very specific book with very detailed information and you are required to know a bit of assembler, C and very low-level stuff.
Happy hunting and good luck!
I have the UNIX and LINUX System Administration Handbook It's awesome and has a pirate boat on the front, so you know it's good. It's great for best practices type stuff, and there's a little bit of sysadmin humor mixed in.
I also have the Linux Command Line and Shell Scripting Bible which is good for CLI reference.
Other than that, you can find a ton of stuff on the web. Is there anything in particular you are looking for?
Author here. Let me start:
First software company I founded develops software components for other programmers:
https://www.gemboxsoftware.com/
Our customers include NASA, MS, Intel, and US Navy:
https://www.gemboxsoftware.com/company/customers
Second company I co-founded screens programmers before interviews:
https://www.testdome.com/
We are used by Paypal and Ebay, among others.
I finished computer science at University of Zagreb.
I high school, I won 1st place at national computer science competition in 1997. Because of that I attended Central European Olympiad in Informatics, where I got a bronze medal:
https://svedic.org/zeljko/Competitions/ceoi_medalja.jpg
I have also been part of Croatian team at IOI in Capetown:
https://svedic.org/zeljko/Competitions/ioi_team.jpg
Here is my Linkedin profile: https://www.linkedin.com/in/zeljkos/
I don't work in AI, I got the idea while reading Peter Norvig's book:
https://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597
Hope I changed your mind about how certain you can be about something just based on the first feeling. My about page was one click away.
Although I really know programming and sell my software to thousands of companies, I have to admit I don't see how that makes my article more or less credible. It is a philosophical text, not text about software. I think you made "Appeal to Authority" logical fallacy:
https://www.logicallyfallacious.com/tools/lp/Bo/LogicalFallacies/21/Appeal-to-Authority
Every article should be judged by its arguments, not the credibility of the author.
Taking a course will definitely help and I have a few book suggestions.
Intro to Algorithm
This is pretty much the holy grail on algorithms, used in many college CS courses.
Skiena's Algorithm Design
My personal favorite. Combines his Ph.D experience with real world problems.
Practicing is always good, try some of these:
https://www.bloc.io/ruby-warrior
http://coderbyte.com/
http://www.codewars.com/
http://exercism.io/
http://www.rubeque.com/problems
Learning material:
http://www.rubytapas.com/ (videos)
https://practicingruby.com/
http://www.amazon.com/Eloquent-Ruby-Addison-Wesley-Professional/dp/0321584104
http://www.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330
http://www.amazon.com/Design-Patterns-Ruby-Russ-Olsen/dp/0321490452
If you don't have a CS background reading about algorithms and data structures can also be beneficial for you:
http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X
Big fan of that book. New edition due soon too!
I recommend picking up a copy of either Programming Principles and Practice Using C++ or C++ Primer.
​
https://en.cppreference.com/w/ is a reference website, and is the goto resource for quick documentation lookups, etc. However, when learning C++ from scratch, a book is simply the best way to go.
I assume you're doing user support with exchange and not administrating the server. I learned about powershell a lot from getting an exchange server with a DAG that broke constantly thrown my way. I use powershell just about everyday as a windows admin. I recommend checking out /r/powershell.
On a day to day, I'm running powershell to lookup user information even if it's just basic stuff I can do in cmdline such as "net user %username% /domain" to find some info on their account without having to go into ADUC. I'll use it to connect to Exchange Online and take a look at mailboxes and assign permissions or set out of office messages if I get a ticket like that. I create longer scripts and modules that I run to create new users, remove access to terminated employees, and to cleanup AD, O365, FileShares, etc. I've also written scripts to pull data from websites and put them in an excel spreadsheet and such.
Let's say I get a ticket in asking for employee A to have access to employee B's calendar. They could do this on their own, but why try to teach them when I can just quickly do this (of course I'd teach them if this was a constant thing). I'd open up my powershell console on my computer and connect to Exchange Online (My on-premise server if I was in my old environment) and I take a look at their current settings. So first I connect to Exchange Online. I have a profile setup to where I can run a cmdlet I have created that does the below by just typing "Connect-EXonline" into powershell.
$credentials = Get-Credential -Credential "$($env:USERNAME)@company.com"
Write-Output "Getting the Exchange Online cmdlets"
$Session = New-PSSession -ConnectionUri https://outlook.office365.com/powershell-liveid/
<br /> -ConfigurationName Microsoft.Exchange -Credential $credentials
-Authentication Basic -AllowRedirection
Import-PSSession $Session
From here I will be connected to my Exchange Online EAC. Now I'll want to grab their calendar permissions so I'll run a Get-MailboxFolderPermission on a mailbox to see what permissions they have and then if the request isn't already happening I'll run
Set-MailboxFolderPermissions -Identity [email protected]:\calendar -user [email protected] -AccessRights Editor
Or whatever I so please. There, I'm done. So I did that in 3 quick lines rather than clicking all through some clunky GUI.
Want to learn powershell? I recommend starting with "PowerShell in A Month of Lunches"
. This is how I started learning. Also go to /r/powershell and see the types of questions and answers people are asking/giving. If you want to learn python or bash, I don't have as much help for you other than to start with codeacademy.com if you don't know syntax already. Otherwise, find forums/subreddits for it.
Tl;DR: I recommend starting with "PowerShell in A Month of Lunches" if you are a windows admin and want to start learning PowerShell.
While Metasploit is a good tool, I would advise you to stray away from it until you learn. (I’m ignoring the fact that you rarely use Metasploit for web penetration testing in the real world anyways...)
You can carry out most of web penetration testing with just few tools like BurpSuite (this is the main one), a directory bruteforcer (gobuster, dirbuster, dirb, wfuzz..) and Nmap. These 3 tools should give you initial idea about the web application and its structure. Then it boils down to your enumeration and ability to spot weird or possibly vulnerable behavior. What is considered as “weird” or “vulnerable” behavior? According to OWASP, countless things. They made a whole web penetration testing guide for that reason - you can find it here: https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents.
Alternatively, this book (https://www.amazon.com/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470) covers web based exploitation in great depths and I highly recommend you obtain it. It was one of my first books ever and is definitely among my favorites.
Another useful resources:
https://portswigger.net/web-security
https://www.hackerone.com/hacker101
EDIT:
Yes, there are other very specific tools which come in handy such as wpscan or sqlmap. While I don’t mind wpscan that much, I strongly believe one should be able to do a manual sql injection before using sqlmap (therefore avoid sqlmap when learning). This way you understand what is happening behind the green terminal ;).
PS: Sorry for formatting, typed this up on a phone. I’m also pretty tired so please excuse my janky grammar!
You might want to start by looking here : http://www.nand2tetris.org/
It's an "online class" based on this book http://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686
They start with simple logical units (In the first chapter you'll build NOT, AND, OR, XOR from NAND) and end with Tetris.
To get from transitors to NAND check this out http://www.cs.bu.edu/~best/courses/modules/Transistors2Gates/
Thanks ;). Not so skilled on that and my advice might be misleading; though I got a background in cs:This would be my suggestion for someone beginning.
You can also search for those books pdf by using google hacks eg
filetype:pdf "title of the book here"
orintitle:index.of "title of the book here"
did you by any chance write this book?
http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X
this isnt particularly related but i always like pointing out rand's most popular ever publication
> Supponiamo che uno (anzi, più di uno visto che siamo tutti componenti di un LUG) voglia iniziare a smanettare un po' in quest'ambito, che cosa consigli?
di farlo :)
> Mettere su un webserver e iniziare a tentare di bucarlo con gli exploit conosciuti può essere una buona idea oppure è meglio prima procedere con altro?
Tutto fa brodo (mi', ventesimo proverbio, mi sto biscardizzando :). Però per prima cosa devono essere chiare le problematiche agli strati più bassi: boot da media esterno, forensics "malevola" (accesso al fs, reset delle password, estrazione delle password, trojanizzazione dell'OS, ..), MITM e i suoi derivati, poi nmap e network/service discovery come se piovesse, analisi di tutti i servizi esposti, poi "finalmente" potete dedicarvi anche alla parte (web) applicativa.. :)
Ci sono moltissimi "playground" per divertirsi ed imparare, sia come vm da scaricare che contest, crackme & co. online, alcuni al volissimo:
(copio & incollo dal sorgente che usiamo per generare la documentazione che distribuiamo a corsi & co, spero mantenga la formattazione - non è aggiornatissimo):
Esercizi
Elenco di applicazioni vulnerabili che possono essere utilizzate per imparare/approfondire le vulnerabilità nelle applicazioni web:
Elenco di applicazioni vulnerabili da altri siti:
Libri consigliati
Metodologie e check-list
Cheat sheets
> Da esperto di sicurezza, hai qualche consiglio su qualche "giochino" da far vedere in conferenze e relazioni per sensibilizzare le persone sull'argomento? Attualmente noto che fa molta presa questo iter (che è più sensazionalistico che altro):
> creo una rete wifi aperta senza dir loro nulla e aprendo wireshark
> durante la conferenza loro ovviamente la utilizzano senza pensarci troppo
> a fine conferenza mostro loro quante cose avrei potuto prelevare se solo avessi voluto
Ehm.. sarà anche sensazionalistico, ma lo faccio spesso anche io, con anche la parte di MITM sui certificati in automatico. Anche phishing/malware via mail, magari con split screen (cosa fa l'utente, cosa si vede sul "back-end"), con uno dei vari tool che ci sono metasploit, beef o con banali 10 righe di (linguaggio di scripting web a tua scelta).
http://www.amazon.com/Artificial-Intelligence-Modern-Approach-Edition/dp/0136042597 is what I (and probably most others) would recommend as an introductory book.
This is some kind of weird gatekeeping where AI keeps being redefined until it just means adult human intelligence. I have a textbook that literally has artificial intelligence in the title.
Lol what?
Dude, you don't need any fucking classes to start out in IT
You can buy textbooks and earn certs while spending minimum amounts of money
Do not sign up for some fucking ridiculous 23k course. That's insane.
This field is so beautiful because you can dive in without any student debt whatsoever, don't hamstring yourself by going into debt like that
If you want an entry level job, go buy the A+ cert book on amazon
https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X/ref=sr_1_1?ie=UTF8&amp;qid=1549500043&amp;sr=8-1&amp;keywords=a%2B
Maybe do network+ too(that's the path i started out with so I'm biased I suppose).
You're talking like less than 50 bucks for the textbooks and then a couple hundred bucks for the tests(total), and with those 2 certs you can easily get an entry level help desk job and start working your way up.
It beats the fuck out of manual labor, that's for sure
You will pick up the knowledge fairly quickly, but the wisdom part comes slowly.
Read some books:
Start humble, stay humble, be quick to listen and slow to speak, and don't make changes on Friday!
Disclaimer: I only have a masters in maths, and I've just started working as a programmer.
Here are topics I enjoyed and would recommend
If that interests you, you should read The Code Book by Simon Singh. Great history of cryptography with a lot of well explained examples. He also wrote a great book about Fermat's Last Theorem.
A million random digits.
I am also fairly new to the subject. The first book I read on it was The Code Book by Simon Singh. I highly recommend it.
It was written in 1999, and is not an up-to-date, hands-on resource for encryption software. It is more of a primer on the history and evolution of codes and encryption, with great explanations of the foundations of the psychology and mathematics of codes. It's well written, a fun read, and very informative for beginning studies.
I hope it's ok in this sub to post a link to it. It's a non-affiliate Amazon link:
http://www.amazon.com/The-Code-Book-Science-Cryptography/dp/0385495323
To expand on this, the quality of randomness you need depends on what you want to use it for. For simulations, you just want something that appears uniform, but it would be perfectly fine for it to be prerecorded on a big hard drive and therefore widely known, which is why this exists.
For cryptography, on the other hand, you want something which is random to an adversary, so contingent on the information an adversary might have or be able to obtain, you should have a process to produce numbers which are unpredictable to them.
doing this line by line with as we speak with this amazing book. It definitely helps!
There sure are books!
My favorite authors are Mike Myers and Todd Lammle.
Here's a guide for the CompTIA A+ certification.
These books can be a bit pricey, but it's EVERYTHING you need to know for the certification. If you have this book and a computer to practice on, you have everything you need to pass. The book is nearly 1,500 pages long as well. If you struggle to afford the books, you can always search online for illegal copies of older versions and possibly even the latest version that I linked. I assume the copyright police aren't going to be breaking down your doors.
The A+ certification estimates 6-9 months of hands-on training to be able to pass, but it can definitely be done in a shorter amount of time. Don't get dissuaded if after a month you feel tired of studying. Even if you don't have the means to take the exam, the information you can learn will help you so much.
Without the affiliate link.
You might have some better luck if you go top down. Start out with an abstracted view of reality as provided by the computer, and then peel off the layers of complexity like an onion.
I would recommend a "bare metal" approach to programming to start, so C is a logical choice. I would recommend Zed Shaw's intro to C: http://c.learncodethehardway.org/book/
I would proceed to learning about programming languages, to see how a compiler transforms code to machine instructions. For that, the classical text is the dragon book: http://www.amazon.com/Compilers-Principles-Techniques-Tools-Edition/dp/0321486811
After that, you can proceed to operating systems, to see how many programs and pieces of hardware are managed on a single computer. For that, the classical text is the dinosaur book: http://www.amazon.com/Operating-System-Concepts-Abraham-Silberschatz/dp/1118063333 Alternatively, Tannenbaum has a good one as well, which uses its own operating system (Minix) as a learning tool: http://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/0136006639/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1377402221&amp;sr=1-1
Beyond this, you get to go straight to the implementation details of architecture. Hennessy has one of the best books in this area: http://www.amazon.com/Computer-Architecture-Fifth-Quantitative-Approach/dp/012383872X/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1377402371&amp;sr=1-1
Edit: Got the wrong Hennessy/Patterson book...
I take it you want something small enough to fit inside a hollowed-out bible or romance novel, so you can hide your secrets from nosy neighbors?
More seriously, this book is great https://amzn.com/0201558025 but might not be quite what you’re looking for at an introductory level.
I’ve seen recommendations of https://amzn.com/0495391328 (I haven’t looked at this book myself.)
If you go with C++ read Accelerated C++.
This book:
Elements of Computing Systems - https://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/ref=sr_1_1?ie=UTF8&amp;qid=1518118693&amp;sr=8-1&amp;keywords=elements+of+computing+systems
Will do what you are looking to do.
> I was wondering if a DS course was necessary to do well on Leetcode problems
Nope:
Try Leetcode easy problems. Look up new concepts as you encounter them. Repeat.
edit: if you have time, there's also https://www.coursera.org/learn/algorithms-part1
I started with Powershell in a month of Lunches
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=dp_ob_title_bk
If you're fairly new, I think you should start something like Learn Windows PowerShell in a Month of Lunches. You'll find this recommendation everywhere and for good reason. I personally was an peer reviewer of the 3rd edition and read it page-for-page slowly and provided a lot of feedback. It's a good book to get started with.
After that then move into the advanced tool making books like Learn PowerShell Toolmaking in a Month of Lunches.
Of course this just help get you started. You'll need to get a lot of practice with realistic projects to become familiar with how to build tools. I would highly recommend becoming very familiar with Git. There are a TON of tutorials out there (both web pages and YouTube videos).
Honestly to become a good toolmaker you'll need a lot of practice, but in terms of material these are a good source to get you started. Be patient and try to find small projects that you can grab onto. I would also recommend Windows PowerShell in Action for a more under-the-hood kind of view of how things work.
Honestly, your best bet would probably be to read a textbook/reference on the language.
Stroustrup's "The C++ Programming Language" is quite good. If you want something more condensed, you could also check out his "A Tour of C++", which is much of the same material in a much smaller package.
Algorithms (4th Edition)
The big thing you're missing is theory. You have taught yourself to be a programmer, which is great, but you haven't learned any computer science, which is a branch of math focused on whether problems can be solved and how difficult they are to solve. This is likely not particularly applicable to your day to day programming career, but when people start throwing around Big-O notation, it's useful to know what they're talking about. Also it can occasionally help you recognize that certain problems as fundamentally impossible, such as detecting whether a program will run forever or eventually halt.
The second major thing you're missing is formal algorithms training. That means that there are a bunch of useful techniques that you may not know about that may come up from time to time.
The main downside of missing out on these two things is that job interviews, especially for big programmer companies like Google and Facebook, focus heavily on them, especially algorithms. If you don't know that a hash table lookup starts at O(1) but devolves to O(N) in the worst case because of hash collisions, you may have trouble getting a job there.
The rest of what you missed was mostly either crap (UML!) or general breadth stuff that is good to know but not critical (learn how operating systems work, write a compiler, write a TCP networking stack, write a 3D renderer, etc).
I think the best way to deal with the gap is to take a Coursera course on algorithms (there's one starting next month). But that's my learning style. Another alternative would be to pick up a definitive algorithms textbook ( http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X ) and just start reading.
Three CS fundamental books in the order I'd suggest someone read them if they don't have a background in CS.
Elements of Reusable Object-Oriented Software - "Gang of Four". My preferred way to consume this book is to read it lightly, understand the basics of the patterns, and then come back to them individually when you encounter them in the wild or think you want to employ one of them.
Then there are these books that aren't really "CS books", but are geared more twoards practitioners.
The Practice of System and Network Administration.
A few general principles:
You've already done the first step: admitting that college can only teach the fundamentals while the rest of the things you need to know, you will learn while working.
With that out of the way, here's the next step: apply the Joel Test to your new employer.
If it gets an 11 or 12, you'll be fine. Find a senior developer there to mentor you and you'll be a decent software engineer in 1 - 2 years.
Otherwise, while you might learn a lot of new stuff in your first job, they might be inadequate, outdated, or outright incorrect. In this case, plan an exit strategy ASAP so that you can leave to another company that has a much higher score in the Joel Test. In this fast paced software industry, it makes no sense to spend 5 years in a company where you'd only get to grow the same amount as another guy who just spent 6 months in a better company.
Next step: read. No, not those "Teach yourself [insert language that will be deprecated in 2 years] in 24 hours" books - find the books that teach software engineering, lessons that don't get outdated. Here's the usual suggestions:
Finally, if you have free time, find a local user group or open source community and join them. Not only will you learn fundamentals like version control and automated testing, you'll also be up to date to the latest trends in the industry. Because of this, high school/college students who are active in these communities have a great advantage over their purely academic classmates, not to mention the connections they get in the industry allow them to be employed faster.
I really enjoyed Concrete Mathematics by Graham, Knuth, & Patashnik
If you want to pick up some Cryptography, The Code Book is a great intro.
Pragmatic Thinking and Learning is good for learning to learn.
The Pragmatic Programmer is good for project code planning and learning how to write code in a well thought out way.
Ethernet: The Definitive Guide is a good read if you want to get up to snuff on your networking, though it can be a bit dry at times.
One of my favorites: http://www.amazon.com/gp/product/0833030477/sr=8-1/qid=1143773276/ref=pd_bbs_1/103-0331069-9851844?%5Fencoding=UTF8
Web dev having trouble finding work? Buy this book and this book, read them and contact [email protected].
Books are still the best way to learn C++! C++ Primer, 5th Ed. covers all the basics of C++11 from functions and standard library usage to OOP and templates. Effective C++ reinforces good practices and idiomatic C++ that, despite being written for C++98, is just as relevent today as it was then, some of its contents even more so than ever before. Then Effective Modern C++ then does the same for C++11 and C++14 features, building on top of what C++ Primer covers about C++11 and introducing the subtle changes brought about by C++14. This is my primary recommendation for learning modern C++ from the ground up.
But we live in the internet age! Best make use of it! So many wonderful talks from conferences such as CppCon, C++Now, Meeting C++, ACCU and Code::Dive are all available for public viewing. With regards to modern C++, Herb Sutter's CppCon 2014 Back to the Basics! Essentials of Modern C++ Style and CppCon 2016 Leak-Freedom in C++... By Default are great videos to watch. For more specific topics, here is a list of videos that I've seen and personally found engaging, educational, and worth my time to watch (multiple times!):
rand()
Considered Harmful and What C++ Programmers Need to Know about Header&lt;random&gt;
for random number generation,auto
anddecltype(auto)
(I miss Scott :'( ).There are also shows such as CppChat and CppCast where interesting events, projects, papers, and people related to C++ are brought up and discussed. There are so many interesting blogs to read!
And there is always people on IRC (##c++, ##c++-basic, and ##c++-general) and the Cpplang Slack Channel for live updates, discussions, debates, questions, answers, and/or just plain fun with a group of people that ranges from complete noobs who are learning the basics, to committee members and library authors whose names are known across the community. If you ever have a question or need help, these are the places to go and ask (/r/cpp_questions is nice too! :P ).
And finally, links to videos, blog posts, articles, papers, interesting Stack Overflow questions, almost everything mentioned above is constantly being shared at isocpp.org and on /r/cpp. Subscribe to both to get a constant stream of links to anything and everything about C++.
Edit: as for C++17 material, the standard is not technically completed/published yet, but that hasn't stopped the community from creating material about it! This paper lists all the changes from C++14 to C++17, with links to relevant papers, and this Git repo provides a simple "then, and now" comparisons of the major changes to the language. Talks describing the changes in breadth and in depth have been given at conferences, and blog posts have been written for a more textual description of the changes. C++17 is not a major update like C++11 was to C++98, but full of fixes, conveniences, more language flexibility and utility, and new toys to play with! If you have a solid foundation in C++11, C++14 and in turn C++17 should be relatively easy to pick up compared to the shift from classic (C++98) to modern C++.
TL;DR Learn C++11 the best you can. Once you are comfortable with C++11, the transition to C++14 will feel natural, and C++17 will be waiting just around the corner.
Hi PizzaPartify,
I believe that different companies/teams will place emphasis on different skills. When I was helping to hire software engineers for EA's motion capture studio, I liked to see candidates who showed a strong aptitude for engineering code to be maintainable. For me, this meant a familiarity with design patterns and software development processes (like Test Driven Development or Extreme Programming). In my department, much of our code was in C++ and Python. However, other departments would use languages like Java, C# or ActionScript - depending on the project.
It would be helpful to know what role you are applying to.
To answer your specific questions:
Regardless of the language you're working in, I would also recommend Design Patterns by the gang of four (http://www.amazon.ca/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612).
A game-specific recommendation is Game Engine Architecture by Jason Gregory (http://www.amazon.ca/Game-Engine-Architecture-Jason-Gregory/dp/1568814135). It doesn't matter if you intend to write an engine or not, it is immensely helpful to understand how they work.
I own all of the Game Programming Gems books but use them more as a reference library. The books above will be more helpful right now.
I hope that helps.
The Practice of System and Network Administration, Second Edition
UNIX and Linux System Administration Handbook - 4th Edition
[TCP/IP Illustrated, Volume 1: The Protocols - 2nd Edition] (http://www.amazon.com/gp/aw/d/0321336313/)
These should be part of every ops department's library, if not already in your own personal one.
Pick up Powershell in a month of lunches and grab a free month trial of pluralsight. Two great resources for learning the basics.
For your lab, check on your local craigslist; someone is always getting rid of some gear there. If not there try EBay, can’t swing a dead cat without hitting a CCNA lab kit like these: Cisco Lab Kit
Once you have lab equipment, get some windows servers spun up as that will make learning powershell both applicable and rewarding to you.
&nbsp; Hello /u/rennypenn,
&nbsp;
I was in the exact same situation as you until just a few months ago. I was in customer service for over 10 years but technology was always my passion and I deeply wanted a career in the industry. Unfortunately, I did not complete a college degree and thought a career in IT would never be possible for myself. Then I was introduced to the world of certifications which made my dream into a reality and was able to land a help desk tech position.
&nbsp;
Some people will tell you certifications are not very helpful and will not benefit you much. I've come to realize that people who say this usually do not have any certifications themselves so they've never personally benefited from them and assume certifications to be useless. Do not listen to them, certifications will help show potential employers that you have the fundamental knowledge to do entry-level IT work.
&nbsp;
The following resources will make you more than ready for these exams.
&nbsp;
• Professor Messer video course and study groups
&nbsp;
• Professor Messer course notes and practice test
&nbsp;
• Mike Meyers All-in-One book
&nbsp;
• Mike Meyers 901 and 902 course on udemy
&nbsp;
• CompTIA 901 and 902 objectives.
&nbsp;
• Exam Compass
&nbsp;
• Crucial Exams
&nbsp;
After completing the exams and receiving your certification you should immediately begin a resume and work daily to perfect it. If you are not too comfortable with writing a resume you can visit IT staffing companies like TEKSystems who will give you free resume and interview coaching along with helping you get employment.
&nbsp;
When you get a resume you are happy with, begin sending it to every IT job opening in your area listed on Indeed, Career Builder, Monster, and listings to jobs under the local Gigs>Computers section of Craigslist.
&nbsp;
Apply for any IT position you see and keep in mind that 99% of job postings, even entry-level, will "require" a Bachelors degree, A+, Network+, Security+, ITIL, CCNA, and 5+ years of experience, and much more. Apply to these positions anyway. This is just wishful thinking of the recruiting team. If you apply to enough positions someone will eventually call you for an interview. Even if you really are under qualified for the position you applied to they may have an additional entry level opening that is just not posted yet and still call you. I applied to well over 150 jobs over a 5 week period and finally landed an interview and got the job as a help desk tech, but the job I initially applied was several levels above help desk.
&nbsp;
If I can do it, anyone can. Just don't get discouraged and don't give up. Eventually someone will give you a chance and you will get your foot in the door. Good luck to you.
For anyone who reads this and goes "Wow! What else can powershell do that I haven't heard about??"
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Can't go wrong with Introduction to Algorithms
Another popular algorithm book is Skiena's Algorithm Design Manual
Another one suggested by one of my professors is Algorithms by Robert Sedgwick
Even more formatting fun!
By the way, thank you for this list.
The second edition is due in June http://www.amazon.com/Programming-Principles-Practice-Using-Edition/dp/0321992784/ref=sr_1_2?ie=UTF8&amp;qid=1398086459&amp;sr=8-2&amp;keywords=programming+principles+and+practice+using+c%2B%2B
Enter Bjarne Stroustrup! https://www.amazon.co.uk/Programming-Principles-Practice-Using-C/dp/0321992784/ref=dp_ob_title_bk
Learn C++ (the language you need for Unreal Engine) from its creator. Very beginner-friendly too. "The book is primarily designed for people who have never programmed before".
Or you can follow this book instead.
leet code is a great place for practice problems
For algorithms this book is great
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_9?keywords=algorithms+book&amp;qid=1554149281&amp;s=gateway&amp;sr=8-9
Also, if you are looking for a software engineering role you will also need to brush up on high level design like this video:
https://www.youtube.com/watch?v=KmAyPUv9gOY
Riding on your top post coattails...
The Elements of Computing Systems and Code by Charles Petzold are exactly what you want.
Code goes through number systems, basic information theory, circuits (from gates on up), memory, machine code and programming languages, all with accessible diagrams and explanations.
TECS has you build an actual working computer from the ground up.
The Dragon Book by somebody. A bit out of date now, but really helped me with my parser/tree implementation.
Your missing one:
http://www.amazon.com/The-Programming-Language-4th-Edition/dp/0321563840
C++11 = new edition!
I would supplement your class with one of the many great C++ books out there, because there are many ways to learn C++ but few of them are good (or even "right") ways.
You should be careful to distinguish between best practices from C++ and the new ones in C++11, and I've found that many courses tend to teach C++ as if it's just C with some extra features.
Of note, some really good books are:
At least as good starting points on the "new" C++, and I'm sure others have some really great suggestions too.
Was expecting this dragon book
For designing programming languages, my favorites are
If you only get one then go with Pierce. But If you want to get serious about semantics, then Winskel is the way to go.
On the implementation side my favorites are
I would emphasize the end of /u/razeal113's post. Don't reinvent the wheel. Learn from those who came before you by studying common algorithms.
MIT's algorithms course, 6.006, is a good introduction to the concepts that are important to analyzing and applying algorithms and it also introduces many important algorithms. You can watch the lectures and access the course material for free.
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/
If reading is your thing, I like Skiena's Algorithm Design Manual. It's not too dense and has war stories where you can read about how the algorithms have been used to solve real problems.
http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693
Whatever your goal with programming is, there's a good chance that it won't involve inventing new algorithms; instead, nearly everything you do will involve recognizing how to apply and/or adapt an algorithm you already know to the problem you're trying to solve. The more algorithms you already know, and the more comfortable you are with them, the easier it will be to recognize and apply.
First, you should have gotten a printout with bar graphs indicating which areas you were weak/strong in. Compare that to the exam objectives here: https://www.microsoft.com/en-us/learning/exam-70-697.aspx to decide which areas to focus.
&#x200B;
If you haven't already, sign up for a free Azure trial and play around with InTune. Hands-on experience with it will go a long way on the test. Know how InTune can be used to manage Mobile devices, compliance vs configuration items, App Deployment methods, etc.
&#x200B;
If you have a PC that can handle it, the Microsoft 365 Powered Lab Kit will set up a number of VMs on your machine for practice. It includes guided labs that will prep you for the exam (and your MCSE: Mobility). It can be found here: https://www.microsoft.com/en-us/evalcenter/evaluate-microsoft-365-powered-device-lab-kit
&#x200B;
Learn the basics of PowerShell if you haven't already. You don't need to know how to script, but a basic understanding of cmdlet syntax and some basic cmdlets will get you by. PowerShell in a Month of Lunches (https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=dp_ob_title_bk) is highly recommended by others here, and I recommend the (free!) MVA videos on PowerShell with Jason Helmick and Jeffery Snover (the first one is here: https://mva.microsoft.com/en-US/training-courses/getting-started-with-microsoft-powershell-8276)
&#x200B;
For books, I used Panek's guide (https://www.amazon.com/MCSA-Microsoft-Windows-Study-Guide/dp/111925230X/ref=sr_1_5?ie=UTF8&qid=1538429066&sr=8-5&keywords=70-697+configuring+windows+devices). It is out of date now for InTune, but the rest of it should still be relevant.
&#x200B;
Last, remember that you don't need to go deep into any of the tech covered - the test is hard because it is broad.
&#x200B;
If you have specific areas you want materials for, let me know, and I'll post what I can find.
&#x200B;
Link
A principle in web app security: user input cannot be trusted.
With that in mind, the following are the kinds of user input you can mess around with: query parameters, post params, file uploads, cookies, http headers, even out-of-band inputs like emails (if they get processed) or all of the above but for a different but related service.
Sometimes user input can be crafted to exploit unexpected behavior. Causing a 500 error may give you interesting error messages. Maybe form input isn't sanitized and you can perform sql injections, XSS, and the like. File uploads - do the files appear to be uploaded to their server (and not something like S3)? Try dropping php files (if it's a php application), try XXE if Word or Excel documents are expected. All sorts of fun possibilities can be explored wherever there is any user input.
Another subject worth studying: attacking authentication. Is there no rate limiting? Usernames can be enumerated? How about a brute force attack? Take a look at the session token in the cookies - can you reuse them? Are they custom-made (does not appear to be generated by a known framework)? Try attacking the token-generation scheme itself. Discovered an XSS vuln and the cookie entry for the session token is not set to http only? Write a script to steal them cookies - that'll be your XSS payload - sit back and wait for someone to bite.
I think exploring these topics is a great start.
Recommended reading:
https://www.amazon.com/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470
Edit: to add, the tools you have listed are info gathering tools. That's the first thing you want to use to give you a nice idea about potential attack vectors. Sometimes dirbuster can yield nice results in itself. For example, I found a deployment script sitting on a prod server - with AWS keys!!! Tip for info gathering: you can use builtwith to see what tech the target is using, and tailor info gathering scripts (like dirbuster) for that.
I learned most of what I know from Robert Sedgewick, whose prose is exceeded in clarity only by his diagrams:
https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X
Steve Skiena is also excellent, and writes a bit more accessibly:
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
You can usually find these on the shelves of a university library.
For those interested, Coursera is hosting an Algorithms course taught by Kevin Wayne and Robert Sedgewick, authors of a fairly well received Algorithms book.
Worth noting that there is a third edition that is significantly updated. I own both would say they're both good but you'll get a lot more out of the third edition.
https://www.amazon.ca/Practice-System-Network-Administration-Enterprise/dp/0321919165
The other guys are right that they are multiplexers.
Check out The Elements of Computing Systems if you really want to learn from the ground up. I've just started reading it and after the second chapter you have to figure out how to make an ALU using logic gates made in the previous chapters from a NAND gate including 16 bit multiplexers.
Amazon Link
Book Website
Caclulus track is typically required. Linear algebra is pretty useful (and often required). If you really wanna go into CS specific maths.... pick up a book on Discrete Math and give it a go. If you want to be really hardcore, pickup Concrete Mathematics ... good luck, hard book.
Honestly, you're probably better off spending that time learning a programming language. Specifically, whatever language your school teaches mostly. Math in a CS bachelor isn't very intense until you get into senior/graduate level courses.
Start with a good algorithms book like Introduction to algorithms. You'll also want a good discrete math text. Concrete Mathematics is one that I like, but there are several great alternatives. If you are learning new math, pick up The Princeton Companion To Mathematics, which is a great reference to have around if you find yourself with a gap in your knowledge. Not a seminal text in theoretical CS, but certain to expand your mind, is Purely functional data structures.
On the practice side, pick up a copy of The C programming language. Not only is K&R a classic text, and a great read, it really set the tone for the way that programming has been taught and learned ever since. I also highly recommend Elements of Programming.
Also, since you mention Papadimitriou, take a look at Logicomix.
Well it depends how much you want to learn, trying to learn all (or even a lot) of C++ or even just the topics covered in that book before your semester starts is insane. C++ is really complicated and takes many years to really get a grip on. If you're just trying to learn some of what's covered in an intro to C++ class this book will serve you well, and you definitely don't need to go through the whole thing to get an introduction to the language.
If you want a shorter/faster book there's Accelerated C++ which is also in the wiki. I recommended C++ Primer since you mentioned you only had minimal programming experience. Accelerated C++ is aimed at folks who are familiar with programming but not C++, so it's faster.
Edit: I missed your mention of moderate experience with Java, so Accelerated C++ would probably be a fine choice as well. Although it doesn't cover the new C++11 features.
Our co-founder Eliezer Yudkowsky invented the entire approach called "Friendly AI," and you can read our original research on our research page. It's interesting to note that in the leading textbook on AI (Russell & Norvig), a discussion of our work on Friendly AI and intelligence explosion scenarios dominates the section on AI safety (in ch. 26), while the entire "mainstream" field of "machine ethics" isn't mentioned at all.
cc him on code reviews for your day to day scripts and proactively go over the small ones with him, line by line, a few times a week.
I have a list of exercises(pm me if you are intested) from: http://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057 -- I assign 4 of these exercises weekly and go over it in 1:1s. Buy him a few books, and explain that you can't send him to a conference because of budget issues this year, but you want to invest in his career development -- it will go along way to building the mentor-mentee relationship.
The thing I like about this book, its age does give a good historical perspective, but the questions at the end of the chapters are easily adapted into good questions to fit a particular environment.
I've used this approach to bring up 3 jr linux sysadmins so far.
I'm just beginning this journey myself, so judge what I say accordingly.
Artificial Intelligence: A Modern Approach seems to be the most popular textbook.
This article has some seemingly good advice, though it seems to be geared more toward Machine Learning (ML) than AI in general.
I think you'll want to learn a programming language. The above article recommends Python as it is well suited to ML.
There is (was?) a free online course on ML from Stanford by Andrew Ng. I started to take it a couple years ago but never finished. It is very accessible. The lectures appear to be on YouTube.
Grokking Algorithms is a highly regarded book on algorithms.
Make a free Amazon Web Services account and start playing with Sagemaker.
There really is no well defined path to learning AI, in my opinion. It is a highly interdisciplinary endeavor that will require you to be a self-starting autodidact. It's very exciting though. There is still plenty of new ground to be broken. Some might argue it is difficult for the little guy to compete with big labs at the big tech companies with their ungodly amounts of data to feed their AI, but I am optimistic.
Artificial Intelligence: A Modern Approach is a commonly used introductory textbook.
Eloquent Javascript
You Don't Know Javascript
Wes Bros (not all are free, but lots are and he has lots on Youtube. if you want some of the paid ones, there are ways, Yarrrrrr. But if you can, buy it as it's not that expensive and he's a kick ass teacher. If you can't afford them, yarrrrrrrr! Then when you get a job, go and buy them so you're not a dick.
Advent of Coding - Great fun, you'll likely only get the first few to start, but you can read other's code to see how "professionals" do it.
There are a number of other sites for coding practice like... I think... leetcode? Something like that. Codewars. There's a ninja themed one as well. Do a couple google searches and you should have tons.
Oh, and the book JavaScript and JQuery: Interactive Front-End Web Development is a great book for starting out, it's dry as hell, but it's full of everything you want to know. The link is not an affiliate or whatever, I get nothing, just read it.
It sounds like you don't understand the basics of programming logic, and not JS / JQuery. There are fundamentals you need to first learn before you take on any kind of programming and that is how it actually works and how things are manipulated.
The difference between HTML / CSS and any programming language is that HTML / CSS are declarative languages meaning you say what you are going to do (i.e. background-color: blue;) whereas programing languages are dynamic. It will take some time for you to get used to, but like all things it requires a lot of practice. I would also suggest reading some books. I bought and read JavaScript and JQuery: Interactive Front-End Web Development and it helped me make sense of things.
Others have said build something instead of just doing codeacademy and I completely agree. Though it will be confusing and hard to begin with, it will help you understand the basics. A few good things you could build could be:
I would say do the web calculator, you would have to do the HTML / CSS (yes make it look pretty like the calculator on your phone), and then build the functionality.
Hi! I recommend the following books:
You can find other similar books here and here.
One that I especially liked (although closer to an algorithms textbook, but also had very cool "War Stories") is called The Algorithm Design Manual.
Have fun reading! :D
Skiena's Algorithm Design Manual. CLRS is the other typical recommendation, but I found Skiena to be much more readable.
Wat? No-one's mentioned careercup.com ('Questions' at the top of the page)? Go there and find Amazon's, and many other companies' interview questions. Research the things you don't know, limber up on the variety. It'll be overwhelming, but it's what you need.
Oh, and one recommendation for an algorithms book is Steve Skiena's Algorithm Design Manual. It covers the basics, but goes into /some/ of the more esoteric data structures (and dynamic programmng) as well.
Yep, if you're a Windows admin you need to learn powershell.
This is a great book to get started.
I picked up Accelerated C++ and it's, by far, one of the best books I've read. It's terse and provides an amazing amount of detail for its size.
Amazon
The Practice of System and Network Administration: Volume 1: DevOps and other Best Practices for Enterprise IT (3rd Edition) https://www.amazon.com/dp/0321919165/ref=cm_sw_r_cp_apa_i_YBkxDb2D8ZNHG
/thread
If good is the priority, I recommend going straight to the source -- the guy who invented the language, Bjarne Stroustrup. You can buy it new for $35, or head to your local library and borrow it for free.
ovde je neces naci, tako da bih ti preporucio amazon. obavezno uzmi 2nd edition posto sadrzi najnovije standarde (c++11 i c++14).
kada uzimas knjigu sa neta, proveri bookdepository.com i amazon.com i vidi koja je jeftinija. ako su iste/priblizne cene, uzmi sa bookdepository posto isporucuju mnogo brze od amazona.
If you're interested in reading up on this, I highly recommend https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319
Or for a more hands-on approach: https://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/
Scott Meyers Effective C++
Or you could get the 3rd edition:
http://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876/
with 5 more ways to improve your C++
This is awesome! I've been slowly getting more and more interested in hardware, and this is something I would absolutely love to do. I just don't know where to start.
I've been reading a couple of books about learning lower level stuff, and planned on working my way up.
I'd really like to get out of webdev and into low-level programming, or even hardware design and implementation. There's sooooo goddamn much to learn, that I doubt I'll be ready without getting a BS in Comp. Engineering, and maybe a master's as well.
(I'm absolutely a beginner, and if anyone is interested in the books I've been reading, these are they:
The link to the book is;
http://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1217450690&amp;sr=8-1
or uk amazon
http://www.amazon.co.uk/Elements-Computing-Systems-Building-Principles/dp/0262640686/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1217450662&amp;sr=8-1
the title is Elements of Computing Systems: Building a Modern Computer from First Principles.
It looks like a really interesting book. Shame I have banned myself from buying books until I get through some more of the ones sitting on my shelf.
Learn Powershell In a Month of Lunches
Read this and you'll be on your way.
Check out Powershell in a Month of Lunches
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160
Great starter for getting into powershell
http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
This has been one of my favorite books: http://www.amazon.com/Linux-Bible-Christopher-Negus/dp/111821854X/
And I read through this entire book: http://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/
They are both great!
Edit: I can't type much because my internet is going out regularly at the moment, otherwise I'd love to elaborate further.
> windows server/services?
Microsoft's TechNet and MSDN are Microsoft's main reference portals for operations and development, respectively.
For structured learning, Microsoft offers their MCSE Program. Each exam covers a specific topic, and there are learning objectives and links to reference material available. Microsoft Press will usually have a self-study guide available for each exam.
There's also the Microsoft Virtual Academy, but I've never used it and can't vouch for its quality. Of course, it's free, so....
> linux server/common services? (Could be distro specific)
For professional use, the most commonly used Linux distributions are RHEL/CentOS and Ubuntu. (Debian is also popular, but it's close enough to Ubuntu that you can lump the two together.)
Both RHEL and CentOS have documentation available:
RHEL Documentation Page
Ubuntu Server Guide
RHEL's documentation is far more thorough and complete. However, Ubuntu has community support in the form of the Ubuntu Forums and Ask Ubuntu, and I've personally found it easier and faster to find specific information and solutions for Ubuntu.
For structured learning, Red Hat has a certification track available (which is obviously focused on Red Hat technologies), and LPI has a certification track that is more vendor-neutral. There are self-study books available for Red Hat's certifications, but they are all outdated for the current exams, and I don't recommend buying them until they're revised for RHEL 7.
For self-study, the closest thing to a Linux system administration bible that currently exists is the UNIX and Linux System Administration Handbook. However, it's a bit dated in certain respects.
Linux support and documentation, like its development, is spread out over the Internet. If you're looking for how to do something, usually the best place to start is Google. Searching for "[stuff] Ubuntu" or "[things] CentOS" will usually send you to the right place. Stack Exchange is also a pretty good resource:
> Networking
Networking education is split into two worlds: theoretical/academic computer networking, and practical, vendor-specific networking.
For theoretical networking, your best bet is to pick up a textbook. We recently had a thread discussing recommendations.
For practical, vendor-specific networking, the big player is Cisco. Cisco has a certification track available with course objective and reference materials. For self-study, anything written by Wendell Odom is gold; however, bear in mind that you really need a lab for self-study to be effective.
Other companies, like Juniper or HP, also have networking certifications available, but I only recommend them as a supplement.
Lastly, while I describe Cisco's training as "practical," that doesn't mean that the theoretical aspect of networking is unimportant for a professional. There is an industry-wide push toward software-defined networking, and if your SO wants to get in on that, she'll need to have a firm understanding of computer networking theory.
> NetSec
Hardcore NetSec isn't really my field, but /r/netsec has a Getting Started Guide with some resources available.
I've heard that this is the best handbook for UNIX/Linux administration:
http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
Starts in January: https://www.coursera.org/course/aiplan
EDIT: In case you can't wait a month (which according to /u/sovietmudkipz is apparently a completely unreasonable amount of time to wait for a free college course), check out this textbook: it's my understanding that it's basically the gold-standard for intro-AI education.
Well, for AI, you should prepare for a world of math, math, math, along with computer science and programming (obviously). Understanding an historic vision of A.I. is also important, so I would consider starting to read something like this particular book: Artificial Intelligence: A Modern Approach! This a college-level A.I. book, so be patient if there are things you don't fully understand at first. Work hard and you can do anything you set your mind to!
I'm reminded of this Ira Glass quote:
https://www.goodreads.com/quotes/309485-nobody-tells-this-to-people-who-are-beginners-i-wish
Are you a professional developer? You might talk to your team lead, manager or other senior engineer on your team about making a plan to improve.
> Death by iteration or death by un-maintainability
Learn about refactoring. This is the classic book:
https://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672
but it is a common idea now. Test-driven development could help with this.
> perfect response with a great code example way better than I could've done it given weeks or months
The key habit here is to ask yourself, "What would I have had to know to come up with this myself?" and then go learn that and internalize it so if you ever see this problem or a related one again, you can solve it. If you do this consistently, you'll have a powerful bag of tools and be able to solve lots of problems easily that you couldn't before.
Finally, it doesn't sound like you have a formal CS education. You might think of going through some undergrad CS courses online (edX, Coursera, MIT OCW, etc.) It takes long-term persistence that few have the patience for, but if you can make it through, they will transform your understanding of computers and development.
I've peeked at this free online book a few times when implementing things. I think it's a pretty solid reference with more discussion of these sorts of things!
Another option is a "real" textbook.
My programming languages course in university followed Programming Languages: Application and Interpretation (which is available online for free). It's more theory-based, which I enjoyed more than compilers.
But the dragon book is the go-to reference on compilers that is slightly old but still good. Another option is this one, which is a bit more modern. The latter was used in my compilers course.
Outside of that, you can read papers! The older papers are actually pretty accessible because they're fairly fundamental. Modern papers in PL theory can be tricky because they build on so much other material.
LFTL.
Here are some standard textbooks on the subject. When I am looking for a book on a particular subject, I like to look at the class schedules for local universities and see what they are using. A class on programming languages is a standard part of a CS program I believe.
Compilers: Principles, Techniques, and Tools
http://www.amazon.com/Compilers-Principles-Techniques-Tools-Edition/dp/0321486811/ref=sr_1_3?ie=UTF8&amp;qid=1343095509&amp;sr=8-3&amp;keywords=Dragon+Book
Concepts of Programming Languages
http://www.amazon.com/Concepts-Programming-Languages-Robert-Sebesta/dp/0136073476/ref=sr_1_5?s=books&amp;ie=UTF8&amp;qid=1343095607&amp;sr=1-5&amp;keywords=Programming+languages
Programming Language Pragmatics
http://www.amazon.com/Programming-Language-Pragmatics-Second-Michael/dp/0126339511/ref=sr_1_2?s=books&amp;ie=UTF8&amp;qid=1343095647&amp;sr=1-2&amp;keywords=Programming+language+pragmatics
The best way I know how is by solving problems yourself and looking at good solutions of others.
You could consider going back to "fundamentals".
Most programming courses, IMO, don't have nearly as many exercises I think they should have. Some books are particularly good on their exercises list, for example K&R2, SICP, and TC++PL. Deitel's has long exercises lists, but I don't think they're particularly challenging.
There are some algorithms/DS books which focus on the sort of problem solving which is about finding solutions to problems in context (not always a "realistic" one). Like the "Programming Challenges" book. In a book like that, a problem won't be presented in a simple abstract form, like "write an algorithm to sort numbers". It'll be inside some context, like a word problem. And to solve that "word problem", you'll have to find out which traditional CS problems you could solve/combine to get the solution. Sometimes, you'll just have to roll something on your own. Like a new algorithm for the problem at hand. In general, this helps you work out your reduction skills, for once. It also helps you spotting applications to those classical CS problems, like graph traversal, finding shortest plath, and so forth.
Most algorithms/DS books though will present problems in a pretty abstract context. Like Cormen's.
I think, however, people don't give enough credit to the potential of doing the exercises on the books I've mentioned in the beginning.
Some books I think are worth reading which also have good exercises:
I imagine the other Stroustrupp programming book also has good exercises, but I've never read it. Brian Kernighan is not only the author of K&R2, but of many other books. You could look at his stuff.
Depending on what you mean by good code, though, you could look at other books.
There are also the math books. I'd not discard those. And also, there are other programming books as well. Some I've never read, but want to, like Programming Pearls:
Not only those, but, anyway... The point is that you can look at those books to find examples of good code, good exercises, challenges and so forth.
Here are some books I've mentioned previously:
By the way, there are websites with programming challenges for you to look at too. Like https://projecteuler.net/ and others. Just start looking this up and you'll find plenty. They all tend to start dumb easy and move up the difficulty to pretty damn difficult stuff from what I've heard.
Edit: SICP is available for free (http://mitpress.mit.edu/sicp/) together with videos from the course taught at MIT in 85 (http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/).
> I'm taking a Unix class in c/c++.
Those are two very different things. Please clarify.
> We are using the book by Sobell. I want to ask if I should read the book?
Uh.. if it's required for your class, yes you should obviously read it. If you are looking for supplemental material, I'd suggest:
You're essentially asking for a computer science class on algorithms. I would recommend:
Its not advertised but it uses Java for the examples.
http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X
I've read a few books about WW2 tech and I can't remember exactly which one talked about it - it may have been Alan Turing: The Enigma, or perhaps Simon Singh's The Code Book. I tried searching online but I can't find anything for some reason :/ I hope whichever book wrote about it didn't make it up.
If you're a math geek, just about every review on Amazon for A Million Random Digits with 100,000 Normal Deviates is absolute gold.
>Such a terrific reference work! But with so many terrific random digits, it's a shame they didn't sort them, to make it easier to find the one you're looking for.
.
>The book is a promising reference concept, but the execution is somewhat sloppy. Whatever generator they used was not fully tested. The bulk of each page seems random enough. However at the lower left and lower right of alternate pages, the number is found to increment directly.
.
>I had a hard time getting into this book. The profanity was jarring and stilted, not at all how people really talk. Frankly, the book came off as strictly workshop material. But after about 50 pages, I found myself immersed in the style. What had been stilted became lyrical and engaging. Authors go entire lifetimes without matching the poetry of couplets such as those of Mr. Rand Corporation. I can only wish I had thought of 41145 42820.
Ooooh you're a super new :)
Many people hate it but w3schools can get you started:
If you want to buy books check out:
It's super noob friendly and the book looks amazing.
Note for others: The same authors have a book on JS. Again it's mostly introduction material but it's fun to flip the pages :)
(Not affiliated to the authors).
JavaScript and jQuery by Jon Duckett
Amazing book for anyone starting JavaScript and jQuery. Great examples and clear explainations. Wish Duckett wrote more JS-related books. I'd buy them all!
If you have some money and time and want to go full time, there are places like http://theironyard.com that can get you a solid foundation and entry level jobs.
Otherwise https://www.codecademy.com is a great place to get started. /r/learnjavascript is a also great resource as they are open to all questions no matter how "dumb" they are. They go through a lot of things together as well, great place to learn. I'd also really recommend this book.
The hard part is getting the experience to know the best way to do things. I am doing some backend stuff as well (node.js and mongoose) to speed things up.
Once you get enough knowledge and get dangerous my biggest suggestion would be to get a recruiter and do a bunch of random contract work. You'll not only learn faster, but usually there will be smart people to learn from.
The senior part is more of a technical grade level and not necessarily management... granted I'm in the lead role here, it's my first time as one. All I can say is what help me spring forward at a lull at mid-level was picking up Thomas Limoncelli's books, [the sysadmin one] (https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=sr_1_1?ie=UTF8&amp;qid=1512041042&amp;sr=8-1&amp;keywords=thomas+limoncelli) and [the cloud one] (https://www.amazon.com/Practice-Cloud-System-Administration-Practices/dp/032194318X/ref=sr_1_3?ie=UTF8&amp;qid=1512041042&amp;sr=8-3&amp;keywords=thomas+limoncelli) /r/sysadmin recommends them too. These are your best practice books, these tell you why to do things, not how. It will turn you from being the guy that mops the floor in a burning building into knowing when to yell, "FIRE!"
Cert wise, unless a specific company or contract requires it, I don't bother with the time and money on certs if you already have years of experience on the books. I'd probably go for a Security+ and then go for a Red Hat and/or CCNA certification as they are both prestigious. Red Hat is a big deal just by its practical application test.
If you want to go into cloud related stuff, you might want to brush up on your programming. This is what is limiting me, I have very minimal bash scripting experience coming from military in the Windows world then making a move to Linux.
Honestly, I would focus on being both as they both overlap very often unless you are in really large stovepipe enterprise environments, but you never know if you need to make a move to something smaller where you have the many hats role. I'd get your degree in something Computer science related (CS, CIS, EE, CE, etc) and then go RHCSA/CE and maybe Sec+/Net+ or instead of Net+ just go for something Cisco related. My networking is Net+ strength at best and I resent not doing better when I was younger.
EDIT: Also, if you can do the math, BS is Computer Science all the way... sysadmins are still really kind of not doing well in the degree program department, mainly because were so... trade-like I guess. Honestly, we're the new Millwrights like my dad was. We keep the factory going and fix it when production stops. It's kind of cool actually, it's nice to be able to have some kinship to my dad in that way.
If you're looking for a book that teaches you about codes and practical codebreaking, here are two greats: Cryptanalysis: A Study of Ciphers and Their Solution, by Helen Fouché Gaines and Codes, Ciphers and Secret Writing, by Martin Gardner.
For a historical look try The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography, by Simon Singh. I really loved that one!
My buddy used this. He highly recommended it to me.
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Don't use batch. It's outdated and should only be used for compatibility with very old versions of Windows.
PowerShell is the right way to to do this. I'm assuming when you say "create 20 users in Windows Server 2012" you are referring to Active Directory (AD) users, and not local users. You'll want to use the New-ADUser cmdlet to create the AD users. For importing from a csv file, you will need to use the Import-Csv cmdlet.
I won't tell you how to write the script, you should learn that on your own. The two cmdlets I mentioned should point you in the right direction. If you know nothing about PowerShell and need to learn the basics then get the book Learn PowerShell in a Month of Lunches. The book will teach you everything you need to know to get started with PowerShell.
Props to you for working through a textbook with python! Someone recommended Concrete Mathematics to me a while back as a good resource for really sharpening my math skills. Knuth is one of the authors, and while the book does not discuss programming at all, I'm interested to see how, as a programmer himself, he explains mathematics.
A Khan video series would be awesome. I think there would be a lot of demand for it.
I think the thing I have the most trouble with is understanding math notation. For some reason all the symbols really confuse me. I can learn a new programming language syntax with relative ease, but when I try to learn math syntax, my mind just goes blank. Not sure why this is an issue.
Concrete Mathematics by Graham, Knuth and Patashnik is a great start to almost all of those topics.
Accelerated C++. Unfortunately, there isn't a C++11 update, but this really is the best way to get into C++ if you are already a programmer.
> Also, is there a cpp equivalent to lwjgl?
Dunno - what is "lwjgl"?
Introduction to Algorithms by CLRS
TAOCP is a waste of time and money; it's more for adorning your bookshelf than for actually reading. Pretty much anyone who suggests TAOCP and is less than 55 years old is just parroting Standard Wisdom™.
Godel, Escher, Bach is a nice book, but it's not as intellectually deep in today's world as it was when first published; a lot of the memes in GEB have been thoroughly absorbed into nerd culture at this point and the book should be enjoyed more as a work of art than expecting it to be particularly informative (IMO).
If you're interested in compilers, I recommend Engineering a Compiler by Cooper & Torczon. Same thing as TAOCP applies to people who suggest the Dragon Book. The Dragon Book is still good, but it focuses too much on parser generators and doesn't really cover enough of the other modern good stuff. (Yes, even the new edition.)
As far as real programming goes, K&R's The C Programming Language is still unmatched for its quality of exposition and brevity, but these days I'd strongly suggest picking up some Python or something before diving into C. And as a practical matter, I'd suggest learning some C++ from Koenig & Moo's Accelerated C++ before learning straight C.
Sipser's Introduction to the Theory of Computation is a good theory book, but I'd really suggest getting CLRS before Sipser. CLRS is way more interesting IMHO.
Refactoring is a classic, and surprisingly readable.
http://www.oreillynet.com/ruby/blog/2006/03/transformation.html
http://www-math.mit.edu/~rstan/ec/
I'll give you a brief about the book: It's really dense and probably will take you a while to get through just a couple of pages, however, the book introduces a lot of interesting and difficult concepts that you'd definitely see if you pursue the field.
https://math.dartmouth.edu/news-resources/electronic/kpbogart/ComboNoteswHints11-06-04.pdf
Is a Free book available online and is for a real beginner, basically, if you have little to no mathematical background. I will however say something, in Chapter 6, when he talks about group theory, he doesn't really explain it at all (at that point, it would be wise to branch into some good pure math text on group and ring theory).
https://www.amazon.ca/Combinatorics-Techniques-Algorithms-Peter-Cameron/dp/0521457610
This is a fantastic book when it comes to self studying, afaik, the first 12 chapters are a good base for combinatorics and counting in general.
https://www.amazon.ca/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025
I've heard fantastic reviews about the book and how the topics relate to Math 2 3/4 9. Although I've never actually used the book myself, from the Table of Contents, it appears like it's a basic introduction to counting (a lot lighter than the other books).
Regarding whether or not you can find them online, you certainly can for all of them, the question is whether legally or not. These are all fairly famous books and you shouldn't have trouble getting any one of them. I'm certain you can study Combinatorics without statistics (at least, at a basic level), however, I'm not sure if you can study it without at least a little probability knowledge. I'd recommend going through at least the first couple of chapters of Feller's introduction to Probability Theory and it's Applications. He writes really well and it's fun to read his books.
Steps to build your own engine from scratch with no knowledge:
Note: Most people who decide to put together a voxel engine take about 2 years from inception. At the end of the two years, they will have a library they could use to create a game. They've also already made it through the first 4 steps when they start.
Without a degree program to solidify the concepts, I suspect that the first 4 steps will take at least 2-3 years: about 10-20 hours per week each week.
If you want to know how interpreters/compilers work:
Bonus: http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/
Edit: have fun!
Along with the advice from /u/perpetualwalnut the book "The C++ Programming Language" by Bjarne Stroustrup (the language creator). It's limited in being C++11 (we've had 14 as a minor update and now we're approaching the major update of 17) but it's a pretty solid reference for a large portion of the language (>1,000 pages). (Edit:)It's not a book that will teach you C++ directly, but it's a good reference and is pretty extensive while providing motivation and examples of the language features.
For free sources I suggest cppreference.com as a great online reference.
For videos this should give you a good idea of some language semantics that you may or may not be aware of (again by Bjarne).
This video by Sean Parent (former senior programmer/architect, I'm not sure which, of Adobe and worked directly on Photoshop) is a neat intro to how neat using STL can be.
And finally it may also be worth checking out r/cpp for C++ related stuff, they post good articles/videos relevant to the language from time to time.
Sorry for the info dump, this is just all stuff I would have loved to have when I started. C++ is a monolithic language, but you can do some pretty neat/fast things with it.
If you don't have this for C++ you should. It really is a good introduction and a good reference.
Algorithms by Sedgwick and Wayne.
Correct! I did not do every question in EPI because there are a lot. But I did probably at least 1/3 of them evenly distributed throughout the book, following a guide in the front on which ones were most important.
Equally important in my prep was The Algorithm Design Manual which I learned of here. It really changed the way I thought about a lot of fundamental data structures and algorithms, and helped me see how many real world problems require graph algorithms to solve.
Finally, I read a LOT of firsthand interview reports from GlassDoor for the company I was targeting.
All in all I spent a couple hours a day for nearly 4 months on interview prep. Before that I'd only had one interview, at a company I didn't care much about, and I bombed it. After those 4 months, I interviewed for my dream job and got it. I don't know that I nailed it, I probably just passed by a hair. But it was enough. Was I overprepared? I dunno. But I was at least prepared enough, which is all that mattered. :-)
Learn Powershell in a Month of Lunches is pretty handy.
I see that others have answered the question well. And I suspect that you will head down this path, but just in case you aren’t considering it - I highly recommend learning PowerShell. even just basic commands. It will open up so many opportunities for you to help make your life easier as an admin in general, not just SCCM. If you plan to do other things besides SCCM later in, having a good understanding of PowerShell will be a very marketable skill for you to have.
I highly recommend PowerShell in a Month of Lunches as a great book to get you started.
https://www.amazon.com/dp/1617294160/ref=cm_sw_r_cp_api_i_YyqRDb82T8T6V
CLRS is obviously a good choice, though I found The Algorithm Design Manual even though less known, very useful.
It's divided in two parts: the former is a discussion of many algorithms and data structures, so it covers the foundations like sorting and complexity analysis, then talks about trees, graphs and related problems like minimum spanning tree, TSP, ... The second part of the book is more like an encyclopedia, indeed there are a lot of problem sets, each one with an explanation and several questions you should always pose to yourself when facing those problems as well as several possible solutions.
If you're looking for books that contain info on auto, lambdas, and any other new C++11 stuff, you're going to have to wait a little bit, as the standard is still very new.
If you're looking to get started though, I would suggest something like Effective C++ which contains a bunch of specific things you can do to write better C++ code. For learning the language, something like Programming - Principles and Practices using C++: it's an intro to programming textbook that focuses entirely on C++. I know you're not a beginner ;) but I've heard really good things about that book.
Basic:
C++ Primer
Effective C++
Effective STL
Advanced:
More Effective C++
C++ Coding Standards: 101 Rules
C++ Templates The Complete Guide
Large Scale C++ Design
If you want him to get a firm grasp on it, There's this book as well: http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
A friend of mine works for one of the guys who wrote it and my understanding is that it's teaches you more than you thought you knew about linux.
I suggest getting a copy of the UNIX and Linux System Administration Handbook.
Operating Systems Concepts (AKA The Dinosaur Book) is generally quite well regarded.
Artificial Intelligence: A Modern Approach tends to be the text of choice for teaching AI to undergraduates - it doesn't deal with many of the most modern techniques, but it establishes the common functionalities.
Link for those curious. Thanks for the tip!
Also, there's a CBT Nuggets video series on Powershell for those who dig CBT Nuggets kind of learning.
If you are looking to learn PowerShell without burning out even harder then I would suggest a book called learn powershell in a month of lunches.
Each chapter takes ~45-60 minutes and it an easy enough read and not too technically dense that you need to focus hard to understand. The concepts start at the absolute basics and add another layer on each chapter.
I am half way through the book now and I know enough now to start building some basic/fundamental scripts.
Though not really geared to compsci, The Code Book is a great history of cryptography and cryptanalysis from the dawn of time to current. Excellent read.
I highly recommend "The Code Book" to any novices interested in this sort of thing, it's readable and entertaining without being insulting or excessively complex.
Anyone interested in this topic should read the codebook. As I remember the polish were the first to crack it, but after improvements of the enigma system they didn't have the resources to crack it anymore. The British built upon the polish success and threw lots of money and talent at it such that they could crack all oncoming versions - with the exception of the German navy that used the best version of Enigma (and had better practices in place).
http://www.lulu.com/product/ebook/owasp-testing-guide/17463506?productTrackingContext=author_spotlight_1412179_
http://nostarch.com/tangledweb.htm
http://www.syngress.com/hacking-and-penetration-testing/Web-Application-Obfuscation/
http://www.syngress.com/hacking-and-penetration-testing/Seven-Deadliest-Web-Application-Attacks/
http://www.syngress.com/hacking-and-penetration-testing/SQL-Injection-Attacks-and-Defense/
http://www.webhackingexposed.com/
http://www.amazon.com/Web-Application-Hackers-Handbook-Discovering/dp/1118026470/ref=dp_ob_title_bk
Servers should always be hardened and because everyone likes long guides the National Vulnerability Database actually maintains a lot of information regarding hardening servers. So for the actual server itself can be hardened using the following guide located here. That is for Red Hat Enterprise Linux 5. It will change from distro to distro, but some things are pretty standard. I agree with PalermoJohn as well that learning more about networking will certainly help you in securing your server and network.
For applications running on your web server the link for OWASP Top 10 that Rsaesha posted will help you. If you have more time and would like to learn about Application Security, The Web Application Hacker's Handbook is a great resource to learn a lot about security in Web Applications.
Both application and network level security are required to truly secure your web server.
Cheers!
IMO, these books are the best ones for web pentesting:
The Web Application Hacker's Handbook
The Tangled Web
OWASP Testing Guide v4
First off, I'd be careful of describing yourself as a WordPress developer if your knowledge doesn't really go past using the loop as far as PHP and WordPress goes. Not because I'm one of these 'you're not a developer' types, but because it could land you in legal hot water because of misrepresentation when it comes to clients.
Anyway, what I would currently describe you being – based on what you've said – is a junior front end developer. You have a good understanding of HTML and CSS, and a you know how to get JS working – even if it is just copy and pasting.
Personally, I would recommend signing up to somewhere like Treehouse as they have a great deal of structured content around WordPress that will take you from the basics of PHP and how they relate to WordPress upto more advanced topics like dealing with WordPress' APIs.
As for the most important skill? I would say that is having a good understanding of how PHP and JS work. Once you understand functions, variables, methods – and to a lesser extent, classes – you'll have a pretty good grasp of how anything works within JS and PHP.
I would then recommend spending some time reading PHP's docs, which are very well written and give examples of how those functions work.
If you're more of the read-a-book kind of guy, I highly recommend JavaScript and jQuery by Jon Duckett (Amazon link).
Hope that helps.
Yes, she uses Java and this book.
Not really.
If you're already familiar with basic programming and just want to get into C++ then: A Tour of C++. If you want to learn to program, and use C++ while doing so, then try Programming: Principles and Practice Using C++
I play with C++ as a hobby. I'm very far from being even good at programming in this language, but I'll tell you what I've done so far.
I first read this book: Programming: Principles and Practice Using C++ (2nd Edition). This book is written by the very man who developed C++.
Now, I know it looks daunting since that book has about 1200 pages, but a lot of it can be skipped if it doesn't pertain to what you want to learn.
After reading that book and making a couple small programs, I decided that I would give SDL2 a try. SDL2 is a 2d graphics library that includes window management. I did this first since it has a lot of documentation on how to use the library, and you can usually google something if you have problems. SDL2 can also be used in conjunction with OpenGL, so it is worth at least getting familiar with the library.
After all of that (at this point, for me, it had been about 2 months of off and on practice), I finally googled how to learn OpenGL. I followed some tutorials and tried to make some programs, but I learned that OpenGL was way over my head. I was able to get a few small programs running. There was one program I made that procedurally generated terrain, but I learned that OpenGL really isn't necessary if you want to JUST make a game.
When using OpenGL there is a lot of code that you will use over and over again, resulting in you sort of developing your own makeshift scene manager. You'll also want to learn how to program shaders, I haven't even done this yet, but this doesn't only apply to OpenGL. You'll probably want to learn how to program shaders no matter what.
So, after dealing with OpenGL and its steep learning curve I decided to give some rendering libraries a try, and this has been the best course for me to take. Here's a list of rendering libraries. I use Irrlicht because it is relatively lightweight, easy to use, and setup. Irrlicht isn't really updated too often so you won't get the latest features.
If you really want to learn OpenGL then this is the tutorial I followed: Link. It even has information on how to use SDL2 with OpenGL. This will get you started at least.
As for the IDE I use, Netbeans. This is mainly for Java, but it works well for C++. There are all kinds of IDEs you can use, just search around Reddit for other people's opinions of what they like.
I hope I helped! Ask me any questions you have and I'll try to answer them, just note, I'm not even close to a professional developer. I just like to program and play with graphics!
EDIT: Oh yeah, if this makes any difference to you, I did all of this on a Linux distro.
Depends what you want to learn. Some of my favorites are
This a good list to get you started :) most of my favorite books are not language specific.
I'm a pure math guy but Algorithms by Sedgewick & Wayne is one of the best textbooks I've ever read.
Code: The Hidden Language of Computer Hardware and Software
Clean Code: A Handbook of Agile Software Craftsmanship
Code Complete: A Practical Handbook of Software Construction
Algorithms
Types and Programming Languages
Honestly, you are never going to find a way to shortcut you out of this situation. No one answer is going to be perfect and get you from A to B if your already at C. I had a similar experience with programming and web development.
I studied computer networking all my adult life and never thought I would be developing as my career at the moment. It is the burden of knowing too much and not having a clear direction. What I needed was more confidence in my skills which can only really develop over the years through experience.
You say you already know a lot of Linux and Bash concepts. CD/CI pipelines try to abstract a lot of OS related involvement since your code doesn’t need to know how low level kernel operations are happening.
What it sounds like you need is knowledge of OS concepts, not just Linux concepts. I say this because every OS has its own way of doing the same thing one way or another.
For example virtual memory, if you understand the concept of virtual memory in any OS rather than a specific OS’s semantics regarding Virtual memory then I think you would be better off in the long run.
If I am wrong and you are the master of the Linux environment, I believe you just need to deep dive into development strategies and the core principles of CD/CI. Once you have a foundation it doesn’t really mater if you are a Jenkins expert or CircleCI expert, all that matters is if you have a foundation to fall back on.
Edit: if you wanted my two cents on material here are some books I recommend.
The Practice of System and Network Administration
Operating Systems Concepts
UNIX and Linux System Administration Handbook
https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/
Check out TECS, its the definite course on that. You start with logic gates and build your way up to an ALU, then a CPU, an assambler, a compiler, an OS and a game :)
The Elemennts of Computing Systems, aka Nand2Tetris. The book's blurb (from Amazon):
>In the early days of computer science, the interactions of hardware, software, compilers, and operating system were simple enough to allow students to see an overall picture of how computers worked. With the increasing complexity of computer technology and the resulting specialization of knowledge, such clarity is often lost. Unlike other texts that cover only one aspect of the field, The Elements of Computing Systems gives students an integrated and rigorous picture of applied computer science, as its comes to play in the construction of a simple yet powerful computer system.
>
>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.
>
>Designed to support one- or two-semester courses, the book is based on an abstraction-implementation paradigm; each chapter presents a key hardware or software abstraction, a proposed implementation that makes it concrete, and an actual project. The emerging computer system can be built by following the chapters, although this is only one option, since the projects are self-contained and can be done or skipped in any order. All the computer science knowledge necessary for completing the projects is embedded in the book, the only pre-requisite being a programming experience.
>
>The book's web site provides all tools and materials necessary to build all the hardware and software systems described in the text, including two hundred test programs for the twelve projects. The projects and systems can be modified to meet various teaching needs, and all the supplied software is open-source.
The correct answer to:
Q. Should I learn C or C++ first?
Is:
A. Yes.
WARNING: Highly Opinionated Analysis of C vs C++
I see a lot of people recommending one way but no one offering an analysis of BOTH the Pro's & Con's.
I've been using C++ since ~1990. I've briefly worked on a PS3 C++ compiler when I worked for Sony. I've seen 2 major problems over the years with C++ programmers:
1. People don't exercise discipline and restraint in K.I.S.S.
They use (and abuse) every language feature because they can. There is this tendency to over-engineer even the simplest things. Take a look at this complete clusterfuck of CRC in the Boost library.
1109 lines of over-engineered C++ crap for a simple CRC32 function instead of a mere 25 lines of code!?!?! The C version would:
The trade-off would be is that it is less flexible, but WHEN was the last time you needed to use a custom CRC polynomial!?!? One would instead use a different algorithm such as MD5, SHA, etc. that:
This excellent SO on hashing is but one example of focusing on the big picture.
2. People lack a basic understanding of the cost let alone the implementation of C++ expressions.
I've seen people stick a virtual function inside an inner loop and wonder why their performance is crap. I've seen people fail to grasp a basic understanding of pointers. I've seen people not understand memory management and how to guarantee zero memory leaks. I've seen people spend more time on writing an "über" template and waste hours debugging that instead of just writing something in 1/10 of the time and move on.
IMO, due to the bloated, over-excessive verbose nature of C++ it is for these reason that I strongly recommend a beginner learn C first and then learn C++. You'll have a better understanding of why C++ is designed the way it is, what the design trade-offs are/were, what C++ hacks are, and how to best use the languages to their potential.
However, this is ignoring the benefits and disadvantages of the Pro's/Con's of why one would learn C++ or C first.
Learn C++ first
Learn C first
{
{
With that said there are numerous C++ books I would recommend to ALL C++ programmers. They are sorted from beginner to expert:
If you can get only one book, get the The C++ Programming Language.
Even though Bruce's book is ancient he keeps it simple and is a fun easy read. Remember this is before C++98 where the language is much simpler.
You can find it online for free
Lastly, just because you can, doesn't imply you should. Use balanced C++ and you'll be fine.
For the fundamentals of "thinking in C++" as opposed to other languages I always recommend Effective C++
And I guess if you're in visual studio 12 make sure you're not doing anything in C++11 as I don't know any game studio or library using that as the standard yet even though it's an option in visual studio.
sipser (I have the first edition which you can get on the cheap, it's very good.)
AIMA
Dragon
Naturally, TAOCP.
Many will also recommend SICP, though I'm not quite sure that's what you're angling at here, it's probably worth browsing online to see.
Not sure about EE-related topics, but for CE you're almost guaranteed to use these textbooks:
And of course, the most important and useful textbook of them all for almost anything coding-related.
Perhaps offtopic but... Some books you should read regardless of CompSci branch
There are several good books on designing good software:
Code Complete
Design Patterns
Refactoring
Discrete math and this textbook.
Best book to learn C++ in my opinion is Accelerated C++: Practical Programming by Example (350 pages). Right from the start, it teaches people to use STL containers and other C++ constructs, instead of teaching "C with classes" like many other books (including Thinking in C++). Unfortunately, it is outdated so you will have to learn about new features of the language. You can use A Tour of C++ for that(180 pages).
If you have the time and will to learn moder C++ from the start, then I would recommend C++ Primer. Similar in approach to Accelerated C++ but longer(970 pages).
Make sure you study algorithms! As a hiring manager the biggest differentiator I see between successful self-taught people and unsuccessful ones is that the successful people care about and learn about algorithm & data structure design.
Sure with a language like Java you'll be dealing with the nitty gritty less because it's managed, but it's still incredibly useful and applicable, and will make you a better developer to work with.
Personally, I love this book: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693
It also has really great interview prep questions when you're getting to that stage.
The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography is excellent if you’re interested in this stuff. It takes you through the history of encryption and explains everything well.
Here are some resources I've found especially helpful for my own puzzle-making and codebreaking endeavors.
General Overviews and Websites for Getting Started:
Basic Cryptanalytic Techniques:
Beginner Hand-cracking Tutorials:
Tools for Creating and Cracking Codes Quickly:
Interesting Cryptographic Puzzles/Methods for Inspiration:
Books for Learning:
Books for Puzzle Solving:
Games:
EDIT: Fixed a link and made a couple minor touch-ups.
It's the show where you never know what's up next: The RAND Corporation's 'A Million Random Digits'
Do these courses:
https://www.cybrary.it/course/comptia-network-plus/
https://www.edx.org/course/introduction-computer-science-harvardx-cs50x
https://www.codecademy.com/learn/python
https://www.learn-c.org/
http://opensecuritytraining.info/IntroX86.html
https://www.cybrary.it/course/ethical-hacking/
https://www.cybrary.it/course/advanced-penetration-testing/
https://www.coursera.org/learn/build-a-computer Don't skip over that because you know how to 'build' a computer aka put a computer together from parts; it is a course about building a computer from literal scratch aka: starting with logic gates, not a course on how to 'build a sweet gaming rig' or something.
Read these books:
https://www.nostarch.com/pentesting
http://www.amazon.com/The-Shellcoders-Handbook-Discovering-Exploiting/dp/047008023X
https://www.nostarch.com/hacking2.htm
https://www.amazon.com/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470
Do these for practice:
http://overthewire.org/wargames/bandit/ (and others on there, that is just the best beginner wargame)
http://www.hackthebox.eu
http://www.root-me.org http://www.pwnable.kr/
https://www.codewars.com/
http://www.abatchy.com/2017/02/oscp-like-vulnhub-vms
https://pentesterlab.com/exercises/web_for_pentester (Lots more on there besides that as well)
This should get you well on your way to getting started!
I've said it once and I'll say it again, Eloquent JS is not for beginners. You will get stuck almost immediately, especially with no CS background. And, I haven't read the other two, so I can't really recommend one over the other.
Depending on what you're looking to do/get out of reading a book, you might want to checkout Jon Duckett's Javascript & JQuery. It's much more "noob" friendly, and is much easier and nicer to get
Get the Unix and Linux Administration Handbook, 4th Edition, by Evi Nemeth, Garth Snyder, Trent Hein and Ben Whaley.
This book covers both Ubuntu and other Linux flavors, along with traditional Unix. It is my defacto go-to when I need to look up a topic, and goes into incredible detail about not only how to do things, but also some of the theory behind them. A good example is that it explains how to set up a DNS server, but also details how DNS actually works.
For something cheaper - just google the Rute Manual. This also details a wide array of OS concepts and how they are embodied in Linux.
And while your learning - i'd like to throw this tidbit that I absolutely love from the Rute guide:
>Any system reference will require you to read it at least three times before you get a reasonable picture of what to do. If you need to read it more than three times, then there is probably some other information that you really should be reading first. If you are reading a document only once, then you are being too impatient with yourself.
>It is important to identify the exact terms that you fail to understand in a document. Always try to backtrack to the precise word before you continue.
>Its also probably not a good idea to learn new things according to deadlines. Your UNIX knowledge should evolve by grace and fascination, rather than pressure
A must read is UNIX and Linux System Administration Handbook (4th Edition):
www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/
See also: http://www.reddit.com/r/linux/comments/cm8y4/any_book_recommendations/?sort=new
Read this book: http://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057
UNIX and Linux System Administration Handbook (4th Edition) [Paperback] Evi Nemeth (Author), Garth Snyder (Author), Trent R. Hein (Author), Ben Whaley (Author)
> I think that more people will be deterred by a focus on AI safety. It's worse for EA if people think "These people are weird nuts" than "These people are somewhat liberal."
But raw amount of support is not the objective that EA is supposed to be trying to maximize. If that support comes at the cost of making EA into a subset of left-wing political activism, and if an ever increasing proportion of EA stuff gets funneled into social justice and all the standard left-wing culture war causes, then we will be left with a movement that is EA in name only.
AI safety is not as far-out as it was 10 years ago. If someone looks at AI safety and people who support it - such as Stephen Hawking, Elon Musk, Bill Gates, Nick Bostrom and the guy who co-wrote the textbook on AI - and are turned off by it because they think it is crazy, well maybe they have been successfully filtered out as people not possessing the required level of rationality to be beneficial to the movement? I wouldn't have made this argument even 5 years ago actually, because AI risk looked so superficially dodgy even though the arguments are sound.
No no, he's Anti-AI: A Modern Approach
https://certification.comptia.org/certifications/a
http://www.examcompass.com/comptia-a-plus-practice-test-1-exam-220-901
https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X
I taught a powershell class at work a few years ago. We went chapter by chapter through "Lean powershell in a month of lunches"
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Anything by Don Jones.
Even look up "Don Jones Powershell" on YouTube will bring up a lot of his powershell stuff. He is entertaining and very informative.
Or pick up his book: http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080/ref=sr_1_1?ie=UTF8&amp;qid=1372257080&amp;sr=8-1&amp;keywords=don+jones
Start Here
Great book to start with: http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
This is probably the most recommended book: https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Books aren't really my learning style - to me, it's just solve a problem, then solve it gooder
Maybe I should read more....
http://amzn.com/1617291080
That's what I used, came highly recommended by folks in this subreddit, and I see why. Starts off slow and simple, assumes you have no prior experience in programming. By chapter 4 you're making scripts that show just how awesome PS is.
A fantastic book I used when I started was Learn Powershell in a Month of Lunches.
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/
Learn Windows PowerShell in a Month of Lunches
Start with this:
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=sr_1_3?crid=26462OWKXC9YH&keywords=learn+windows+powershell+in+a+month+of+lunches&qid=1568013284&s=gateway&sprefix=learn+windows+%2Caps%2C231&sr=8-3
Then this:
https://www.amazon.com/Learn-PowerShell-Scripting-Month-Lunches/dp/1617295094/ref=sr_1_4?crid=26462OWKXC9YH&keywords=learn+windows+powershell+in+a+month+of+lunches&qid=1568013284&s=gateway&sprefix=learn+windows+%2Caps%2C231&sr=8-4
And finally this:
https://leanpub.com/powershell-scripting-toolmaking
&#x200B;
I'd also recommend spinning up a virtual environment with at least 1 server and 2 workstations. Windows Server 2016 and Windows 10 Enterprise both have evaluation editions you can download and install for free.
I think the Powershell in a Month of Lunches series is considered pretty good.
The best PS book I've come across is Learn PowerShell in a Month of Lunches: https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=sr_1_1?ie=UTF8&qid=1535785632&sr=8-1&keywords=powershell+month+of+lunches
&#x200B;
Also, keep an eye out for the authors in blog posts as you're Googling. Don Jones and Jeff Hicks are both really active on Powershell.org as well as Pluralsight.com.
Hey when I studied for the exam this book https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X and this guy http://www.professormesser.com/ are extremely helpful, he also does free YouTube lectures, good luck!
Definitely not recommended. Make sure you look at what exam series the books you're buying are for - the current A+ is the 901/902. Mike Meyers' book is among the best and most popular, and he's great at explaining things from a more real-world, less technical view. (https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X/ref=sr_1_1?ie=UTF8&amp;qid=1492880166&amp;sr=8-1&amp;keywords=mike+meyers+a%2B)
Not to mention that a lot of VMware functions use PowerCLI.
I also vote Powershell.
Edit: Might I also suggest Powershell in a Month of Lunches?
Fuck that. You want to learn the newest shit, not some old antiquated OSs that your company just happens to use atm. Yes I'm being very blunt, you will have a better career if you do so.
Also note that Hyper-V is free if you'd like to play with that. You can get that and other Windows Evaluation OSs here.
I run a Hyper-V cluster with two Lenovo M93 systems, a VMWare 5.5 hypervisor on a TS140, and FreeNAS on a custom machine. My network is all Ubiquiti, ERL, ES Lite, 2x UAP-AC.
Powershell is a very handy tool to have, but you don't need to 'dedicate' yourself. Go through this book and you'll be a step above a majority of IT professionals easily. https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Powershell in a Month of Lunches
I think it is always safe to look at all of the material in the 70-640 curriculum. Most of it easily applies to 2012+ and you may still see a lot of 2008 systems.
https://www.microsoft.com/learning/en-us/exam-70-640.aspx
Combine the reading with the lab work and you can learn a lot.
Also /r/powershell and Powershell in a Month of Lunches. New version addresses Powershell 3 http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Rule 1: You better start learning how to teach yourself cause classes are probably not gonna happen. I got this book and taught myself the fundamentals of powershell. You'll need to do something similar. For the application, I'm sure the developer provides an entire site full of documentation for you to use to help develop your skills. It may seem intimidating now, but you'll get used to it.
Note: The powershell book is very easy to find for free if you know where to look.
>However, at least at this office, you can have days like today where things slow way down and you can derp around on Reddit until you get more calls or a user gets back to you.
System/Network Administrators (especially at smaller companies) either work well or they work often. I'm getting towards the "well" side of things more and more as I get better, which leaves more time for other activities, like reddit or going through Powershell in a Month of Lunches.
If you're looking at Powershell, the Learn Windows Powershell in a Month of Lunches is pretty well reviewed.
Just note that is the 2nd edition linked. I believe there is a third edition out.
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=sr_1_1?keywords=Learn+Windows+PowerShell+in+a+Month+of+Lunches%2C+Third+Edition&qid=1566893184&s=gateway&sr=8-1
Not Android, but, much of what konk3r said in his comment is packaged nicely and easily consumable in Refactoring by Martin Fowler. Before you begin coding Android, understand Java and what it takes to write maintainable code. Any mildly intelligent chimpanzee can write code; it takes a talented programmer to write code that others (or even the dev himself) can maintain.
Other things:
this one is pretty good.
If you want to dig deep into the theoretical of programming, and help build a good foundation for OOP, patterns, and algorithm design, check out Concrete Mathematics: A Foundation for Computer Science. It is honestly the best textbook I have ever come across.
From there, if you're feeling really ambitious in studying algorithms, check out The Art of Computer Programming, but I should warn you, it is very dense and can be hard to understand even for accomplished developers.
Beyond that, I suggest checking out The Odin Project. It covers a variety of languages and frameworks including Ruby On Rails, which is pretty standard in app development these days. They have a lot of great references and side material. It's basically a "go at your own pace" open source coding boot-camp.
> Like I said, this is for me. I hate just being told "do this" and having no concept of why. I want to understand why I'm doing it, the implications for doing it "this way".
This... This is the mindset that will carry you and eventually make you stand out as an exceptional programmer. Learning how to do something might land you a job, but knowing how it works makes you an invaluable asset to any employer.
As long as you are passionate about learning the material, you will pick it up over time.
>This is where I realized that I was doing this wrong, at least for me. I'd be on codeabbey and know what I wanted to do, but not how. I realized that I needed to be building larger things to be working with oop concepts. I really felt I was missing a lot of "base" information.
Awesome observation. Doing studying and doing drills both have an important role in the learning process, but there are other forms of practice to include in order to reinforce the material in a meaningful way. Ruby Rogues Podcast has a great group discussion about how to learn that I highly suggest you give a listen.
Personally, I learn best by throwing myself into a project where I am in wayyy over my head. By struggling through problems, scrupulously tearing through documentation and examples, I learn a lot more of the why than the how at the end of the day.
I learned Javascript, jQuery, and AJAX by building a templating & ecommerce framework. I started out with little to no knowledge or understanding of how JS worked, and was forced to restart a number of times as I began to see what was good and what was not, but now I feel very comfortable working with it.
Find a problem, and solve it, because Computer Science is, really, just the art of problem solving.
Best of luck, and most importantly, have fun :D
Engineer here. The Navier–Stokes equations are expressed using vector calculus.
I'd just point you to books. I highly recommend actually doing the exercises at the end of each chapter.
John Bird - Engineering Mathematics
This is a good book that doesn't assume that you've completed GCSE mathematics. It brings you up to scratch to a level of mathematics I'd expect a first year undergraduate to have. Yes, it starts with fractions. A large chunk of it is geometry and calculus, though it does touch on some statistics and matrices and complex algebra on the way there.
It ends with you being able to solve basic separable 1ˢᵗ order ODEs.
Kreyszig - Advanced Engineering Mathematics
Higher-order ODEs, Linear Algebra, Vector Calculus, PDEs, Complex Analysis, Fourier. Oh, and linear programming and optimization.
There's a recommended study guide and order in the introduction.
Knuth - Concrete Mathematics
Just thought I'd include this here, since you're a programmer. Touches on some continuous and some discrete mathematics essential for computer science.
I was also first a C programmer and only started learning cpp later. I have found this book to be excellent:
Accelerated Cpp book
it is intended to complete novices, which you are not. However I think it is still perfect for you because I think that it introduces Cpp the way it should be and not as a C extension. After you are comfortable with the std I would suggest you move to good practices books (effective c++ etc) and/or design patterns books
You can check out: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/
It's going to be unlikely, you would have to plan the curriculum yourself and get quality books/resources to teach you the material.
Books like http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X
Offer a well planned introduction course into C++
The first thing you have to realize is that computers are the most complex system ever produced by humans. Not only the multiple levels of hardware, but also the large complex software systems required to even just start it up in windows.
The core design idea is that every layer of hardware and software on a computer is a form of translation, changing one formal language into another.
At the very bottom are the laws of physics, which allows us to arrange semi-conductors and other materials to build a small device (a transistor) that encodes negated AND logic on wires that carry electric impulses. Making large circuits of exclusively NAND gates allows you to create any complex computer logic you want. In theory you can use whatever you want that encodes such logic, you can make a computer that works with billiard balls. Transistors are just the current most economic way of building one.
The layer above just the bare circuits is the design of your circuits. You cannot just wire them arbitrarily, there are physical and economic limits. The RAM modules stuck in your motherboard are a design tradeoff. DRAM allows engineers to use less transistors for every encoded bit, but access is slower. The multiple levels of 'caches' on your CPU are also RAM, but encoding every bit with 8 or more transistors for absolute speed. Early on it was thus seen as economically interesting to design different modules separately and have them communicate in some way.
> So, I want to know all about the CPU, RAM
A certain design became popular in the 1950's: the Von Neumann architecture. This is a simple design for a computer with roughly three modules: control, arithmetic and memory. A computer program is basically a language, with its own formal words and verbs. All those words and verbs are somewhere in the memory module of the computer. A specific memory location will always hold the next instruction or verb that the computer has to process. The control module thus continuously retrieves the next instruction, that instruction will ... well instruct the control module what it needs to do. Typically an instruction will make the control module put some words in memory and kick the arithmetic module into action that will transform those words into something else.
Over the years with miniaturization, more and more discrete modules were added to the control chip to make it go faster. We call this now typically the CPU, but it's really a lot of multiple integrated modules that are really good at doing one thing.
> how the computer (software?) communicates with those components.
How do the multiple components communicate with each other? By sending electric signal over wires. How does it know to send what signals? Software controls what signals are sent over what wires. When a company makes a computer component, it will include drivers, which are basically pieces of software that control how it communicates with the CPU and the rest of your computer. This is true for the GPU, your hard-drive, audio chip and every component on your motherboard. A lot of modules communicate through a known protocol, such as the BIOS on your motherboard that starts up your computer. Others are company secrets or just too complex to make standard.
> and GPU, how they work; can use the GPU? Are the streaming units kind of like CPU cores?
The GPU is still essentially a computer, but had a completely different architecture or design to start out with. First up, everything a GPU does can be done by a CPU. For many years, it did. The only reason companies like 3dfx started selling discrete GPU modules is speed. By taking advantage of the specific way graphics are computed, GPU companies were able to design chips that could complete graphics computations a lot faster than the CPU. At first GPUs were basically tasks that were done in software baked into circuits. You push it data and poke some information that triggers certain graphics operations, but you had no arbitrary programs made from instructions like you have on the CPU. NVIDIA introduced programmable shaders on the Geforce 3 in 2001, which were basically little programs that could only use certain limited instructions. The restrictions on those programs grew less and less, and companies started adding more and more of those little processors that could execute those programs. These days there is only a limited amount of fixed-hardware functionality left on GPUs. They have basically become like a massively parallel CPU, only the design tradeoffs are completely different.
CPU vs GPU. In its more basic form, CPUs are made for fast reaction and fast sequential running. GPUs are slow lumbering beasts, but can do many task at once, as long as those tasks don't need to cooperate too much. Using an analogy, when you need to move a thousand boxes, a CPU is a nimble sprinter that will run really fast back and forth for each box, the GPU is a big fat professional mover that will load everything on a lorry and move only once.
Obviously, I'm lying here. Everything is grossly simplified because reality is so much more complex. The basics can be really simple: A CPU talks to a CPU using wires. Similarly, your GPU or CPU talks to your screen using electric wires. That is probably not the insight you were looking for though. But it is on very basic principles that a computer is built up, through layers of abstraction in both hardware and software. Some layers are simply unknown to use, we don't really know how NVIDIA makes your CPU talk to your GPU. You sometimes don't want to know, as long as there is a common language or interface that shields you from the gritty details.
If you want to know essentially how computers work, look through the recommendations in this thread. I would just want to add to that list Elements of Computing Systems for hardware and Structure and Interpretation of Computer Programs for software.
That's kind of besides the point of this post, but is nonetheless awesome, and you posting that does let me use it as a springboard to say these two things:
>Jonathan Blow, the creator of Braid is making a compiler
For the interested, the link to watch that is here.
>I know nothing about making compilers, but it was awesome to watch
Compilers *are* cool, and if you want to make a simple one for fun, try it as the last part of this project. As for needing to know anything before you do it, I went through that book at the same time I was taking my first college CS course, and I managed alright. By the end of it you have a complete platform, from a machine you make from scratch (NAND) up to a compiler for an object-oriented language that runs on the machine you designed yourself.
If you're trying to get into the emulator development scene, my recommendation would be to start writing an emulator for a simple system (such as the Game Boy or NES). I, too, wanted to read computer architecture books before I started my own emulator, and it turned out to be a huge waste of time. I already knew 80%+ of the material in the early chapters, but I insisted on slogging through anyway. But when I'm doing boring stuff like that, I make terrible progress on anything.
Maybe you and I learn differently, but to learn efficiently I need some kind of direction to keep me motivated and moving along. Sifting though pages and pages of dense textbook material without an end goal or a particular concept I'm trying to understand, and instead hoping that I'll just absorb general information, doesn't work out. Much of what you read won't stick with you, and you'll space out a lot (or at least I did).
Once I started actually working on my Game Boy emulator, my productivity shot through the roof. I was making so much more progress in learning and programming when I had actual, tangible goals to achieve. So, if you have the programming ability, start doing that sooner rather than later and you'll learn what you need to know as you move along. Start by emulating the memory, then the cpu, then the rest of the stuff. If you're actually interested, I can provide you with some links to help you get started.
----------------------------------------------
Also if you've already taken an intro to digital design course, then you won't learn anything from https://www.amazon.com/dp/0262640686/ref=cm_sw_su_dp.
I would personally recommend this book. (There’s also an associated coursework available at EdX I believe? You can also check out the book’s site at www.nand2tetris.org)
I have an internship lined up, but I'm really excited to be learning outside of that too. You should check out The Elements of Computing Systems by Nisan and Schocken. I'm going to be working through this book throughout spring semester and the summer. I think it will provide a foundation for every low-level part of CS and help fill in some gaps that I'm missing.
If you're excited about web dev, you could make a website with Ruby on Rails, Django, Flask, Node, Meteor, etc. There's always another good web framework that you could learn.
If you're into system programming, programming languages, or compilers, there are tons of great tutorials and guides online. I'm currently working through Learn C: Build Your Own Lisp. I'm really looking forward to doing Implementing a Language with LLVM. If you didn't already know, LLVM was started here!
If you haven't finished core math yet, there's Linear Algebra on Khanacademy. I think Salman Khan is one of the best teachers I've had. The videos are very concise and very clear. There's also a great series on ML on YouTube. It explains the theoretical underpinnings of the algorithms, but doesn't really show how to use them. If you want to use them, your best bet is the Python library scikit-learn.
For reverse engineering, here's a fantastic challenge site, and here's a good book that you can view online.
There's so much to do, and not enough time to do it! If you constantly work on a few things, little by little, it will all start to accumulate. Good luck and have fun this summer!
That edition is just out of print. Here's a link to a much cheaper copy.
http://www.amazon.com/The-Elements-Computing-Systems-Principles/dp/0262640686/ref=tmm_pap_title_0
You could go through the projects in:
The Elements of Computing Systems
http://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/ref=sr_1_1?ie=UTF8&amp;qid=1449165576&amp;sr=8-1&amp;keywords=elements+of+computing+systems
I think I learned more about Computer Science from these projects than many of the books I've read.
The projects are made for self study and include:
Designing the hardware for a basic computer
Building an assembler for your hardware
Building a compiler for an object oriented language
Building a virtual machine to run programs
If you haven't read these books already, what are you doing, go and read them now.
Effective C++
More Effective C++
Effective STL
Effective Modern C++
So this is what I would consider the "Core" reading list for anyone interested in programming games. None of this is really game specific though. These are just the fundamentals you need in order to be an effective Software Engineer.
Learn about...
C++ syntax: Programming: Principles and Practice Using C++ by Bjarne Stroustrup
Software Engineering: Code Complete by Steve McConnell
C++ gems: Effective C++ by Scott Meyer
Software Teams: The Mythical Man-Month by Frederick P. Brooks Jr.
Why we love Joel: Joel on Software by Joel Spolsky
Problem Solving: The Pragmatic Programmer by Andrew Hunt
Common Code Solutions: Head First Design Patterns by Eric Freeman
Pearls!: Programming Pearls by Jon Bentley
I'll do a supplemental on this in a few days that dives into specific topics related to engine development. All of this is generic enough that it will help you regardless of what you do. You'll notice that very little here is actually language specific. Almost all of this is about the art of making software and process of working with a team. These 8 books alone will make you think about making software in a whole new way.
I’m taking Data Structures and Algorithms right now. It’s definitely not an easy class so it’s very ok to struggle. I’m not sure which language are you guys using, but if you’re using Java, then this is an amazing book that starts from the basics! https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/ref=mp_s_a_1_4?ie=UTF8&amp;qid=1536420166&amp;sr=8-4&amp;pi=AC_SX236_SY340_QL65&amp;keywords=algorithms&amp;dpPl=1&amp;dpID=41%2BpJNrGujL&amp;ref=plSrch
On the other hand, you have to build things by your hand in order to understand them. Don’t worry about how quick you get the concepts, it’s ok to meditate on them. After all, what took scientists years to build is not supposed to be understood in an hour. Take your time and good luck!
https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X
I'm going through this book. It's the best.
Sure! There is a lot of math involved in the WHY component of Computer Science, for the basics, its Discrete Mathematics, so any introduction to that will help as well.
http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/ref=sr_sp-atf_title_1_1?s=books&amp;ie=UTF8&amp;qid=1368125024&amp;sr=1-1&amp;keywords=discrete+mathematics
This next book is a great theoretical overview of CS as well.
http://mitpress.mit.edu/sicp/full-text/book/book.html
That's a great book on computer programming, complexity, data types etc... If you want to get into more detail, check out: http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/0534950973
I would also look at Coursera.org's Algorithm lectures by Robert Sedgewick, thats essential learning for any computer science student.
His textbook: http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/ref=sr_sp-atf_title_1_1?s=books&amp;ie=UTF8&amp;qid=1368124871&amp;sr=1-1&amp;keywords=Algorithms
another Algorithms textbook bible: http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ref=sr_sp-atf_title_1_2?s=books&amp;ie=UTF8&amp;qid=1368124871&amp;sr=1-2&amp;keywords=Algorithms
I'm just like you as well, I'm pivoting, I graduated law school specializing in technology law and patents in 2012, but I love comp sci too much, so i went back into school for Comp Sci + jumped into the tech field and got a job at a tech company.
These books are theoretical, and they help you understand why you should use x versus y, those kind of things are essential, especially on larger applications (like Google's PageRank algorithm). Once you know the theoretical info, applying it is just a matter of picking the right tool, like Ruby on Rails, or .NET, Java etc...
As far as recommended reading goes I would have a look at the practice of system and network administration (https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=sr_1_1?ie=UTF8&amp;qid=1539629401&amp;sr=8-1&amp;keywords=practice+of+network+and+system) and The phoenix project. As far as technical courses, I'm assuming your role will be mostly strategic and managerial (unlike some of us in smaller companies where the IT Manager is also expected to be a technical lead) I would focus on the managerial side and surround yourself with technical experts.
'Best practice' is such a vague term that you're going to run into issues defining it in a meaningful way for your client's environment.
I'd look at generic guides (u/jhend28 mentions a good one) but also read up on specifics that apply to your environment. For example: best practice for a level 4 data center hosting financial data for banks etc. will not apply at all you a SME with two servers on premise that don't sell direct and hold no Top Secret data.
Have a read of The Practice of System and Network Administration: Volume 1 for a good starting place.
Bjarne Stroustrup - Programming: Principles and Practice Using C++
If you already know about pointers, etc
cppreference
I'll start off with some titles that might not be so apparent:
Unexpected Fundamentals
These 2 books provide much needed information about making reusable patterns and objects. These are life saving things! They are not language dependent. You need to know how to do these patterns, and it shouldn't be too hard to figure out how to implement them in your chosen language.
&nbsp;
Good General book
&nbsp;
This book is great if you're going to make a browser based game
&nbsp;
General Knowledge books
&nbsp;
Provide a working moveable 3D model with C++ and DirectX, Very cool.
&nbsp;
More general game base building
&nbsp;
Working product results books, little if any modification needed
Releasing in a couple months (hopefully) 2 Very good books using C++ to develop by.
&nbsp;
Not presented in the best manner but still noteworthy:
&nbsp;
I used to love XNA...but now it's not feasible for commercial development. If you're a beginner to game design...starting out with XNA might actually be useful. It's easy to pickup and put out a working product. XNA is C#
&nbsp;
&nbsp;
Working product books, modification needed to make run on current systems
Provides a working FPS game in C++ on DirectX 9. Good for some starting out knowledge for an FPS
&nbsp;
Good for 3D Terrain rendering in DX9...however much of this is outdated...some concepts still apply, and it's not the worst idea to see a working example.
&nbsp;
TLDR: Click links starting at top, buy, read, profit
For compilers:
Types and Programming Languages by Pierce is also a must read for theory people.
Start with the Dragon Book.
When it actually comes time to implement the language, I would recommend just writing the frontend and reusing the backend from another compiler. LLVM is a good option (it's becoming popular to use as a backend, it now has frontends for C, C++, Objective C, Java, D, Pure, Hydra, Scheme, Rust, etc). See here for a case study on how to write a compiler using LLVM as the backend.
Have you worked through the loop detection in the Dragon Book? There are some slides on it here:
http://www.cs.cmu.edu/afs/cs/academic/class/15745-s03/public/lectures/L7_handouts.pdf
The object you're interested in is the call graph of the program. As you've observed, this is a DAG iff there is no recursion in the program. If function A calls B and B calls A, this is called mutual recursion and still counts as recursion :)
A related graph is the control flow graph (CFG) of a function. Again, the CFG is a DAG iff the function doesn't contain loops.
An execution trace of a program can certainly be represented as a DAG. In fact, since an execution trace does not have any branching, it is just a straight line! However you are very rarely interested in a single trace through a program -- you usually want to reason about all the traces. This is more difficult because if you have any looping structure in the global CFG, there is no (obvious) upper bound on the size of a trace, and so you can't capture them all with a finite structure that you can map into SMT.
Every program can be put into SSA form. The trick is that when you have joins in the control flow graph (such as at the head of a loop), you need a phi node to fix up the SSA indices. If you don't have it already, the dragon book is pretty much required reading if you're interested in any kind of program analysis.
In general, if you have a loop free control flow graph of any kind (a regular CFG or a call graph), then you can translate that graph directly into SAT or SMT in a fairly obvious way. If you have loops in the graph then you can't do this (because of the halting problem). To reason about programs containing loops, you're going to need some more advanced techniques than just symbolic execution. The big names in verification algorithms are:
A good overview of the field is this survey paper. To give an even briefer idea of the flavour of each of these techniques:
Bounded model checking involves unwinding all the loops in the program a fixed number of times [; k ;]. This gives you a DAG representing all of the traces of length up to [; k ;]. You bitblast this DAG (i.e. convert it to SAT/SMT) and hand off the resulting problem to a SMT solver. If the problem is SAT, you've found a concrete bug in the program. If it's UNSAT, all you know is that there is no bug within the first [; k ;] steps of the program.
Abstract interpretation is about picking an abstract domain to execute your program on, then running the program until you reach a fixed point. This fixed point tells you some invariants of you program (i.e. things which are always true in all runs of the program). The hope is that one of these invariants will be strong enough to prove the property you're interested in.
Predicate abstraction is just a particular type of abstract interpretation where your abstract domain is a bunch of predicates over the variables of the program. The idea is that you get to keep refining your abstraction until it's good enough to prove your property using counterexample guided abstraction refinement.
Interpolation can be viewed as a fancy way of doing predicate refinement. It uses some cool logic tricks to do your refinement lazily. The downside is that we don't have good methods for interpolating bitvector arithmetic, which is pretty crucial for analyzing real programs (otherwise you don't take into account integer overflow, which is a problem).
A final wildcard technique that I'm just going to throw out there is loop acceleration. The idea here is that you can sometimes figure out a closed form for a loop and replace the loop with that. This means that you can sometimes remove a loop altogether from the CFG without losing any information or any program traces. You can't always compute these closed forms, but when you can you're in real good shape.
Drop me a message if you want to know anything else. I'm doing a PhD in this exact area & would be happy to answer any questions you have.
If you're very far already (using the language for over a year, for instance) you could try to fix the gaps by watching Going Native talks and reading A Tour of C++. If you're just starting out, I suggest either getting C++ Primer or The C++ Programming Language and working through that.
I'd like to humbly suggest the UNIX and Linux System Administration Handbook for your new admin. It's starting to show its age a bit (published 2010), but still communicates many of the core responsibilities of administrators in a clear manner with historical context.
Also, take a look at the Linux System Administration and Linux Web Operations LiveLessons, which are more current and may be helpful if the new guy learns from video tutorials.
Disclaimer: I am the author.
Read this, found it amazingly useful and packed full of knowledge, I recommend this book even to Linux noobs that are trying to get a better feel of the system for desktop use... once they have the basics down that is.
http://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057
ATLien325's comment explains that terminology in a pinch, but it's not really going to get you very far on your way to learning how to hack. Your best bet would be to pick up books like this, this, and this. Then you'll have an idea of how programs, file systems, and networking work behind the scenes and you are much better situated to begin to learn how to hack them.
You're also going to need to learn how to effectively use a search engine.
That's a lot to ask...
http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
There is a good explaination about the history of Unix and Linux at the beginning of this book. http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
You could also watch revolution OS. Or just use youtube.
I found the first version of the sys admin book by Evi Nemeth et al helpful years ago. I know a couple people who have found newer versions helpful too. Here is a link to the latest.. http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
I found this book in a thread and I've gone through the first four chapters so far. I only got it a little while ago but I really do like how it reads, and the amount it covers is nice. Check out the table of contents on amazon and you'll see what I mean about the coverage.
Other than that we're looking at the same kind of stuff. Let me know if you get any good leads :P
All the programming best practices you know apply to refactoring as well.
Use source control (Git, Mercurial, SVN, whatever) and commit often, on your own refactoring branch if possible. This way you can "save progress" and revert any changes, should your code get worse in some way.
Also, test a lot. Both during and after the refactoring. Having automated tests really helps. Make a small change, run the tests, make sure everything works, rinse and repeat.
Martin Fowler and other people have books on refactoring. I'd also recommend watching one of his talks.
Lastly, remember that refactoring is not a one-time thing. It's a frequent, ongoing process.
Make small revertible changes in one unit/module at a time, if possible. You don't want to fall too deep in the rabbit hole, and forget what you actually wanted to change.
Some books that could help you practice algorithms and coding challenges are:
If you want some actual practice solving challenges with some guidance and/or help, I'd recommend Coderbyte which provides solutions to the problems along with the ability to view other user solutions so you can learn how others solve the same challenges. This article might help you find some other coding challenge websites as well.
That book has reviewed excellent reviews http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/. This is the standard text, CLR or CLRS http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/
What you're describing is probably what most people think of as machine learning, data science/mining, and has as much to do with computational efficiencies as it does algorithms' intrinsic behavior.
Also, What programming languages do you know?
Maybe if you look at a cheat sheet http://dlib.net/ml.html and some ML texts (Murphy, Bishop, Barber), those would help (also AIMA by Norvig/Russell)
http://www.amazon.com/review/R32N9EIEOMIPQU/ref=cm_cr_pr_perm?ie=UTF8&amp;ASIN=0262018020&amp;linkCode=&amp;nodeID=&amp;tag=
Some good readings from the University of Cambridge Mathematical reading list and p11 from the Studying Mathematics at Oxford Booklet both aimed at undergraduate admissions.
I'd add:
Prime obsession by Derbyshire. (Excellent)
The unfinished game by Devlin.
Letters to a young mathematician by Stewart.
The code book by Singh
Imagining numbers by Mazur (so, so)
and a little off topic:
The annotated turing by Petzold (not so light reading, but excellent)
Complexity by Waldrop
If you're at all interested in encryption, The Code Book is a great place to start.
The Code Book, which is a nonfiction book about the history and mathematics of secret codes and how to break them, ranging from the earliest and simplest codes, up through the Engima machine and the first computers, through modern RSA, PGP, and (the hypothetically unbreakable) Quantum Cryptography.
Hi Pandas_sniff! (love the name) I’m a firm advocate of the Web Application Hacker’s Handbook. I think if you look at the reviews for version 2 i’m probably one of the featured ones. It really is all encompassing for most of what application security testing should start out as. It does suffer from being a textual reference though (a snapshot in time), so I also commonly recommend learning from the OWASP Testing Guide v4 as it has frequent wiki-like updates. I could spend all day talking about resources for learners! There are some excellent (free) videos by Jeremy Druin on using Burp Suite and application testing, I absolutely love Pentesterlab.com and all of their exercises, and Sam has written a very good guide on getting started in bounty work
As for how effective these resources are “out of the gate” i think they are tremendously helpful. For example, using the above resources i’m sure any apt student of them could identify IDOR’s or basic injections. Over time these skills become second nature and free up the tester to focus on newer, cutting-edge hacks/technology. Hope that answers the question =)
The actual link OWASP Top 10 2013. This list is in the process of being updated so the information isn't exactly accurate anymore.
For more in depth reading I'd suggest The Web Application Hacker's Handbook. Also check out /r/netsec for a good discussion platform.
I was personally recommended by my mentor Hacking: The Art of Exploitation, and The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws
Also some companions sent me some readings on index articles. I'm not so sure of the titles, but just browse around.
http://slav0nic.org.ua/static/books/
http://hackbbs.org/article/book/
I found Lynda.com to be extremely dry and slow. To me it was the equivalent of those old school mandated educational movies you would watch in classrooms back in the 90s on your faux-wood tv. Take this opinion with a grain of salt though as it has been almost two years since I have looked at anything on Lynda, I hear it may be better today.
If you are looking for web development in particular I would suggest the following:
In addition, StackOverflow; A general programming Q&A website, has an answer to just about any programming issue you may be running into. If the answer is not already there, then chances are you will have one within 24hours.
I began my pursuit into web development about 2 years ago. In that time I have gone through the resources listed above as well as the following books which have helped immensely:
Some personal career history if you're interested:
In the last two years I have gone from making 18k a year as a Technical Support Representative to 80k a year as a Front-End Engineer building JavaScript applications at a large FDIC Bank. It was only in the last two years that I really dug into Web Development (and programming for that matter) and I really can't see myself ever doing anything else for a living. The job requires an immense amount of learning (which I love) and will keep your mind sharp. I really do get a kick out of problem solving all day. Programming will require a major adjustment to the way you think. I can say that the way I work through problems now is completely different to the way I did before. I feel as if critical thinking has eluded me until the last two years and it has been a major life changing event. By far the biggest contributing factor to my growth has been the team I work with. You have to do your best to find a team that is willing to work with you as a junior so you can siphon that knowledge. Even if that means taking a low paying job, however; know your worth so that you can ask for the right amount of money once you have gained the necessary skills. As a personal rule of thumb, I will not stay at a company where I am the most knowledgable member of the team. This inhibits growth as a developer and will prevent me from realizing my true potential.
Feel free to hit me up if you have any questions.
If I could do it all over again, I would:
** I am not Jon Duckett but I do love his books.
I recommend this book. I learned HTML/CSS from the HTML/CSS book by those authors. And then after that I went back to a more "textbook" type book to learn further in depth. And then I did the same with Javascript. I felt like those books were a real nice jumping in point because they're so simple and filled with visual examples.
I'm currently taking it right now (going through web development 101 because I am a complete noob to it), and OP isn't kidding when they say it doesn't hold your hand. I finished up the HTML/CSS basics and just started working through the beginning JS sections (learning basic syntax, if/else statements, switch function). Each lesson can take anywhere from an hour to 3, depending on how quickly you are able to grasp the concepts or how big the hands-on project is.
Don't be afraid to get outside resources either! I picked up this Javascript and jQuery book that has a lot of great reviews, and it gives another perspective/way to learn the language. I might actually trade this back in for the authors book on HTML/CSS because I'm still struggling with those languages. Let me know if you have any questions on it!
Cracking the Coding Interview: More to help you get a job as a Software Engineering, but full of fun problems even if you do them just for the challenge and learning.
The Code Book: A great overview of the history of Cryptography.
Hey look, I found a budget plan that's more accurate than the GOP's
A Million Random Digits with 100,000 Normal Deviates by Mr. Rand Corporation. Very strange author, Mr. Corporation. I've read it multiple times and still can't make head or tail of it, particularly p. 15. Some people swear by it though. These people are the same kind of people who think House of Leaves was good too.
The Amazon reviews of this book are great.
> "The book is a promising reference concept, but the execution is somewhat sloppy. Whatever generator they used was not fully tested. The bulk of each page seems random enough. However at the lower left and lower right of alternate pages, the number is found to increment directly. "
The reviews on Amazon are amazing: http://www.amazon.com/Million-Random-Digits-Normal-Deviates/product-reviews/0833030477/ref=cm_cr_dp_see_all_btm?ie=UTF8&amp;showViewpoints=1&amp;sortBy=bySubmissionDateDescending
This list of resources is a good place to start. For security in general you can read security+ book by darril gibson or for deeper knowledge cissp book by eric conrad. For netsec you can look at this and the hacker playbook series. For pentesting oscp certification is the golden standard so if you search online on how to prep for it there are a lot of guides that will give you general idea. Take a look here and here. You can practice here or here.
For websec wahh is the main resource. With practice here, here, here and here.
Definitely more beginner, but I loved Jon Duckett's books when I was starting out. If you're looking for intro level, front-end stuff, they're very visual and easy to grasp.
HTML & CSS: Design and Build Websites
JavaScript and JQuery: Interactive Front-End Web Development
Same thing happened to me at my last job. I was actually led to believe in the interview that it was a job relevant to my experience but I quickly learned on day 1 that it wasn't. Read as much as you possibly can in your free time for a while, you would be amazed at how quickly you can pick things up. Three books I recommend as a crash course are:
Data Structures & Algorithms is usually the second course after Programming 101. Here is a progression (with the books I'd use) I would recommend to get started:
Edit: If you're feeling adventurous then after those you should look at
College text books generally will go more in depth into them. They usually also provide proof of correctness as well as Big O and theta analysis.
Algorithms 4th ed is my favorite, the code is in Java but its text and illustrations are fantastic.
I really like /u/razeal113 's comment. That's a good algorithm for finding a good algorithm. Starting out with brute force isn't necessarily bad, as it at least gives you a jumping board to start optimizing. The only thing I would add is to increase your knowledge and toolbelt. You can gain a lot of inspiration and learn "how to think" by learning, analyzing, applying, and modifying all the awesome algorithms already out there. Here are some resources:
MOOCs.
Online challenges. There is a pretty good list at 14 Coding Challenges to Help Train Your Brain. From that list, I most liked:
Books.
Design Patterns. This is personal opinion, and I'm sure many would disagree, but for me, design patterns were the yin to algorithms' yang.
---
I think programming comes down to understanding data structures and how to manipulate them (algorithms). Linus Torvalds had it right when he said:
> Bad programmers worry about the code. Good programmers worry about data structures and their relationships.
One quick way would be to look up the algorithms courses offered by Stanford, MIT, etc and see what book the syllabus recommends. Some are offered as an MOOC as well (edX, Coursera, Khan, etc).
Also, you can check out these classic texts:
Also, https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=pd_sbs_14_t_0?_encoding=UTF8&amp;psc=1&amp;refRID=0T9DJZC3VHQTS8MFT7WT
Thanks for linking this, I hadn't seen it yet. As a Windows admin looking to get into Linux, this seems interesting.
Also, for your automation, I'd recommend Automate the Boring Stuff with Python, if you haven't read it already. It can also be found for free here: Automate the Boring Stuff.
I'll add another plug for The Practice of System and Network Information, even if you have a good feel for the philosophical part of the job.
Probably the best book out there for system administration.
https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=dp_ob_title_bk
Read Limoncelli's book: The Practice of System and Network Administration: Volume 1. That would give you a good place to start and learn best practices.
&#x200B;
https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=sr_1_4?s=books&ie=UTF8&qid=1537969093&sr=1-4&keywords=The+Practice+of+System+and+Network+Administration&dpID=5139XV0QYsL&preST=_SX218_BO1,204,203,200_QL40_&dpSrc=srch
&#x200B;
Is this the one you mean? I am looking for some good books to read as I start to enter the work force.
https://www.amazon.ca/Practice-System-Network-Administration-3rd/dp/0321919165
A few thoughts. Hopefully at least one of them will be helpful.
I could go on, but most of the above is already in the two books I listed and I'd just be riffing on a theme. I'll leave you with this:
I would pick up both a data structures book and a C++ book; for instance, Data Structures and Algorithms in C++ and Programming: Principles and Practice Using C++.
Of course, you can use any data structures book you like; some are better than others, but they all teach the same stuff. But when you're learning the abstract stuff at the same time as basic programming, it can be nice to see examples in your language. Principles and Practice is one that I wholly recommend, though, as an excellent introduction to modern C++.
Also, be aware that there is way more bad C++ material out there than there is good C++ material. If in doubt, check out the semi-official book list or ask around here.
This is a very dense book, but is undoubtedly the best for learning C++ and I would argue programming in general. Just be aware, as with learning the 'vanilla' version of any programming language, you may feel dissatisfied with still not being able to do too much, and while the book does introduce GUI programming with C++ with the Fast Light Toolkit, I would suggest learning SFML or even how to use C++ within the Unreal Engine to truly motivate you.
Remember that there is no utility in learning a programming language in of itself, only in being able to actually do something with it.
I've heard good things about
Bjarne Stroustrup
Programming: Principles and Practice Using C++ (2nd Edition)
https://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784
Haven't read it, but I do have Stroustrup's more advanced "The C++ Programming Language" book and can tell you he's a great author.
+1. Videos will never do justice. Youll learn more by reading. Ive watched videos since middle school (8 years) and learned a lot of either a) outdated material or b) bad programming habits. Ive corrected all those reading books.
Save yourself the trouble and read this book if youre a beginning to learn c++ especially for the first time then read this: https://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784/ref=pd_lpo_sbs_14_t_0?_encoding=UTF8&psc=1&refRID=XFDD6E58W0CWE1K404XZ
tldr if you want to learn cpp, get a book. This one is good. Don't attempt to dive into programming with Cpp in unreal, learn cpp first then go into unreal. or just go with unity. Books are your friend.
A lot of these are known as "Code Smells". Learn to identify them and try to fix them.
Other good books that may help you:
Use something like StyleCop or Linting which are supposed to check and compare your code against best practices.
I've posted this before but I'll repost it here:
Now in terms of the question that you ask in the title - this is what I recommend:
Job Interview Prep
Junior Software Engineer Reading List
Read This First
Fundementals
Understanding Professional Software Environments
Mentality
History
Mid Level Software Engineer Reading List
Read This First
Fundementals
Software Design
Software Engineering Skill Sets
Databases
User Experience
Mentality
History
Specialist Skills
In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.
They are older books, but really changed my way of programming. Refactoring by Fowler and Test Driven Development by Beck.
https://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672
https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530
Feeling overwhelmed and confused can always be solved by breaking things into small enough problems and making enough tests to make sure that your assumptions match reality.
Frameworks can be confusing the way they hide details away from you. Remember though, that with open source, there is nothing to stop you from digging into the framework methods you are calling and see how they work. If you get stuck, sometimes looking at the source will tell you more than looking at the docs. Try multiple frameworks in multiple languages. Once you think you have an idea of the different parts required, try using a template library and an ORM library and write the rest of the code you need to make a basic custom framework.
If you want to see a more direct approach to web services, take a look at Go, where frameworks are almost discouraged. http://thenewstack.io/make-a-restful-json-api-go/
I have included some links for more information about myself in the original post.
To have a better idea of the type of person I am these are the books within my arms reach right now:
Design Patterns: Elements of Reusable Object-Oriented Software
[Refactoring: Improving the Design of Existing Code](
http://www.amazon.ca/gp/product/0201485672)
The Mythical Man-Month
Along with some other ~50 similar books I've read.
Concrete mathematics by Donald Knuth, Ronald Graham, and Oren Patashnik
You can program without math, but you'll run into limits. Even math at a high school level will totally change the way you look at and think about some parts of programming.
This is something that I can attest to personally because I began programming with a 3rd grade math level myself. I can't really say what part math had in my perspective on programming, because I was also in the process of growing out of third grade, but when math finally "clicks" somewhere between high school and college, you learn to tackle these things differently.
You can program without math, but if you know the math you'll have a better understanding of what you're doing. You'll look at some problem you're trying to solve and say "hey, that looks awfully similar to a set of equations, instead of trying to solve them inside my program I should solve them by hand and plug in the solution".
Algebra is the really important one. Calculus also doesn't hurt. Trig is a must only if you see yourself doing anything related to graphics or games in the future. I also highly reccomend Concrete Math, but to understand that text you'll have to have a solid grasp of calculus.
Add Concrete Mathematics if you're a maths retard like me.
You might use calculus-based tools for some analysis, like if you look at Knuth's Discrete Math text, you'll see discrete integrals, which are certainly grounded in calculus.
As well, if you look at randomized algorithms, you might need to use some nontrivial probability stuff (like Chernoff Bounds - wiki). That isn't directly calculus, but there is a significant portion of useful probability that requires the use of integrals.
All that said, Linear Algebra is probably more useful for programmers (especially if they're doing graphics or games).
Accelerated C++ by Koenig & Moo is a very good book that'll get you up to speed in no time.
I think the first confusion here is that the language is a entity in the construction of a program. Does the type of a house that is built depend on what type of hammer the carpenter used to put up the walls? Or what kind of wrench a plumber used to put together the piping? Sure, the carpenter or plumber could've used a crowbar to do their job, but was it the right tool for the right job?
The right tool to build an Android app is Java. If you need better performance, and you don't need Google APIs, you can include C or C++ to further improve performance at the cost of added complexity.
There are a lot of different abstractions to add the ability to use other languages on the platform, but this comes at the cost of performance, and added potential points of failure (more abstractions = more potential bugs not caused by the coder.)
Heavy number crunching (especially on a RISC architecture) may push the device to its limits. Do yourself a favor and learn how to use the right tool for the right job. This book is both entertaining and informative, and this book will get you started in on C++ in a short amount of time.
C++ is the inspiration for Java, and the creation of Java is what caused C# into being. As such, the syntax for all of these languages are tightly woven between each other. I wouldn't doubt that within 15 minutes of light reading on Java you'll be up and running in its entirety.
C++, while being a slightly more complicated beast, isn't inherently an overly complicated one. The Object-Oriented concepts are all there to be leveraged.
While you say you're not a professional programmer; I think you'll find that broadening the languages you do learn will improve your ability to convey your thoughts and concisely implement them.
Best of luck!
I'd reccomend Accelerated C++
http://www.amazon.com/Accelerated-Practical-Programming-Example-Depth/dp/020170353X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1240536555&amp;sr=8-1
A+ Resources Computing...
Mike Meyers: All In One
Exam Cram
A+ Complete Study Guide
...Popular Books Terminated
Videos Compressing...
Professor Messer's A+ Videos Free
Anthony Harries A+ Series Free
Mike Meyer's A+ Video Series Paid
...Decompressing
A+ Practice Exams Initialized.....
Professer Messer's Pop Quizes Free
Crucial Exams Free
ExamCompass Free
[Exam Cram Practice Questions Paid](https://www.amazon.com/CompTIA-220-901-220-902-Practice-Questions/dp/0789756307/ref=sr_1_2?ie=UTF8&amp;qid=1484881100&amp;sr=8- 2&keywords=a%2B+901+and+902&refinements=p_72%3A2661618011)
....End Transmission
Simmy-Turner activated(sims)....
GTS Labs Paid
Mike Meyers Lab Book Paid
Testout A+ Paid
Prof. Hammonds Free
....End Transmission
Community Driven Content(all free)......
Zac Wilsons A+ Study App
Gemini88mill Advice
Deathrus's Study Habits
DrawMonster's Study Methods
...The Community thanks you!
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
There is an all in one A+ book on amazon (https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X)
This book is a good read through for general concepts - read it quickly, don't go super hardcore study mode on this book, its quite long. This along with professor messer (free, google it)after quickly reading through was all I used to get my A+.
If you have some knowledge of computers and perhaps built your own you could be ready for a helpdesk role already. I know all I had was "customer service" and some basic technical knowledge before I got my first job. Just be sure to word your customer service skills as if you were on the phone doing customer service - since this may be a large portion of the job. Asides from that - google common helpdesk interview questions, their answers, and then google the specific terms like dhcp and dns to understand how they work.
The A+ is an entry level cert, it's only "a joke" because it's entry level, the same way a HighSchool diploma is. If you can find an employer who can pay for it, great! (I did). IMO it gives you a good experience in how these certs work. Everyone recommends Professor Messer. I would recommend visiting /r/CompTIA to see what questions people have and what they struggled with. The book I read did not prepare me for a question regarding how to repair the Masterboot record (bootrec /FixMbr). But reading a book can be good too, Mike Myer goes but further in depth then is needed imo, but learning more is never an issue. Printers will be asked, I didn't think so but I messed up on them (I was asked about impact printers and had to guess).
I think you're looking at an old practice test as I took the 802 and don't remember anything about floppies. There were questions about Windows XP and a general question about IOS 6. The questions they ask are usually pretty general. They don't ask you about interrupts, maybe the basics of what a driver does, but I don't believe it would go further into it. Maybe a question relating to using a new driver to fix a problem. My book went indepth on how a processor communicates with RAM and vice versa. As well as HDD sectors vs tracks (was too indepth, and those Q's never asked).
A+ is very general, Network + is specific to networking, but again pretty general and entry level. If it helps you get your foot in the door, it's not "useless". A+ and Network+ would create a good base to start moving up from. The big thing is that they need to be renewed (tests retaken) every 3 years. So maybe try to aim for having a higher level cert in 3 years time so you don't need to renew your A+.
So for studying, Mike Myers Book
and Professor Messer would be good material. I just read the book and it was incredibly vague compared to what was on the test (general knowledge mostly). But it comes with a practice CD too.
also, everything /u/VA_Network_Nerd said.
For a book, I highly recommend CompTIA A+ Certification All-in-One Exam Guide, Ninth Edition (Exams 220-901 & 220-902) 9th Edition
For best overall source of study material, I highly highly recommend
Professor Messer's CompTIA 220-901 and Professor Messer's CompTIA 220-902 A+ Certification Training Course playlists on Youtube. You could use this as your sole resource if you wanted to.
This is a fantastic book to get started:
https://smile.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080/
Some tips.
r/homelab is a great place if you want to look and ask quiestions
r/SysAdminBlogs is a great place to find other information from other sysadmins
r/PowerShell is great for powershell stuff
If you want to get started on powershell the book "Powershell in a month of lunches" is a great read if you have time!
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
I would take a look at Don Jones, PowerShell in a month of Lunches
https://www.youtube.com/playlist?list=PL6D474E721138865A
http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Not sure if the book is the latest, so have google first.
If you see yourself repeating a task 2 /3 times or more, then look into scripting it, start small and simple and go from there. Once you start seeing the time put into scripting paying off, it'll get easier.
Learn PowerShell in a month of lunches https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Não sei se seria complicado demais, mas tem o livro The Elements of Computing Systems: Building a Modern Computer from First Principles (por R$ 99 na amazon).
Ele mostra como construir um "computador", incluindo SO, bootloader, etc, que roda num processador que você também constrói virtualmente. E justamente p/ construir esse processador você parte das portas lógicas mais básicas e vai incrementando.
Não é tão "logic for dummies" mas me parece bem recompensador. (Está na minha wishlist ainda)
May be you should read The Elements of Computing Systems: Building a Modern Computer from First Principles. With this book you will learn how to build a computer from scratch. Watch the conference of prof Shimon Schocken at Google here.
My second choice is, of course, Structure and Interpretation of Computer Programs. Videos here
It's going to be hard, make no mistake about it. Most places won't want to interview you just based on the fact that you haven't worked for 10 years after graduating. There's going to be some level of disappointment and you'll need to be ready for it.
If your knowledge of C++ comes from school, it's likely at a basic level. Improving on C++ is generally harder than just learning .Net, Java or python.
But if you do feel comfortable with C++, I would suggest getting a more advanced level book rather than relying on online tutorials. My favorite one is Effective C++ from Scott Meyers. Try finding a used version to save money.
You will also need to meet recruiters and be confident but open with them. This is a trial and error with a low hit rate but I would suggest doing it anyway.
You could also sign up for a coursera or udemy course on web development and start creating a project. Make sure you get a github account to showcase your web development skills to any potential employer.
It depends exactly what you're looking for, but I'd strongly recommend The Algorithm Design Manual by Skiena ( http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1261657117&amp;sr=1-1-spell ).
It focuses much more on intuitive explanations rather than spending time on proofs, is very readable and has a solid reference section covering over a hundred different algorithms with further references. See Steve Yegge's writeup of the book at http://steve.yegge.googlepages.com/ten-great-books (number 6).
Cormen et al. is good as well, but a bit dry compared to the above book, and with a much heavier focus on the proof side of things.
Everyone keeps mentioning programming language resources, but I have yet to see any one mention any algorithm sources. Honestly learn how to develop algorithms, they are language agnostic. And you can practice them on paper. Good luck on your endeavor.
I haven't read this yet, but have heard good things.
https://www.amazon.com/gp/aw/d/1848000693/ref=mp_s_a_1_1?ie=UTF8&amp;qid=1496313668&amp;sr=8-1&amp;pi=AC_SX236_SY340_FMwebp_QL65&amp;keywords=The+Algorithm+Design+Manual&amp;dpPl=1&amp;dpID=41s5pnqOlyL&amp;ref=plSrch
Powershell:
Learn Windows PowerShell in a Month of Lunches 3rd Edition
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160
https://www.youtube.com/playlist?list=PL6D474E721138865A
Python:
Learn Python 3 the Hard Way
https://learnpythonthehardway.org/python3
http://www.informit.com/promotions/book-registration-learn-python-3-the-hard-way-141409 (Videos)
Automate the Boring Stuff with Python
https://automatetheboringstuff.com
The Python Tutorial
http://docs.python.org/py3k/tutorial/index.html
A Gentle Introduction to Programming Using Python
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-189-a-gentle-introduction-to-programming-using-python-january-iap-2011
More at http://Learn.SharjeelSayed.com
I recommend Grokking Algorithms and The Algorithm Design Manual.
Learn Windows PowerShell in a month of lunches is a great start!
https://www.amazon.com/dp/1617294160
That walks you through some of the basics.
Once you feel comfortable using Get-Help and Get-Member, you should be able to slowly work through any problem that you want to solve, by reading documentation on each cmdlet via get-help and analyzing objects with get-member.
I just looked through all my books. It's actually hard to find a book with large segments of good code. This is probably the worst book when it comes to good c++:
http://www.amazon.com/Numerical-Recipes-The-Scientific-Computing/dp/0521750334/ref=pd_sim_sbs_b_15
The best is probably scott meyer's effective c++. It gives small sections of good code and all 55 tips are gold (or silver)
http://www.amazon.com/dp/0321334876/ref=rdr_ext_tmb
When I started getting interested in compilers, the first thing I did was skim issues and PRs in the GitHub repositories of compilers, and read every thread about compiler construction that I came across on reddit and Hacker News. In my opinion, reading the discussions of experienced people is a nice way to get a feel of the subject.
As for 'normal' resources, I've personally found these helpful:
In addition, just reading through the source code of open-source compilers such as Go's or Rust's helped immensely. You don't have to worry about understanding everything - just read, understand what you can, and try to recognize patterns.
For example, here's Rust's parser. And here's Go's parser. These are for different languages, written in different languages. But they are both hand-written recursive descent parsers - basically, this means that you start at the 'top' (a source file) and go 'down', making decisions as to what to parse next as you scan through the tokens that make up the source text.
I've started reading the 'Dragon Book', but so far, I can't say it has been immensely helpful. Your mileage may vary.
You may also find the talk 'Growing a language' interesting, even though it's not exactly about compiler construction.
EDIT: grammar
Per testare le acque velocemente puoi usare https://rubymonk.com/ (introduce Ruby in modo basico). Anche Coursera, Khan, Udacity e simili hanno corsi introduttivi sulla programmazione.
Mentre se vuoi imparare a programmare, il percorso deve toccare almeno tutte queste tappe, in ordine:
Organization-Design-Fourth-Edition/dp/0123744938)
Da qui puoi partire e specializzarti in quello che ti interessa
Look at using the Eigen library for linear algebra in C++. Its used extensively in CV and AI settings, so there is a lot of info floating about it and lots of examples. It does take some getting used to coming from MATLAB though.
Here are some C++ books that have proven useful to me:
The Bible,
Very Useful,
My favorite data structures book,
[Maybe of interest] (https://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ref=sr_1_25?ie=UTF8&amp;qid=1484332390&amp;sr=8-25&amp;keywords=data+structures+in+C%2B%2B)
Also, keep in mind that the C++17 standard should be released this year, and there will be a new deluge of books.
Probably want to learn something about numerical analysis:
Numerical analysis
For vehicle dynamics and propulsion, are you thinking more FEA and CFD? If so, learning about GPU programming is probably more interesting since there is so much parallelization...
I recently picked this up but havent really worked through it yet...
but keep your expectations low, it is definitely non-trivial to try to spin your own packages, and it might be more worth your while to look at integrating with something like OpenFOAM for CFD, or to look into some of these packages for FEA. There are a lot of people who have spent a long time making these sorts of tools.
I would highly recommend you check out the UNIX and Linux System Administration Handbook.
It not only goes over a baseline of technical sysadmin (especially linux) concepts, but really shows you how to be a good admin. There is more to it than technical know-how. I'd recommend picking this one up.
First get yourself a copy of the Unix and Linux System Administration Handbook by Evi Nemeth (who is still missing at sea).
This book has saved my ass countless times. It has a bunch of great knowledge and gives you a chance to catch up on things you might have forgotten. I highly recommend you purchase this and keep beside your desk/cube, at least until you become familiar with the job duties.
http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
First off, what are you doing now?
Here is some advice from a 20-year sysadmin who does devops and hobbyist development stuff:
Buy this book. You won't get better advice from anyone anywhere. It's expensive, but BUY THE FREAKIN BOOK: https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057
Install some VM system like VitualBox and start playing with either Debian OR Ubuntu, AND CentOS. Install both numerous times and give yourself some extra partitions to format and play with. Read about some feature or thing and then go mess with it.
Eventually go after RHCSA/RHCE.
Learn the bash shell. Learn how to write real scripts with while/until loops and if/thens, arrays, and other stuff. That'll take time, but put some focus on it.
Don't get overwhelmed. Just start learning one thing, then the next, and go from there. The rabbit hole goes deep.
I'm surprised no one has mentioned the System Administrator's Handbook. I've got editions 1, 2 and 3 on my bookshelf.
Fundamentals is what you need to know to get through some first round interviews. Explain the boot process in detail from pressing the power button to getting a login prompt -- how does init work, how do run levels work, how does systemd differ? What is getty? pam?
DNS is so much more than just what that rap covers, so if you put it on your resume you better damn well know it. Tell me about the concept of glue records, what is a root hints file, know how to use dig at the very least, how do you switch the order in which the resolver library checks it sources? What is the truncated bit in a DNS packet for?
Know debugging and tracing beyond the usual "top" or "sar" to get real detailed data on what a process is doing. Strace, ltrace, tcpdump, gdb (how to take a stack trace and dump a core), sysdig, perf events, dtrace4linux, vmstat, slabtop, pmap, etc
DHCP is another one like DNS that people like to say they know, but you should know about DHCP relay/ip helper, pxeboot, the actual protocol order of events. Check it out in wireshark.
How do processes and threads differ, really? Lots to talk about here even down to shared memory space, system calls, etc
What is swap, really? What are page faults? How does kswapd behavior change when you don't run with swap?
Know Netstat/ss. Know that tcp is a state machine. What does a bunch of SYN_SENT in netstat imply? Difference between tcp's RST and FIN?
Stateful vs stateless is more than just a tcp/udp difference, it's a fundamental concept to so many aspects of technology.
Basically know what's in this book: http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
That is an incredibly broad question. Without knowing what you've already studied, it's hard to recommend things. Most of the aerospace and mechanical engineers I know use pre-packaged programs rather than writing their own scripts, etc.
Artificial intelligence might be the best one, though. Russel and Norvig is the standard textbook: https://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597
The plus side to learning about AI is that it is not really programming intensive - it's logic and statistics intensive.
If you want to go the programming route, it gets a little hairier. The reason is that advanced systems designs will take a lot of initial classes just to get you to a level where you are comfortable programming and can then think about design and program flow.
Take an intro course. I learned programming with C / C++ and Matlab. Recommend those since it's easier to blow your foot off when programming. Once you understand how to design programs, what functions are, how program control can be passed off, move over into Python (much easier to pick up and run with and much better supported).
You might also benefit from a databases or Big Data class due to the amount of data generated from an aircraft.
Regular expressions and scripting is another option. But that's good for anyone.
Russell Norvig
Does someone have a copy of the leaked self driving car code and post it on github?
Heck, even a reasonable implementation of Thrun's Simultaneous localization and mapping algorithm and embedded A star all wrapped in the AI code would be nice.
https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping
He talks about it in Chapter 25 section 3 of: https://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1487948083&amp;sr=1-1&amp;keywords=ai+a+modern+approach
He describes it in: https://www.udacity.com/course/artificial-intelligence-for-robotics--cs373
But he only describes how you would implement it, he doesn't hand out the finished code.
Gimme.
If you're interested in this stuff (and just getting started), then I highly recommend this book - http://www.amazon.com/Artificial-Intelligence-Modern-Approach-Edition/dp/0136042597
When you're ready to go deeper, then this one is even better http://www.amazon.com/Machine-Learning-Tom-M-Mitchell/dp/0070428077/ref=sr_1_2?s=books&amp;ie=UTF8&amp;qid=1341852604&amp;sr=1-2&amp;keywords=machine+learning
That second book is a little older, but all of its algorithms/techniques are still relevant today.
I would repeat jbu311's point that your interests are way too broad. If you're interested in going into depth in anything, you'll have to pick a topic. Even the ones you mentioned here are fairly broad (and I'm not sure what you meant about concurrency and parallelization "underscoring" AI?).
If you want to learn about the field of natural language processing, which is a subfield of AI, I would suggest Jurafsky and Martin's new book. If you're interested more broadly in AI and can't pick a topic, you might want to check out Russell & Norvig (although you might also want to wait a few months for the third edition).
It is hard to answer this question without knowing your background. If you are really interested, I suggest you read this book (especially part three) on Artificial Intelligence so you can understand how automated theorem proving relates to AI. In my opinion, automated theorem proving is not a particularly interesting problem in modern artificial intelligence, since representing real-world problems using symbolic logic is almost always impractical.
However, the problem is still interesting for computer assisted theorem proving, and boolean satisfiability is a very important problem in the theory of computation.
Stuart Russell, the man who literally wrote the book on AI, is concerned.
Plenty of prestigious people on the cutting edge of the research in the field are concerned.
Just because you've only heard the household-name-level famous people talk about it, it doesn't mean that the genuine, in-the-thick-of-it experts aren't concerned either.
As for the 10~20 years figure, you're right that it is unlikely that AI will be made in that timeframe. However, the claim was merely that it is possible to create with enough resources in that timeframe, which I think is reasonable. Since you care about what the experts think, here is a summary of the best information we have about when they think this will happen.
>Median estimates for when there will be a 10% chance of human-level AI are all in the 2020s (from seven surveys).
>Median estimates for when there will be a 50% chance of human-level AI range between 2035 and 2050 (from seven surveys)
___
AI: A Modern Approach is the best textbook on AI by far
This is a very good book. Debian-isms you can learn as you go, but system administration concepts are useful throughout many distributions.
https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057
Other than that you have to set goals for yourself. Have you tried starting up 2 virtual machines and had them communicate with each other?
I find reading books is the best way to expand ones horizon on a certain topic. UNIX and Linux System Administration Handbook should be an excellent read for you.
I second this one
http://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/
It could be a good idea to check which books some well regarded universities are using.
I found this to be helpful when I started out. The details are a bit outdated at this point, but it's still got many relevant points.
Step 1: Buy and read this
If you are looking for a dead tree, this book here has been recommended by a number of people I know.
http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057/ref=pd_sim_b_2?ie=UTF8&amp;refRID=05JZDWW6GA57W5F0SG8D
Common Lisp remains a touchstone. I highly recommend installing Clozure Common Lisp and Quicklisp and then working through Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp and Artificial Intelligence: A Modern Approach with them. Although I'm now firmly in the statically-typed functional programming world, this has been part of my journey, and it will change how you think about programming.
Here's the course webpage for an intro AI course from a good professor on the topic
Good overall book on the topic (Russel & Norvig - AI: A Modern Approach)
I think they use this:
https://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597
Decent book (the bible for AI apparently).
If you have a rudimentary understanding of algorithms, I would suggest Artificial Intelligence: A Modern Approach, by Stuart Russel and Peter Norvig. The book is comprehensive, well-written, and covers a wide area of different techniques and approaches within AI. Be aware that the book is written as a textbook, so do not expect philosophy or speculation inside - only what is possible and feasible given current state-of-the-art.
That was a phenomenal article. Extremely long (just like every piece of writing associated with Hofstadter), but excellent nonetheless. I'm admittedly sympathetic to Hofstadter's ideas, not the least of which because of my combined math/cognitive science background.
There was a quote by Stuart Russell, who helped write the book on modern AI, that really stood out to me, and I think expresses a lot of my own issue with the current state of AI:
“A lot of the stuff going on is not very ambitious... In machine learning, one of the big steps that happened in the mid-’80s was to say, ‘Look, here’s some real data—can I get my program to predict accurately on parts of the data that I haven’t yet provided to it?’ What you see now in machine learning is that people see that as the only task.”
This is one of the reasons I've started becoming very interested in ontology engineering. The hyperspecialization of today's AI algorithms is what makes them so powerful, but it's also the biggest hindrance to making larger, more generalizable AI systems. What the field is going to need to get past its current "expert systems" phase is a more robust language through which to represent and share the information encoded in our countless disparate AI systems. \end rant
piggybacking on what /u/T4IR-PR said, the best book to attack the science aspect of AI is Artifical Intelligence: A Modern Approach. It was the standard AI textbook when I took the class and it's honestly written very well - people with a basic undergraduate understanding of cs/math can jump right in and start playing with the ideas it presents, and it gives you a really nice outline of some of the big ideas in AI historically. It's one of the few CS textbooks that I recommend people buy the physical copy of.
Note that a lot of the field of AI has been moving more towards ML, so if you're really interested I would look into books regarding that. I don't know what intro texts you would want to use, but I personally have copies of the following texts that I would recommend
and to go w/ that
for some more maths background, if you're a stats/info theory junky.
After all that, if you're more interested in a philosophy/theoretical take on AI then I think Superintelligence is good (I've heard?)
I can recommend this (free) course:
https://www.udacity.com/course/intro-to-artificial-intelligence--cs271
You certainly dont need a degree (it helps of course) but most you need is dedication and perserverance.
In regards to math you need a good (more than)-basic understanding of statistics, linear algebra, algorithms and you also need to develop good data analysis skills.
If you want to get serious with AI this book is fantastic (atleast it helped(still does) me alot): https://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597/ref=sr_1_2?ie=UTF8&amp;qid=1506722436&amp;sr=8-2&amp;keywords=artificial+intelligence+a+modern
and by the way check out this thread maybe:
https://www.reddit.com/r/artificial/comments/6cnlr6/monthly_how_to_get_started_with_ai_thread/
I learned mostly through reading textbooks in University, but not many of the books we were assigned stood out as being particularly great. Here's a few that I did enjoy:
To balance things out, I'll also give a list of books I thought were awful:
http://aima.cs.berkeley.edu/
http://www.amazon.com/gp/product/0136042597/ref=olp_product_details?ie=UTF8&amp;me=&amp;seller=
First time see that site, but I would recommend reading:
This is a list of books I am intending to read as soon as I read through some other books.. A list I created from reading this and some other subreddits daily, so probably this should cover all your need on Clean Coding.
If anyone know any more books well worth reading I would be really glad to hear about them!
He hits on a lot of the same points in his book: http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/
Worth a read, certainly had an impact on how I approach refactoring and design in general.
HTML & CSS by John Duckett was very helpful when I was first starting out with front end dev. He recently released a followup on Javascript & Jquery that is also quite good.
He also wrote a book called [JavaScript and Jquery]
(http://www.amazon.co.uk/gp/aw/d/1118531647?cache=3e10930602aec822ac1b09f06d245fb8&amp;pi=SY200_QL40&amp;qid=1413723858&amp;sr=8-1#ref=mp_s_a_1_1) , which is an awesome book. Beautifully designed and easy to follow.
Not OP but I used:
https://www.professormesser.com/free-a-plus-training/220-901/comptia-220-900-course/
https://www.youtube.com/user/professormesser
https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X/ref=sr_1_1
The Mike Meyers book for the 901/902 has a decent set of test questions. Can be found here
It all depends on what kind of personal experience you've had. Most people would find the A+ to be easiest. It requires 2 exams (220-901 and 220-902) on a wide variety of topics such as hardware, networking, mobile devices, and security, but it doesn't go too deep into any particular topic.
You can use the Professor Messer videos on Youtube, Mike Myers' book, and the practice tests at examcompass.com and crucialexams.com to prepare.
About a month.
This is the book I studied with this book, I did the first 15 chapters took the first test, studied the second half and took the second test to get my cert.
glad to hear it.
btw, here:
clicky A+
clicky Net+
clicky Sec+ <--careful, this test is being updated soon, the next version should be coming out in late 2017, with exam guides dropping early 2018. This specific book will be outdated, though still a fantastic resource. Might want to hold off if you're serious about taking the Sec+ exam until the next version, this one comes out.
grab a hardcover copy and start learning!
You can get your certification in about 30 days depending on what knowledge your already have now if you really buckle down and take this serious.
More info here
Do a chapter a day and you'll finish the Mike meyers book in 30 days or less if you read more.
[Time Management for System Administrators] (https://www.amazon.co.uk/Management-System-Administrators-Thomas-Limoncelli/dp/0596007833)
powershell in a month of lunches
Start here: http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
The best way I found to learn something is to find a project that relies on it.
For example, I never knew any powershell a few years ago, but I was given a project to write some QA scripts for work. That turned into a 8000+ line modularised script that anyone can use and create plugins for.
I am currently working on building servers and applications using PowerShell (installing and configuring AD, SQL, MSCS, RDP, ...)
If you haven't already, buy the book "Learn PowerShell In A Month Of Lunches" (https://www.amazon.co.uk/dp/1617291080) It's the top rated book by everyone.
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
It comes highly recommended.
this book
As a beginner (still am), I have found the easiest way to learn is to just dive in using Powershell for any tasks that you do during your normal day (especially the repetitive ones).
With that said, I have found it highly beneficial to use a couple resources:
To be honest, the most important tip in my opinion to learn how to use PS is the get-help command. This will teach you how to use just about every command out there minimizing most questions that you are looking to ask. A second tip: Learn what it means to "Pass by value" and "Pass by Property Name." This will help you immensely when combining commands using the pipeline.
Quick warning: Powershell will quickly get addictive. Also, it is a community where people enjoy sharing and giving back.
Last note, I swear. Learn shortcuts. It will save you a HUGE amount of time (i.e.like hitting esc on your keyboard to clear the line.)
I used this book: http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
You can find a pdf of it somewhere on google as well. This book is possibly one of the most valuable things for a sysadmin for windows to have. Seriously.
http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
/r/powershell is a nice place to begin and there are a number of links on the sidebar that can help get you started. When I was getting started I used the book Windows PowerShell Unleashed which I really liked. I have heard good things about Learn Windows PowerShell In A Month Of Lunches but I haven't had the chance to look in to it myself.
For free online resources I like ss64 and I also referenced computerperformance.co.uk when getting started.
https://www.youtube.com/playlist?list=PL6D474E721138865A
https://www.youtube.com/playlist?list=PLY27VNfjvp0XyJIItcAIyF4LWNrnMgLUk
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/
I think they just released an updated version of the book for v5...
Yup here it is
First, read our Wiki. It is very thorough and answers a lot of these common questions such as
day to day? The Practice of System and Network Administration
And the topical reference books listed below.
Books to help in shaping a sysadmin? The above &:
The Phoenix Project
Time Management for System Administrators
Topical Books I see mentioned often and have been very helpful to me:
Powershell in a month of lunches
Learn Python the hard way
Unix and Linux System Administration Handbook
Windows Server 2016: Inside Out
Group Policy
AbsoluteBSD
FreeBSD mastery:ZFS
CCNA
RHCSA/RHCE
Pro Puppet
SSH Mastery
On my docket:
FreeBSD Mastery: Advanced ZFS
Michael W. Lucas and Thomas Limoncelli are very good sysadmin writers, you can't go wrong with a topic they have chosen to write about.
Most of the *nix stuff assumes a baseline knowledge of how to use a unix-based system. I learned as I went but did pick up an old copy of Unix Visual Quickstart Guide not too long ago at a used books sale, which seems like a good starting place for someone overwhelmed with sitting at a terminal and being productive.
I notice I don't have any Virtualization books, perhaps someone else can fill in good books. Most of my knowledge regarding virtualization and network storage has been a mix of official docs, video training, and poking at it. Seems innate but it isn't.
I was like you no programming experience at all. I learned from these videos, I suggest you download them as MS is decommissioning this site soon.
and everyone will recommend reading Learn Windows PowerShell in a Month of Lunches although I'm not a big reader and have not gone through most of this book. The two video modules will give you a good start. This reddit has also helped ALOT.
You may have to look up some of the terms in my reply and I apologize but, hey, you'll learn something.
I recommend Python, for the simple reason that Python manages to integrate several paradigms in one programming language (imperative, object-oriented, and functional) and a lot of what you learn with Python will carry over into other languages if you learn it deeply enough. E.g. Python has metaclasses which I believe were originally implemented in an older language called Smalltalk and so when I went over to experiment with Smalltalk (I like the Pharo implementation), it was no sweat understanding the idea of metaclasses.
Python also prepares you to read the kind of pseudocode you'll see on Wikipedia and in a lot of textbooks because Python reads a lot like pseudocode; it is an eminently readable language and actually enforces formatting conventions for clarity.
And should you decide to do a big advanced project, there are very frequently well-developed libraries available immediately available for your purposes, which is not an advantage you will get with some of the more obscure / less-used languages mentioned here.
For example, need to do machine learning? No problem! There's PyBrain.
Need to study complex graphs? No problem! There's NetworkX. (If you live in the United States, it's your taxpayer dollars at work, so enjoy.)
Need to do genetic algorithms? No problem! There's PyEvolve.
There's even a package for proving theorems in logic, FLiP.
Ruby comes recommended for similar reasons and has a purer object-oriented basis but (in my experience) fewer good libraries.
I have to disagree with several recommendations here: Lisp has been recommended in several posts and I have doubts about how much of a better or effective programmer it makes you; the evidence for such a claim is unclear and pretty much all anecdotal. And a lot of it is based on stereotypes about marginally competent enterprise Java programmer-types. Now that a number of programming languages have taken Lisp innovations like garbage collection and lexical closure to heart, there's not that much of an advantage anymore in Lisp. (IMO.) More to the point, I find that neither any implementation of Common Lisp nor Scheme enjoy quite the same support as Python.
For instance, even though Lisp has a reputation for being used widely in artificial intelligence, the AI libraries I can find for Common Lisp are relatively underdeveloped compared to those you can find for Python. For instance, in the case of soft computing methods in AI (which IMO are far more promising than logic-based approaches), between PyBrain and PyML you've got neural networks, SVM, reinforcement learning and more whereas I could only find fledgling projects like cl-machine-learning for Lisp, which apparently hasn't been worked on since 2009. (The Lisp community is notorious for not finishing projects once started.)
If you must use Scheme, I highly recommend Racket because it appears to be the most full-featured Scheme. (That's a major issue with Scheme: the standard specifies very very little and so the differing implementations tend to be kind of incompatible. One says that Scheme suffers from horrible "balkanization".)
Logo was mentioned, too. The NetLogo implementation is good for fast agent-based programming and a few other things (I found it highly useful for writing a Kohonen network implementation because of its inherently spatial character) but Logo as a language is not that great.
Prolog IMO is fucking terrible. Using it is like pulling your own teeth.
Pure functional programming languages like Haskell are kind of wanky as well. It's usually rather difficult to do anything useful with them because they disallow side effects completely but on the other hand, since you're interested in logic and computation, you'll get a lot of exposure to theoretical computer science ideas through these kinds of languages.
Bottom line is with Python you'll probably get more work done faster and have more fun that way too. And that's what counts.
One last note: I don't like SICP. Go on Amazon and look at some of the negative reviews to see what I mean. I can't exactly say what's a good intro to computer science because I'm well past that point now but this guy appears to come warmly recommended:
http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1887902996
And when you're a little more advanced, and want to dive into data structure and algorithms, the Segdewick "Algorithms" book is excellent, even if it uses Java for all the code:
http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X
The Princeton / Coursera algorithms course. It is great. You can find lectures (since the first course finished recently, and the second course is halfway done) here (you need to change the number at the very end. I think it starts at 10).
There is a book that's relatively cheap: http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X
And there's a booksite: http://algs4.cs.princeton.edu/home/
This course is done entirely in Java.
Algorithms by Robert Sedgewick
Good book with the code written in Java
Algorithms, 4th Edition and the companion Coursera Course are great if you are already familiar with a mainstream language.
I own Algorithms (4th Edition) . It's very well explained and uses Java as a base although it's easily readable if you are proficient with any other languages.
I agree with the Amazon review. Unless you need for a class, or learn an advanced topic not available in other places, I wouldn't touch this book ever. There are much easier algorithms books to read such as https://www.amazon.com/gp/product/032157351X/ This book isn't introductory at all as mentioned on Quora by multiple people https://www.quora.com/What-are-the-best-books-on-algorithms-and-data-structures
And if you've bought this for algorithms interviews preparation, it's better to buy cracking the code interview or similar which has explicit instructions for interview questions.
One more thing to add to the review was the algorithms are written in pseudocode, array indices start with 1 instead of 0, some lines refer to other pages in the book so you can never read a code inside this book sanely.
For anyone looking, the physical copy has also dropped on Amazon recently down to $50.
http://amzn.com/032157351X
Sounds like you're asking for a link to https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=asap_bc?ie=UTF8
Even earlier versions would be a very good read despite the DevOps hype, but the 3rd (new) version includes best DevOps practices even without having any devs.
must read the [third edition](
https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1520930004&amp;sr=1-1&amp;keywords=the+practice+of+system+and+network+administration&amp;dpID=5139XV0QYsL&amp;preST=_SX218_BO1,204,203,200_QL40_&amp;dpSrc=srch) instead of the second
Learn to program. Edx/Harvardx CS50x gets pretty good reviews.
Learn to and make a habit of writing extensive technical documentation on everything you do.
Read this book. https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=sr_1_1?ie=UTF8&amp;qid=1480705767&amp;sr=8-1&amp;keywords=The+Practice+of+System
Apply everything you learn to the current systems you work with
https://www.amazon.co.uk/gp/product/0321919165/
If you wait a few weeks, you can pick up the new edition of this book:
https://www.amazon.com/gp/product/0321919165/
If you think "there is nothing to do", you are probably in "don't know what you don't know" territory, which is fine. They key is to first start discovering what you don't know, then you can start taking steps to resolve it by learning.
As you learn, you will realized that there is far more that you don't know than you though, and the side effect will be that you feel dumber and dumber, but you will actually be improving at your job.
Stroustrup's book is considered (one of) the best for beginners. Lots of exercises in every chapter.
Link: https://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784
Programming: Principles and Practice using C++ 2nd Edition is made by the creator of C++ himself. This book is meant for first year computer science students to learn to program via C++. There are sections within the book that cover GUI and other UI conventions, however it focuses mostly on programming principles. It is a great book to introduce yourself to Programming and C++.
10/10 would recommend Programming Principles and Practices by Stroustrup
https://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784
I would recommend Stroustrup's book for C++. Then, like the other's suggested, hit up Hackerrank or something and then maybe try some projects of your own.
If this is your first programming language its a tad unfortunate that it has to be C++ but by no means does it mean it is bad or anything. In fact its the language most aspiring computer scientists started out with in college prior to the 2000s.
You can start off with
Programming: Principles and Practice Using C++ and then going onto The C++ Programming Language, 4th Edition after completing the first one. There is also C++ Primer that is also highly recommended as another book for starting out.
A book along with web searches when you have questions will get you pretty far. Having someone to ask questions if you get stuck on something conceptually is also useful. The best advice I can give you is to really play around with the language as you are learning and do most of the practice exercises too. Stroustrup also has solutions to the exercises from the first book I mentioned online. Hopefully you have some months available to learn the language. On top of that you might need to learn some computer science topics like data structures as well. You just can't rush these things but you can accelerate it a little.
As for me, my C++ knowledge is 'rusting away' by the day. I learned the STL with C++ when it was made official only a couple years after (like over 10 years ago). Nowadays you have Boost and the language itself has changed. I have not presently needed to update my C++ knowledge to what is latest and greatest but I shall.
Also worth pointing out is that In my experience, when you work with different companies you might find that you never use official C++ libraries and most current language features, but you are supporting legacy stuff that was first written maybe 20 years ago when not even built-in STL was available. This means either you are going to use some now-arcane implementation of someone's version of base libraries or the company rolled their own from the ground up many years ago, and because its so well entrenched in the code-base it continues to be used many years later. Not a big deal, but you might want to find that out for yourself, that if you are learning the latest and greatest of library and language features - you might or might not be using it in practice with your company.
You can PM me if you have questions but I'm not sure I can commit the amount of time you might need in a tutor role.
If you're only gonna read one book it should probably be this one: https://www.amazon.com/dp/0321992784/
That said, the idea of my producer "deep diving into the project" absolutely terrifies me. If you want to learn the basics of programming to make communication a little easier then that's great but nobody is going to want you touching code. Being able to write C++ - especially C++ learned quickly - doesn't make you a good developer.
The Code Book for a primer on the basics up through some simple explanations of modern computer cryptography and the Handbook of Applied Cryptography for serious math proofs of a lot of the modern crypto standards in use today.
https://www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323/ref=asap_bc?ie=UTF8
This book is great. I read it a number of years ago and couldn't get enough.
I first heard about the french 'La disparition' and the translated 'A Void' in The Code Book by Simon Singh (which in itself is a great book) in the chapter describing frequency analysis with regard to cryptanalysis. [With 'e' being the most frequently used letter in english.]
If you want background reading about the history try 'the code book' http://www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323 I found it really interesting when I first read it, It is easy to read and got me interested in the subject.
a book like this one is good: http://www.schneier.com/book-applied.html for a general treatment.
It's really Comp Sci, but I really enjoyed The Code Book. Goes over secret codes over time, starting with the basics, ends with Cryptography, goes over some of Alen Turing's work. Over all a good, fascinating read.
If you enjoy Simon Singh, check out The Code Book.
Article: http://www.bbc.co.uk/history/topics/enigma
Movie: The imitation game
Book : Simon Singh - The Code Book
https://www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323/ref=mp_s_a_1_2/138-6683061-6847431?ie=UTF8&amp;qid=1541615715&amp;sr=8-2&amp;pi=AC_SX236_SY340_FMwebp_QL65&amp;keywords=simon+singh&amp;dpPl=1&amp;dpID=51CC3yLf5mL&amp;ref=plSrch
is it this one?
https://www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323
In addition to illusory script and other magical solutions (possibly even layered on top of them for added security), check out some historical spy stuff:
https://en.wikipedia.org/wiki/Steganography
I also really recommend The Code Book:
https://www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323/
These might interest you:
Poincare's Prize
Prime Obsession
Fermat's Enigma
The Code Book
Simon Singh's book is fantastic. It was one of my early reads in the field of crypto. I read it when I was in middle school so I don't think it would be too techy for you! But it covers a ton of topics, including topics that will be relevant into the future. So in short: yes, buy it.
EDIT: It occurred to me that I read one of Simon's earlier works, I think it's part of the same series? Anyway, my recommendation is: https://www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323
> I have zero Linux experience. How should I correct this deficiency?
First, install a VM (Oracle OpenBox is free) and download a linux ISO and boot from it. Debian and Ubuntu are two of my favorites. Both are totally free (as are most linux distros). Once installed, start reading some beginner linux tutorials online (or get "Linux In A Nutshell" by O'Reilly).
Just fuck around with it... if you screw something up, blow it away and reinstall (or restore from a previous image)
> Is it necessary? Should I start trying to make Linux my primary OS instead of using windows, or should that come later?
It's not necessary, but will help you learn faster. A lot of security infrastructure runs on Linux and UNIX flavors. It's important to have at least a basic understanding of how a Linux POSIX system works.
> If you can, what are some good books to try to find used or on PDF to learn about cissp and cisa? Should I be going after both? Which should I seek first?
You don't need to worry about taking & passing them until you've been working in the field for at least 3-5 years, but if you can get some used review materials second-hand, it'll give you a rough idea what's out there in the security landscape and what a security professional is expected to know (generally)
CISSP - is more detailed and broader and is good if you're doing security work day-to-day (this is probably what you want)
CISA - is focused on auditing and IT governance and is good if you're an IT Auditor or working in compliance or something (probably not where you're headed)
> What are good books I can use to learn about networking? If you noticed I ask for books a lot its because the only internet I have is when I connect my android to my laptop by pdanet, and service is sketchy at my apartment.
O'Reilly is a reliable publisher of quality tech books. An amazon search for "O'Reilly networking" pull up a bunch. Also, their "in a nutshell" series of books are great reference books for Windows, Linux, Networking, etc... You can probably find older/used copies online for a decent price (check ebay and half.com too)
> How would you recommend learning about encryption? I just subscribed to /r/crypto so I can lurk there. Again, can you point me at some books?
Try "The Code Book" for a very accessible intro to crypto from ancient times thru today
http://www.amazon.com/The-Code-Book-Science-Cryptography/dp/0385495323
Also, for basics of computer architecture, read "CODE", which is absolutely excellent and shows how computers work from the ground up in VERY accessible writing.
http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319
Reverse Code Engineering. Down the rabbit hole you go!
I'm not sure how to tell you where to start with cryptography. For the kind of stuff they've been doing so far in the footers, it's enough to just understand binary numbering. The rest is mostly intuition.
The Caesar cipher is an example of a shift cipher, which in turn is a subset of the broader category of substitution ciphers. You should probably familiarize yourself with how to use frequency analysis to break classic substitution ciphers. The next major evolution of ciphers was the vigenere cipher. During WWI, Germany used the ADFGVX. Even now, breaking it is not trivial if the key is sufficiently long.
On the modern, digital side of things, encryption algorithms generally fall into two categories: block ciphers (ex. AES, DES, Blowfish, etc.) and stream ciphers. You should probably learn what hashing algorithms are (ex. MD5, SHA-1). If you want to crack hashes these days, you'll want to know about rainbow tables.
If you're looking for a good laymen's introduction, I recommend The Code Book by Simon Singh.
Though strictly factual, Simon Singh's The Code Book can at best of times be read as a good spy novel, just based on real historical facts. A very interesting read nonetheless!
"As our hotel accommodates guests of all faiths, we shall no longer carry books of faith with reassuring and positive messages that imply order, such as the bible and the q'ran. Instead, we have made available A Million Random Digits with 100,000 Normal Deviates to reassure our guests that the universe is indeed a cold and meaningless chaotic place with no deeper meaning."
Amazon sells everything
That's nothing compared to this book. Just look at the reviews!
You know this one started slow, but by about page 500 it genuinely does pick up quite a bit.
A fun side note - read the reviews of this book:
https://www.amazon.com/Million-Random-Digits-Normal-Deviates/dp/0833030477
You can still buy random on Amazon.
Edit: in fact, you can also get it free from the horse's mouth.
Obviously, you aren't up on your Amazon reviews. Exhibit A: https://www.amazon.com/Million-Random-Digits-Normal-Deviates/product-reviews/0833030477/ref=cm_cr_dp_d_acr_sr?ie=UTF8&amp;reviewerType=avp_only_reviews.
Depends on what you want to learn.
Web Application Security?
Exploit Development?
"Pentesting" techniques?
Also check here for tons other of resources.
As for certs, if you are a beginner beginner, then probably stuff like Security+ and Network+. Unlike the guy behind me, I will never get, nor do I really recommend CISSP, unless you are going for strictly blue team (defense) work. I personally enjoy red team (pentesting, etc), so something like OSCP would be more useful.
Like I said in a post above, feel free to PM me with questions. I'm always happy to help others on their quest to learn more about the wide world of infosec :)
I don't know how in depth you want to learn, how in depth determines our recommendations.
You sound like you want the second option.
The key phrase for you is going to be "web application security". That is what security experts (and anyone in this industry) call it.
For web application security there is kind of one master book that covers almost everything, The Web Application Hackers Handbook. I have the book siting right in front of me its about 900 pages and covers just about everything you could ever ask for. Also you'r going to want to get Burp Suite. You can install Kali linux in a VM and it has Burp Suite (recommended) or you can download the free edition for Windows from there website.
Along with the book set up DVWA (there are hundreds of tutorials online on how to do that, hint use XAMPP.) or you can use the paid labs they mention in The Web Application Hackers Handbook. Also visit HackThisSite and other sites that offer web application security practice.
So lets recap:
3.Visit sites that offer web application security challenges.
By the end of that you should be pretty good at attacking web applications.
Get this book and go through it. A LOT of the crowsourced pentesting platforms have web application testing as their bread and butter.
And the other user who suggested it got downvoted for some reason, but further down the line you should go for GWAPT. I say further down the line because, like all SANS certs, it's expensive af.
Web app pentesting is the largest pentesting market around right now, so it's a good one to jump into. Good luck!
Absolutely love being a pentester and the cyber security industry. If you are willing to put in the time and study it can be very rewarding. CEH is a good step in the right direction and should open doors for you.
For entry level positions, pentesting is usually split into two areas, web application and internal/external infrastructure. It's good to have knowledge of both but it's worth choosing which area interests you the most. Personally, I specialise in web applications & API and there is a lot of online resources to help you. (As you have mentioned owasp top 10, I'll assume web apps is your interest)
The best way to learn a vulnerability and get a good understanding is to create vulnerable web pages (this also gives you something to take into an interview). I would suggest doing some basic LAMP stack (Linux, Apache, Mysql, PHP) - Don't let this put you off as it's actually pretty simple. If you can make a few vulnerable pages to display vulnerabilities, you will fly through entry level interviews.
it's really simple to do.. Here is a form that is vulnerable to cross-site scripting. (a few lines of php with some html)
---
<form method="POST" action="">
<p> <input type="text" name="xss"/></p>
<input type="submit">
<?php
$value = $_POST['xss'];
echo $value;
?>
Reading Material:
https://www.amazon.co.uk/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470
https://www.amazon.co.uk/Network-Security-Assessment-Know-Your/dp/149191095X
Practical learning
DVWA (Damn Vulnerable Web App) - Purposely vulnerable web pages to practice exploiting.
http://www.dvwa.co.uk/
Once you have a bit of experience have a look at hackthebox
https://www.hackthebox.eu/
I'd recommend checking out The Web Application Hackers Handbook: http://www.amazon.com/The-Web-Application-Hackers-Handbook/dp/1118026470
Its a solid book that covers a lot of what you'd want to know. It does make heavy use of the free BURP suite tool which is a fairly standard tool for web pentesters. It doesn't do everything for you but it helps manual testing.
I think very poorly of the cyber security courses offered (except NUS) in Singapore, as the things they teach are not aligned with the industry practices - either outdated or just not practical enough.
Having said that, if you have the time, I would suggest taking the SIT degree instead of the diplomas (waste of time IMO) and hopefully it provides you the fundamentals (programming, network and system administration) and be exposed to some other topics in cybersecurity.
If you are doing a career switch, I suppose you want to get up to speed fast by focusing on the need to have knowledge as a baseline. I would suggest taking the time to go through these stuff in details, setup your labs and practice the stuff
Other wise, there are hands on courses and industry certifications that you can take online at your own pace and employers look out for such as:
There is no one path to becoming a good pentester. However from my observations, folks who tend to be more in demands (with or without certifications/formal educations) are those who can display the ability to learn stuff on their own. This is an industry of skills and continuous learning. For employers that pay top dollar and provide time for training, learning and research, they are looking for folks who can display those stuff through actions.
&#x200B;
Source: Pentester
Go here and learn about the vulnerabilities - www.hacksplaining
Review the OWASP Top 10
Buy, read, and understand The Web Application Hacker's Handbook - this is the holy bible in the Web Penetration Realm.
Set up a VM and download DVWA as well as Mutillidae to practice web hacking and exploitation on.
If you are really new to pentesting in general - go and read my blog https://jhalon.github.io/.
I suggest you read the Vulnhub Writeup's and well as the Holiday Hack Challenge and the OverTheWire Natas ones as they are related to web hacking and will show you stesp from enumeration to exploitation.
Also since you are going to be interning at a company that does this, please familiarize yourself with the The Penetration Testing Execution Standard
Hope that sheds some lights, cheers!
Faz VMs/CTFs em casa, lê o Web Application Hacker's Handbook. Depois candidata-te a trabalhos na área. That easy.
&#x200B;
Não tenho mestrado nenhum na área de cybersec (tenho em telecom), e já vou no segundo ano na área sem nunca ter trabalhado antes.
The Tangled Web
The Web Application Hackers Handbook
Hi there. I'm a professional web developer by trade. Your website looks like it's from the 1990's...I understand that both of you are working full-time, but I highly recommend completely re-doing your website.
I don't even know where to start, so I'm just going to give you examples, resources, and inspiration, and relevant comments.
Inspiration:
This is by far, THE best website for tea I've ever seen.
DavidsTea
Mid-tiered websites:
Harney&Sons
Some more sites you can look at:
Adagio Teas
Mighty Leaf
Verdant Tea
Lower-tiered websites:
TeaVivre
Den's Tea
Absolutely not:
Upton Tea
Resources:
Let me know if you have any other questions, thanks!
http://www.amazon.com/JavaScript-JQuery-Interactive-Front-End-Development/dp/1118531647/ref=sr_1_1?ie=UTF8&amp;qid=1410413069&amp;sr=8-1&amp;keywords=javascript+and+jquery
There's a reason this book is the number one best seller in Javascript Programming on Amazon.
I haven't used it yet, but if the reviews and his html/css book are any indication this would be an amazing book.
Check out "Javascript & jQuery" by Jon Duckett
Does only coming from a sys admin background count as no prior experience to web programming? I just was given access to the static company site about a year ago and was tasked with updating it since then. Fast forward to about 5 weeks ago and I decided to teach myself WordPress + LAMP then LEMP. L(A/E)MP = Linux, Apache/Nginx ("Engine-X"), MySQL/MariaDB, and PHP/Python (bottle.py).
I knew PHP and Linux from system management of random servers at work and through consultations with my personal business.
If you're asking for advice on where to start, it seems that the current best practice is to go on codeacademy.com and accompany that work with the Jon Duckett books on at least front end stuff including HTML/CSS/JS and maybe some jQuery.
http://www.amazon.com/HTML-CSS-Design-Build-Websites/dp/1118008189/
http://www.amazon.com/JavaScript-JQuery-Interactive-Front-End-Development/dp/1118531647/
Cloud9 and GitHub are great first destinations for starting in development. You can go my route if you're feeling confident with system management and go for Amazon Web Services EC2 with a free (for a year!) micro instance that you can load with all kinds of stuff, including a basic Ubuntu server with LAMP (MySQL, PHP) that in-all takes less than an hour to get comfortable with and ready for a new page or even WordPress.
A significant amount of people here swear by laracasts.com as well once you're through the basic front end tech :)
I picked up this book and have been going through it along with CodeAcademy and Treehouse. The book has lots of examples and simplifies a lot of things that aren't neccessary taught on the tutorial sites so I find learning through mutiple resources pretty good.
Jon Duckett: Javascript & JQuery + The Odin Project
These two sources worked wonders for me.
Lol I've never heard a script kiddie ask for factoring advice... guess there is a first time for everything. Maybe try reading this -- https://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_1?ie=UTF8&amp;qid=1468244890&amp;sr=8-1&amp;keywords=refactoring.
Refactoring
read it. seriously. it's a great book. and it's invaluable.
Agreed. There are plenty of resources out there that will help you understand design patterns. If you're new to the concept, I would recommend Head First: Design Patterns, it might be based on Java, but the examples are simple to understand and can mostly apply to PHP as well. When you feel like you've grasped the basic concepts of design patterns, you can move on to more advanced texts, like Martin Fowler's Patterns of Enterprise Design - this is a great reference for a lot of the more common patterns. There is also Refactoring: Improving the Design of Existing Code. These are great investments that will help you with any project you work on, and will help you if you decide to use a framework like Zend which uses design patterns very heavily.
Personally, I look for code smells. You can find them formalized in Refactoring: Improving the Design of Existing Code.
This one I hear is great:
http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672
The following books would be good suggestions irrespective of the language you're developing in:
Patterns of Enterprise Application Architecture was certainly an eye-opener on first read-through, and remains a much-thumbed reference.
Domain-Driven Design is of a similar vein & quality.
Refactoring - another fantastic Martin Fowler book.
Concrete Mathematics - one of the best textbooks to study discrete math
I'd also recommend https://www.amazon.com/Mathematics-Generic-Programming-Alexander-Stepanov/dp/0321942043
https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025
While not free, Knuth, Graham, and Patashnik's Concrete Mathematics is quite cheap on Amazon.com, and, if you work through it diligently, you'll have more than enough mathematics to tackle CS through the beginning graduate level.
There's a whole section on this problem in Concrete Mathematics. The first edition was published in 1989, and the problem was old then.
Accelerated C++
There ya go. Now you don't have to take an entire class to learn C++.
> Other resources that move a little faster?
I learned C++ from the book Accelerated C++ and I recommend it to everyone that wants to learn C++ seriously. The learning curve is a little steep, but with some dedication you can work yourself through it in a month or three.
Accelerated C++
Pick up a copy of Accelerated C++. It starts at the very beginning and takes a more modern approach to teaching C++ than a lot of the other books on the market.
It's part of the "C++ in-depth series" that also has a bunch of other great titles like Sutter's Exceptional C++.
I got my start by taking AP CS in high school. However, I had already gone to college and that was a while ago, so I read some books on the commute to/from work.
Initially, I read Sams Teach Yourself PHP, Mysql and Apache all in one to learn PHP.
Immediately afterward, I read Murach's Java Se 6 and Beginning Java Objects to learn Java.
Most recently, I read a portion of C++ Primer Plus, but got very sick of it. I've read most of Accelerated C++
I have a few other books on C# to read when the time comes to actually write code.
By the time I had read all of the above, I felt pretty confident on how to structure a program, regardless of language. As such, I was able to pick up Python and JavaScript quite easily just by reading online documentation at Python.org and W3Schools. When I'm writing a web app, I'll rely pretty heavily on PHP's and MySQL's online documentation to help me with whatever syntax quibbles I may have.
I still want to read Game Coding Complete and I'll probably want to find a few resources on programming within XCode.
They all tend to follow the same programming paradigms, to be honest. Java did a good job in getting me into an OOP mindset and C/C++ did a good job at helping me think about how to program things without layer of abstraction. Once I learned these concepts, it was pretty easy to get started with a new language. Programming in PHP can be super sloppy, but taking what I learned from other languages, I'm usually able to write fairly clean code in PHP (especially when I learned how to use classes).
I wouldn't recommend all of the books above, to be honest. I didn't have much ability to do online training at the time and compiled lists of books weren't nearly as useful at the time, so I relied mostly on Amazon book reviews. I'm sure you can find a few choice books on each language you want to learn and go that way. If you were to read books, I think Accelerated C++ is a good book, but works best if you already have some experience programming. I remember like Beginning Java Objects more than Murach's, though both are great as references (which is why they're both still in my bookshelf). C++ Primer Plus spends too much time teaching C and not enough time teaching C++ (you spend pages upon pages learning about C-style strings, aka char arrays, rather than just using the String Class, but I digress).
Ultimately, I could read a bunch about a language, but I never truly learned the language until I started writing in it. I've written a handful of programs just as proofs of concepts and I recommend you do the same while learning any language.
I just went through Accelerated C++ by Koenig and Moo. It helped me learn most of the basic ideas from strings and pointers to polymorphism and template classes. Very well written, though I did need to google a few things and ask people I knew sometimes. I haven't done any online courses. I think I will work on personal projects using C++ from now on to learn, and google things to fill in the gaps.
Accelerated C++ was made for that purpose. Most of the low reviews are beginners complaining that they couldn't follow, or complaining about the "paper quality" (mine is fine).
If you'd like to take another stab at C++, I recommend Accelerated C++.
Grab a copy of Accelerated C++ and give it a few hours. You should know whether C++ is for you.
C++ is a complicated, technical language. I'd recommend hitting the books for it. Learning C++ properly will teach you a lot about almost any language.
Accelerated C++ is the place to start if you don't know how any of the syntax works (pointers, const, templates, etc). Read a bit of it and write some C++.
When you've written some files and feel comfortable in C++'s syntax, read Effective C++. It will teach you good practice with many points from it transferring over to other languages.
I've been using Accelerated C++ (you can find pdfs of it pretty easily if you don't want to buy it). It seems to be serving me well so far.
C++ isn't that hard, unless you're trying to learn all of it. When I deal with unfamiliar (complex) APIs, part of the struggle is learning what I can ignore--what pointer parameters should usually be NULL, for example, or what typedef/macro is really just a char or int.
Another thing that used to confuse me is that some APIs want the address of a function as a parameter, while others want an object that performs a function (usually, it's because the object has operator()() defined). This is used when the API you're using assumes your function will want to remember state in a more sophisticated manner than is possible with a simple function (and the object is kept alive and its operator()() is called several times). If you really want to understand C++ (I'm not sure you do), I'd recommend Scott Meyers' Effective C++.
Sorry that I don't have any great advice, but these are a couple things that I struggled with when learning new APIs.
Python seconded. Learning multiple languages, especially ones that differ significantly from the ones you already know, is one of the keys to being a good programmer. This is some of the advice in Peter Norvig's Teach Yourself Programming in Ten Years.
How to think like a computer scientist is an OK introduction to Python and programming, but it's very undeserving of that title as it really doesn't touch on what one might call computer science. In fact the more computer-sciencey parts are pretty poor – for example, the section on tail recursion is complete crap that will just confuse someone who doesn't already know the what and why of tail recursion.
If you're dead set on Windows and C++ you don't need VS Pro, MS have a free version. It's unlikely you'll really need the extra features that come with the pro version. Also once you're past learning the basics, read a copy of Effective C++ and Exceptional C++. And try not to get sucked too heavily into the weirdisms of the Windows style of C++ programming, they do funny things over there.
Effective C++
More Effective C++
and Effective STL
Reminds me of a joke:
a: "Alright the book is done, all that is left is to choose a cover".
b: "Dragons"
a: "B-but the book is about..."
b: "DRAGONS I SAID"
Book
There are books specifically on language design, syntax trees, and unambiguous grammars.
The classic books on compiler design are "The Dragon Book", designing a compiler is important because a statement in the language should mean exactly one thing, and a language should be able to be compiled efficiently. This is more difficult than it sounds.
Second, you need to understand language design, variable binding, etc. This is a topic of Programming Language Paradigms. I'll figure out a good book for this and edit to add it. The best book probably covers languages like Ada, Haskell, C, and Java and gives an overview of their design and reasons.
edit: The book for design is Concepts of Programming Languages 9th ed, by Robert W. Sebesta.
I don't know what he'd recommend, but I found the Dragon Book and Modern Compiler Design to be decent treatments of the subject. There are lots of interesting texts out there though.
Sorry for the cheeky reply.
> And which coder uses physical books any more?
I do for things beyond actual language references; e.g. maybe everything in The Dragon Book has a good description somewhere, but grabbing that off my desk and having a decent chance of it having what I want (it has some problems and omissions, but it's reasonably good) will save wading through a bunch of crap online until I find something complete and accurate enough.
But make sure to get the 2nd edition of the Compiler book. It has been enhanced quite a bit.
This is a great question! It's also one that every serious CS person will ask at some point. As others here have noted, to really understand this question you must understand how compilers work. However, it isn't necessary to understand the gory details of compiler internals to see what a compiler does for you. Let's say you have a file called hello.cpp that contains the quintessential C++ program
include <iostream>
The first thing the compiler does is called preprocessing. Part of this process includes expanding the
#include
statements into their proper text. Assuming you are using gcc, you can have it show you the output of this stepgcc -E -o hello.pp hello.cpp
For me, the hello.cpp files explodes from 4 lines to nearly 18000! The important thing to note here is that the contents of the iostream library header occur before the
int main
lines in the output.The next several step for the compiler are what you will learn about in compiler design courses. You can take a peek at gcc-specific representations using some flags as discussed on SO. However, I pray you give heed. For there be dragons!
Now let's take a look at the compiler's output. To do this, I am going to not
#include
anything so the output is very simple. Let's use a file called test.cpp for the rest of the tests.int main() {
int i = 3, j = 5;
float f = 13.6 / i;
long k = i<<j;
}
To see the compiler's output, you can use
g++ -S -masm=intel test.cpp
The
-S
flag asks gcc to just output the generated assembly code and-masm=intel
requests the intel dialect (by default, gcc uses the AT&T dialect, but everyone knows the intel one is superior. :) ) The output on my machine (ignoring setup and teardown code) is outlined below.push rbp
mov rbp, rsp
/ int i = 3, j = 5; /
mov DWORD PTR [rbp-20], 3
mov DWORD PTR [rbp-16], 5
/ float f = 13.6 / i; /
pxor xmm0, xmm0
cvtsi2sd xmm0, DWORD PTR [rbp-20]
movsd xmm1, QWORD PTR .LC0[rip]
divsd xmm1, xmm0
movapd xmm0, xmm1
cvtsd2ss xmm2, xmm0
movss DWORD PTR [rbp-12], xmm2
/ long k = i<<j; /
mov eax, DWORD PTR [rbp-16]
mov edx, DWORD PTR [rbp-20]
mov ecx, eax
sal edx, cl
mov eax, edx
cdqe
mov QWORD PTR [rbp-8], rax
/ implicit return 0; /
mov eax, 0
pop rbp
ret
There are lots of details to learn in here, but you can generally see how each simple C++ statement translates into many assembly instructions. For fun, try compiling that program with the optimizer turned on (with g++, you can use
-O3
). What is the output?There is still much to see from the binary that is assembled. You can use
nm
andobjdump
to see symbols orldd
to see what other libraries were (dynamically) linked into the executable. I will leave that as an exercise for the reader. :)> I will say that C++ is a very difficult language to pick up.
C++ is massive, being a three-decade accretion of features. Stroustrup's indispensable book, over 1300 dense pages, is only a succession of introductions to various aspects of the language. You often go to the web to get details.
Sorry to hear that, friend.
I would definitely try to get your hands on a copy of The C++ Programming Language, it's got enough content to last you a while and it'll definitely show you all the ins-and-outs of C++.
I personally prefer his The C++ Programming Language over this book as a reference for C++ and The C++ Standard Library: A Tutorial and Reference as a reference to STL. This one feels to me a bit more of a beginner book, still a very good read though!
http://www.learncpp.com/
https://www.sololearn.com/Course/CPlusPlus/
https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113
https://www.amazon.com/Effective-Modern-Specific-Ways-Improve/dp/1491903996 (this one is a little more advanced, should be read when you are comfortable with c++)
https://www.amazon.com/C-Programming-Language-4th/dp/0321563840
Posting this as a top level comment so people can see this without digging. Here are some of the resources I have used plus additional ones I've found that may be useful:
I'm in a similar position. I haven't used C++ since I was in school, and at the time I was just learning, so I never obtained a real deep knowledge of the language. Not to mention that there are whole new ways of solving some problems with the additions from C++11. What I'm doing right now is reading through The C++ Programming Language. I am hoping it will do the job of reintroducing me to the entire language while explaining all of the new stuff.
It seems to be going well thus far, but I have only just gotten started.
The C++ Programming Language is one of my most prized books. It assumes you know some C/C++, so it's not the best starting point, but it has the depth and wisdom that only the creator of a language has. Which is why he wrote this book.
> It seems like the real core of programming is to know how to ask the right questions to find the answers and apply them.
You are correct. The C++ Programming Language book is 1368 pages. Look how big the Java 8 API is. The Python Standard Library has 35 topics, breaking down to about 10 subtopics each, that can then have pages and pages of information each.
You are always going to need a reference to do something there is simply too much to memorize. Even if you know exactly what you want to do chances are you are going to have to look something up.
I'M REALLY SORRY YOU'RE HAVING A HARD TIME.
NOT SAYING YOU HAVEN'T TRIED, I COMPLETELY BELIEVE YOU. BUT IF YOU BRANCH AWAY FROM THE CODE-BOOTCAMP/WEB-DEV ARENA THERE IS CURRENTLY A MASSIVE SHORTAGE OF PEOPLE THAT CAN ACTUALLY PROGRAM. COMPANIES LIKE NIKE FLY IN DEVELOPERS FROM ALL OVER THE COUNTRY STRAIGHT OUT OF COLLEGE.
WE INTERVIEW SO. MANY. FUCKING. PEOPLE. THAT DON'T KNOW THE ABSOLUTE BASICS.
PUSH THE "WRITING SOFTWARE IN PYTHON" ASPECTS OF YOUR PAST EXPERIENCE AND DOWNPLAY ANY HTML/CSS/JAVASCRIPT STUFF. SPEND A MONTH LEARNING THE BASICS OF JAVA. THEN SIGN UP FOR LEETCODE AND CODERBYTE (FREE VERSIONS) AND SOLVE A PROBLEM A DAY FROM EACH, FOR 30 DAYS. IF YOU DON'T KNOW HOW, GOOGLE IT UNTIL YOU DO. LEARN THE ABSOLUTE BASICS OF ALGORITHMS, EFFICIENCY, AND RUNTIME COMPLEXITY THROUGH COURSERA, OR A BOOK LIKE THIS, AND ADVERTISE THE SHIT OUT OF IT ON YOUR RESUME. THIS IS WHAT THEY'RE LOOKING FOR.
SHOW UP LOOKING LIKE A NORMAL HUMAN, YOU'LL BE ABLE TO ANSWER QUESTIONS ABOUT THE EFFICIENCY OF CERTAIN ALGORITHMS OVER ANOTHER AND WHEN THEY ASK, YOU WILL SOLVE A WHITEBOARD PROBLEM THAT WILL LIKELY BE A WORD-FOR-WORD COPY OF ONE OF THE PRACTICE PROBLEMS YOU SOLVED ON LEETCODE. DO THIS AND I GUARANTEE THEY WILL JUMP YOUR BONES TO GET YOU ON THE TEAM. THAT'S WHERE THE MONEY AND MARKET IS RIGHT NOW, AND THERE ISN'T ENOUGH PEOPLE TO FILL IT.
You can't go wrong with Sedgewick's Algorithms. I prefer its approach to Cormen's book.
http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X/ref=sr_1_1?ie=UTF8&amp;qid=1408422212&amp;sr=8-1&amp;keywords=algorithms
The feedback about "jargon for development" can be solved by going through some books cover to cover, making sure you understand the theory, and implementing the exercises. I understand that feedback to mean that the person who gave the feedback believes there is too high a chance you will inflict damage on the codebase by making decisions not grounded in solid theory.
Examples of titles that are classics and widely known:
Algorithms (4th Edition): https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X (there is an accompanying coursera course).
Code Complete: https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1469249272&amp;sr=1-1&amp;keywords=code+complete
Clean Code: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1469249283&amp;sr=1-1&amp;keywords=clean+code
Functional Programming in Scala: https://www.amazon.com/Functional-Programming-Scala-Paul-Chiusano/dp/1617290653/ref=sr_1_2?s=books&amp;ie=UTF8&amp;qid=1469249345&amp;sr=1-2&amp;keywords=scala
Learning Python: https://www.amazon.com/Learning-Python-5th-Mark-Lutz/dp/1449355730/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1469249357&amp;sr=1-1&amp;keywords=learning+python
Effective Java: https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_5?s=books&amp;ie=UTF8&amp;qid=1469249369&amp;sr=1-5&amp;keywords=java
Haskell Programming From First Principles: http://haskellbook.com/
I included multiple languages as well as language-agnostic ones. Functional programming is the near-to-medium term future of software engineering, and most languages converging towards that as they add functional features.
I don't think bootcamp is required. Learning how to learn is the most important thing. If you get into these books, lose track of time, and feel "aha! that's how these things that I previously thought were unrelated are actually the same thing!", and are able to keep it up for weeks, then that is a good sign that you can get to where you want to be.
This one is very good indeed.
Compete this book (don't just read it, do everything).
The Elements of Computing Systems: Building a Modern Computer from First Principles
You know how you wish you could relive the experience of your first time watching your favorite movie or listening to a mind-blowing song -- that's how I feel about reading Code and The Elements Computing Systems. I'm a self-taught programmer with impostor syndrome who's spent a career playing catch-up to formerly trained comp sci-ers. When I first read these books, they utterly blew my mind.
I was discussing with a friend about computers as I'm a Computer Engineer and learned all about the design and ground up construction from the principals of electronics up through logic gates operating systems and programming as a part of my college curriculum. He said he read through this book and it was very insigtful and was able to have a good proper discussion about it. I'm not sure if linking is allowed but here it is on Amazon.
http://www.amazon.com/The-Elements-Computing-Systems-Principles/dp/0262640686
It's The Elements of Computing System Principles by Noam Nisan.
From there if you're further interested you'll know which topics might be more interesting to you and you'll be able to better investigate it. It's really a lot of material, and after 4 years of school, I know quite a bit about it, but people tend to specialize due to the sheer amount of material there is to learn about each specific topic. Lifetimes have been devoted to singular aspects of computer design so don't feel bad if some of it is overwhelming.
I have yet to read it myself, but i hear good things about The Elements of Computing Systems: Building a Modern Computer from First Principles.
This video is related. If you have an hour to spare I'd really recommend it.
Edit:
As a point of interest the minecraft computer is based on the "Hack machine" described in the book.
Elements of Computing Systems is a really good book to learn from the ground up.
Take a look at these:
Intro to Logic Design
and
*
Elements of Computing Systems
Further reading/research: (Not all of which I've gotten to read yet. Some of which may be quite tangentially relevant to the discussion at hand along with the books and sites I mentioned above. Consider this more a list of books pertaining to the history of technology, machining, metrology, some general science and good engineering texts.)
Dan Gelbart's Youtube Channel
Engineerguy's Youtube Channel
Nick Mueller's Youtube Channel
mrpete222/tubalcain's youtube channel
Tom Lipton (oxtools) Youtube Channel
Suburban Tool's Youtube Channel
NYCNC's Youtube Channel
Computer History Museum's Youtube Channel
History of Machine Tools, 1700-1910 by Steeds
Studies in the History of Machine Tools by Woodbury
A History of Machine Tools by Bradley
Tools for the Job: A History of Machine Tools to 1950 by The Science Museum
A History of Engineering Metrology by Hume
Tools and Machines by Barnard
The Testing of Machine Tools by Burley
Modern machine shop tools, their construction, operation and manipulation, including both hand and machine tools: a book of practical instruction by Humphrey & Dervoort
Machine-Shop Tools and Methods by Leonard
A Measure of All Things: The Story of Man and Measurement by Whitelaw
Handbook of Optical Metrology: Principles and Applications by Yoshizawa
Angle of Attack: Harrison Storms and the Race to the Moon by Gray
Machine Shop Training Course Vol 1 & 2 by Jones
A Century of Electrical Engineering and Computer Science at MIT, 1882-1982
Numerical Control: Making a New Technology by Reintjes
History of Strength of Materials by Timoshenko
Rust: The Longest War by Waldman
The Companion Reference Book on Dial and Test Indicators: Based on our popular website www.longislandindicator.com by Meyer
Optical Shop Testing by Malacara
Lost Moon: The Preilous Voyage of Apollo 13 by Lovell and Kruger
Kelly: More Than My Share of It All by Johnson & Smith
Skunk Works: A Personal Memoir of My Years at Lockheed by Rich & Janos
Unwritten Laws of Engineering by King
Advanced Machine Work by Smith
Accurate Tool Work by Goodrich
Optical Tooling, for Precise Manufacture and Alignment by Kissam
The Martian: A Novel by Weir
Roark's Formulas for Stress and Strain by Young Budynas & Sadegh
Materials Selection in Mechanical Design by Ashby
Slide Rule: The Autobiography of an Engineer by Shute
Cosmos by Sagan
Nuts, Bolts, Fasteners and Plumbing Handbook by Smith Carol Smith wrote a number of other great books such as Engineer to Win.
Tool & Cutter Sharpening by Hall
Handbook of Machine Tool Analysis by Marinescu, Ispas & Boboc
The Intel Trinity by Malone
Manufacturing Processes for Design Professionals by Thompson
A Handbook on Tool Room Grinding
Tolerance Design: A Handbook for Developing Optimal Specifications by Creveling
Inspection and Gaging by Kennedy
Precision Engineering by Evans
Procedures in Experimental Physics by Strong
Dick's Encyclopedia of Practical Receipts and Processes or How They Did it in the 1870's by Dick
Flextures: Elements of Elastic Mechanisms by Smith
Precision Engineering by Venkatesh & Izman
Metal Cutting Theory and Practice by Stephenson & Agapiou
American Lathe Builders, 1810-1910 by Cope As mentioned in the above post, Kennth Cope did a series of books on early machine tool builders. This is one of them.
Shop Theory by Henry Ford Trade Shop
Learning the lost Art of Hand Scraping: From Eight Classic Machine Shop Textbooks A small collection of articles combined in one small book. Lindsay Publications was a smallish company that would collect, reprint or combine public domain source material related to machining and sell them at reasonable prices. They retired a few years ago and sold what rights and materials they had to another company.
How Round Is Your Circle?: Where Engineering and Mathematics Meet by Bryant & Sangwin
Machining & CNC Technology by Fitzpatrick
CNC Programming Handbook by Smid
Machine Shop Practice Vol 1 & 2 by Moltrecht
The Elements of Computing Systems: Building a Modern Computer from First Principles A fantastic book with tons of free online material, labs, and courses built around it. This book could take a 6th grader interested in learning, and teach them the fundamentals from scratch to design a basic computer processor and programming a simple OS etc.
Bosch Automotive Handbook by Bosch
Trajectory Planning for Automatic Machines and Robots by Biagiotti & Melchiorri
The Finite Element Method: Its Basis and Fundamentals by Zhu, Zienkiewicz and Taylor
Practical Treatise on Milling and Milling Machines by Brown & Sharpe
Grinding Technology by Krar & Oswold
Principles of Precision Engineering by Nakazawa & Takeguchi
Foundations of Ultra-Precision Mechanism Design by Smith
I.C.S. Reference Library, Volume 50: Working Chilled Iron, Planer Work, Shaper and Slotter Work, Drilling and Boring, Milling-Machine Work, Gear Calculations, Gear Cutting
I. C. S. Reference Library, Volume 51: Grinding, Bench, Vise, and Floor Work, Erecting, Shop Hints, Toolmaking, Gauges and Gauge Making, Dies and Die Making, Jigs and Jig Making
and many more ICS books on various engineering, technical and non-technical topics.
American Machinists' Handbook and Dictionary of Shop Terms: A Reference Book of Machine-Shop and Drawing-Room Data, Methods and Definitions, Seventh Edition by Colvin & Stanley
Modern Metal Cutting: A Practical Handbook by Sandvik
Mechanical Behavior of Materials by Dowling
Engineering Design by Dieter and Schmidt
[Creative Design of Products and Systems by Saeed]()
English and American Tool Builders by Roe
Machine Design by Norton
Control Systems by Nise
That doesn't include some random books I've found when traveling and visiting used book stores. :)
This is an incredibly broad and complex set of questions.
Here is a good video describing why there are so many programming languages.
Wikipedia has multiple pages comparing programming languages. Here is the beginning.
Students will spend years in school learning about the different layers of abstraction in programming and how code gets turned into something the computer will understand. This website along with the companion book is an excellent overview of the subject.
If you have more specific questions after perusing through the resources, I can answer them. The links the other poster and I have posted will give you a high-level overview of what you asked, but if you want all the details, you'd be halfway to a computer science bachelors degree.
Start here:
http://www.amazon.com/The-Elements-Computing-Systems-Principles/dp/0262640686
Don't start with the dragon book as someone else suggested - it's too much for someone new. I'd suggest reading The Elements of Computing Systems (which you can also read online). It starts from the grond up, but in the end has you creating a "high level" compiled language.
The speaker wrote this as a book, which was actually published in 2005.
Bought my own copy some time ago, definitely recommended!
Obviously the biggest gripe with Magento is obviously, Speed.
That said I recall Alan Storm mentioning performance was not a target during initial development, flexibility and developer friendliness would be a key to market penetration as it is obviously what helped make it as popular as it is.
Fast forward and now we all are having to deal with this initial uncaring for performance. We install layers upon layers of caching and indexing to squeeze as much out of it as we can.
Personally I find Magento overly architected. It feels like Spaghetti code at times, except its just a big massive plate of lasagna now. Everything has to go through hundreds of layers to build out a simple request.
With that said.
Wrong:
Right:
What I'm NOT looking forward to in Magento2:
After using Magento since version .6b using (X-Cart years before) I've slowly come to the realization that the majority of implementations seem to come from the Java world.
http://i.qkme.me/3u7vuq.jpg
I don't know if its the fact that instead of teaching Basica or even C isn't part of the curriculum at universities anymore and they just drop you into Java but I wish people would take more time to figure out the basic principles FIRST before saying Java, PHP, C, etc is better. They all have their +/-'s. But understanding the principles layers generally helps you understand how your PHP code is working inside the machine. I don't think this is taught anymore or no one cares. I'd suggest http://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686 to pickup for a good read for those that don't.
With that said anyone who thinks they can rebuild a better Magento from scratch, I will salute you, me I realize such a task would require years to achieve, by then the train may of already left the station. I know Varien who was a consulting company before Magento, realized the many pitfalls of OSCommerce for their clients. Hence why we have Magento today.
Disclaimer: These are just my opinions, which are a lot like butts we all have one and they all stink. ;)
This Book. Read it. It's fantastic
Also Effective C++, because it's full of gotchas and important but subtle language features that are ideal for interview questions. A lot of it will be too advanced for a jr. level interview, but you should read it anyway because it's a great book.
Effective C++
There's OO design, and there's particulars as to how to implement things in C++. I'm totally with unapersson as to, that the Os you make are as often conveniences or design helpers as representing real world objects. Ie that it's implementation objects. I don't remember how much OO design advice Effective C++ has, but it's a good book to get someone to intermediate C++ programmer. C++ Coding Standards by Herb Sutter and Andrei Alexandrescu talks at a fast clip about a lot of taste and design issues; I haven't looked at the 3rd edition of Eff. C++ but, from earlier editions, the difference is that Coding Standards is more dense, and sophisticated; Eff. C++ more basic (from what I can see, Coding Standards does cover the same material as Eff C++, but in a very compressed form, only the most minimal discussion; maybe not what you want when you're seeing the material for the first time.
As for pure OO design, I've heard that straight-up Grady Booch is still the best, but I have no experience of it.
I will say, if you want to be good at C++, you'll have to spend money on books (but get your company to buy them perhaps - compared to programmer time, books are free), and time on reading them; there are a lot of best-practices, technicalities and real pitfalls that are not immediately obvious.
edit:
> Also, should I be studying data structures/algorithms in unison with OOP?
Definitely. Have you learned the basics, stack, tree, queue, hash tables (or set, map, vector, unordered_set, unordered_map)? You /must/ know these. (priority_queue and list too, less so maybe.) If you can though I'd read (somehow) about other data structures, spatial ones especially in your case; they can really make your program more efficient and thus able to do more.
edit edit:
I have to say, the above books are for long-lasting code; probably for games your best bet is to look at how other programmers write their games (smaller, simpler, even in other languages - it can be hard to understand large, sophisticated codebases) and, just the necessary experience you gain from writing your own.
if you have yet to, read THIS book!
Many C++ interview questions are lifted right out of here, and for good reason. It contains so many pitfalls and good habits.
These are books I read many years ago, they can be helpful but may be dated and will not include newer features. But as an introduction they worked well.
Thinking in C++ Voume 1 and 2 by Bruce Eckel
https://www.amazon.com/Thinking-Vol-Introduction-Standard-2nd/dp/0139798099/ref=dp_ob_title_bk
https://www.amazon.com/Thinking-C-2-Practical-Programming/dp/0130353132/ref=pd_sbs_14_1
And Scott Meyers
Effective C++ - https://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876/ref=pd_sbs_14_2
Effective STL - https://www.amazon.com/Effective-STL-Specific-Standard-Template/dp/0201749629
You could go down two routes IMO: learn some algorithms and data structures, or start working with a more complex domain.
For the algorithms and data structures, this would be mostly stuff you'd learn in a second semester CS program course. In fact, you can work through some of these classes that are open, like the one at Berkeley. Another option is to pick up a good book; I personally love the Algorithm Design Manual. This will give you a really firm foundation on computation (not just programming in Java). It's also great practice for jobs since most interview questions revolve around these concepts.
For a new domain, I'd recommend Android development, since it's all done in Java. There's tons of documentation and resources for that, and loads to learn outside of just programming in Java. Not to mention you can carry around your work in your pocket and show off to potential employers. Aside from that, you can volunteer for an open source project. Apache has tons of projects in lots of languages.
Learn Windows PowerShell in a Month of Lunches is a pretty popular one and has helped me
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=dp_ob_title_bk
I thought so too, until I discovered The Algorithm Design Manual.
So, what about CLR(S) warrants a new edition?
Any great places/sites to buy computer science books? I'm looking for the books Introduction to Algorithms and/or The Algorithm Design Manual as supplementary reading for my algo class.
The algorithm design manual is an incredible resource, check it out!
Here's a great article about interviewing at software companies:
http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
I particularly recommend working through the book he recommends:
http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693
Not only is it a great book for the kind of thinking that you're expected to do in these interviews, but it also has a number of sample interview problems. You may even recognize some of them from your past interviews.
I can't recommend this book highly enough.
Pluralsight has some good videos for the MCSA Server 2012. If you sign up for Visual Studio Dev Essensials, you can get a free 3 months with Pluralsight.
https://www.visualstudio.com/free-developer-offers/
I should add, if you're going for the MCSA cert, I've heard it's Powershell heavy. You can get started with Powershell with Learn Windows PowerShell in a Month of Lunches
I like Skienna; short intro to the theory at the beginning and then it delves into actual algorithms. CLRS is good if you need more theory (e.g. solving recurrences).
It's cliche, but Month of Lunches is great if you're looking for a book. Honestly my advice is to solve problems with powershell. Learn to lean heavily on "Get-Command" and "Get-Help". When someone comes to you with something you would normally use the gui for, just figure out how to powershell it (advice - avoid device drivers)
A key piece of Systems Administration is driving yourself. In many situations you are the bottleneck to other people accomplishing their project or to fixing an issue - this means you need to understand that everyone is going to tell you their thing is high priority because they can't do anything til you're done. As you grow, you'll figure out how to get out of that position (automating pieces is a major part of that) but right now, focus on communicating clearly and honestly. Learn to set expectations - that's more important then any technical skill you can focus on.
I've heard good things about "Powershell in a month of lunches"
http://amzn.com/1617294160
There are two main resources that you will need in order to learn PowerShell; the first is PowerShell in a Month of Lunches (there's a newer version coming soon) and the second is access to people who know PowerShell and can help you, like /r/powershell for example.
Just looking for learning, etc? If it's for interview prep, I'd give different recs.
I highly recommend:
These are both general references, I think there are a lot of syntactic python stuff that are unique and awesome, but algorithm stuff and OOP stuff is kinda language independent.
Boot camps might help teach certain technologies, but they might not help with the fundamentals. Additionally before you give money away try to complete courses on Udemy or Coursera to see if you can commit to the effort.
Over simplified recipe for building skills to transition:
If any buzzwords here might not make sense, congrats you get your first exercise in digging for answers ;) (no rudeness intended)
These are books I actually own and would recommend. Of course there are other great/better books out there, but I'm going to stick with what I've actually bought and read or "read".
I say "read" because several books are NOT meant to be read cover-to-cover. These typically have about 1/3 that you should read like normal, and then skim the rest and know what's in the rest so that you can quickly reference it. These books are no less important, and often even more important. I've marked these kind of books as #ref for "read for reference". Normal books that should be read cover-to-cover are marked #read
For learning your first language: This is really the hardest part and unfortunately I don't have any books here I can vouch for. I started with "C++ for Dummies" and am not including a link because it's bad. Your best bet is probably "Learning <language>" by Oreily. I also love the Oreily pocket books because you can carry them and skim while on the bus or the john, but you can just do the same with your smartphone. Pocket Python, Pocket Java, Pocket C++
Top Recommendations:
Accelerated C++ #read Made for people who already know another language and want to pickup C++. Also great for people who need a refresher on C++. I really like how it doesn't start with OOP but gets you familiar with the imperative parts of C++ before diving into OOP.
The Algorithm Design Manual #ref This is my new favorite book and the first I would send back in time to myself if I could. Each algorithm & data structure is given a mathematical breakdown, pseudocode, implementation in very readable C, a picture (very helpful), and an interesting war story of how it Saved The Day.
Cracking the Coding Interview #read I originally avoided this book like the plague because it represented everything I hate about coding interviews, but many interviewers pull questions straight from this book so this book can equal getting a job. Put that way, it's ROI is insane.
The Pragmatic Programmer #read Must-have for any profressional software engineer that covers best-practices for code and your growth. You can also find the raw tips list here
Head First Design Patterns #read Many prefer the "GoF/Gang of Four" Design Patterns which is more iconic, but Head First is a modern-version using Java to cover actual design patterns used day-to-day by programmers.
For Intermediates:
Effective Java or Effective C++ and Effective Modern C++ #read When you're ready to go deep into one language, these books will give you a huge boost to writing good Java and C++.
Design Patterns #ref You'll want to get this at some point, but early on it's too much for a beginner and many of the patterns are obsolete.
The Art of Computer Programming #ref The programming "bible" but like Design Patterns you should hold off on this iconic book until you've got your basics covered. It would make for a great purchase with your first paycheck or first promotion :)
You usually do see stuff you've never seen before when you're learning something new.
Checkout:
It's going to take some time, so be patient, don't rush yourself. Don't beat yourself up if you aren't learning as fast as you like, it's not a race.
Keep on truck'n!
I purchased the following two books:
I second The Algorithm Design Manual, very good book.
I think that being proficient with algorithms consists of three skills:
And I think that The Algorithm Design Manual is excellent for this, Carmen is more comprehensive but I find it a bit to dry for my taste.
Check this thread for a reading list. IMO, The Algorithm Design Manual should have made the top too.
Mechanical Keyboards: High quality keyboards with tactile feedback. They have a real impact on your typing speed, and also make programming less boring. They are very commonly used by programmers. Mechanical keyboards have different "switches" that make different tactile sounds. "Blue Switches" are considered the most popular. Here are some examples: https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;field-keywords=mechanical+keyboard.
Gaming Mouse: Same usage as keyboards, but not as useful. Its mostly just nice to have.
Textbooks: In computer science, there are one or two textbooks per subfield that are considered to be "Bibles" of the subfield because of their importance. If your bf just started cs, he won't have any interests in any subfield. However, the subfield of algorithms is more or less all encompassing. More crucially, knowledge of algorithms is the most important (and arguably only) thing you need to know to get a job. If you want to work at a top CS company like Facebook or Google, you need to know your algorithms very well in order to pass the interviews. There are two books I can recommend for this:
https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844/ref=sr_1_1?ie=UTF8&amp;qid=1503472210&amp;sr=8-1&amp;keywords=algorithms
and
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_5?ie=UTF8&amp;qid=1503472210&amp;sr=8-5&amp;keywords=algorithms
These are the most prolific algorithms books (imo). Another important book is "Cracking the Coding Interview": https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1503471832&amp;sr=1-1&amp;keywords=how+to+crack+the+coding+interview
This is the "Bible" textbook for passing tech interviews. Every computer science student I know at school has at least skimmed through this book once.
Personally, if I were starting in CS, I would appreciate either the mechanical keyboard or the "Cracking the Coding Interview" textbook the most. Good luck!
what are "game algorithms" and why are they specific to games? What any game programmer needs is a grounding or at least an awareness of algorithms in general, as a means to solve problems.
When it comes to books, I'd recommend The Algorithm Design Manual by Steven Skiena it covers sorting and searching, graphs and graph problems, combinatorial problems, computational geometry, set and string problems, all with well written explanations.
Well, first off, focus on describing the problem out loud, and start with what you are planning to do and why, along with what similar other problems you've seen. I would recommend speaking out loud and writing notes even when you are alone, then putting it down in high level pseudocode, then doing the actual coding.
Another thing I would suggest is starting with the "happy case" (e.g. for something that involves recursion into two subproblems, assume that it is a power of two and the only odd that you will have to deal with is the case with 1 element) leaving out the boundary conditions until the end and mention that, always state your assumptions and then you can go back and fill in the edge cases once you have something that works for the simplest case). If you get stuck or realize why your solution won't work, explain out loud why (or more likely, what your runtime is, and what you would have expected your runtime to be and why, e.g. you are doing another extra loop, but maybe you could do something with memoization or dynamic programming to cut that down due to repeating subproblems). In the actual interview, the interviewer is there to slightly guide you too, so you have some extra resources that you wouldn't on leetcode.
I would personally recommend grabbing a copy of Skiena's The Algorithm Design Manual (https://www.amazon.com/dp/1848000693/) and/or Cracking the Coding Interview (https://www.amazon.com/dp/0984782850/), as they walk you through how to approach the problem, not just show you the answer.
Every algorithms textbook I've read starts with a chapter that involves breaking down algorithm runtime into mathematical terms more specific than Big O (for instance, nested for loops turn into nested sums). Then the mathematical terms are simplified as much as possible and you get something like Runtime(n) = n(n-1)/2. Then you apply the definition of Big O to prove that that's O( n^2 ). The concepts and definitions of Big Omega and Big Theta are also usually brought into the mix as well.
If you want a specific book recommendation, I thought Skiena's Algorithm Design Manual was a good read.
Not that I know much about you, but from your post, it seems like your only option is to bootstrap yourself up the ladder. Given the constraints, you're going to have an uphill battle, but it can definitely be done. I'm not in the same situation as you, but I've been trying to teach myself coding on the side, and I'm starting to see a lot of progress! Admittedly, I went to school for electrical engineering, so I did have a class or two of exposure there, but I was far more interested in the hardware stuff.
Anyway, here's the approach I've been using so far:
Ha, sorry that got kind of pep-talk-ish, but I was getting excited. Anyway, maybe this will be of use to you!
I got my copy off amazon - https://www.amazon.com.au/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=sr_1_1?crid=3E05CQGIIHRNB
As others have mentioned, if you can afford it, TAoCP is definitely a keeper. How much Knuth will ever finish is unclear (he's something of a perfectionist), but it's a classic for a very good reason.
Slightly lower end, two great books are Hacker's Delight and Steven Skiena's Algorithm Design Manual. The latter is an algorithms book beyond the standard CS textbook, covering more exotic things like approximations to NP-hard problems. It's similar (but not identical, so it won't be boring) subject material to that class you link to.
You need this book in your life: https://www.amazon.com/gp/aw/d/1617294160/ref=dp_ob_neva_mobile
https://smile.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/
Throwaway account because I'd rather not have my current coworkers knowing about this.
About a year ago, I heard about Google Foobar from an article on Hacker News. I had never seen that before but it sounded interesting, and I'd always wanted to work for Google (sent my resume some years ago, heard nothing). Long story short, I found a backdoor way into Foobar, and went through the coding challenges until I got past level 3, at which point they ask if you'd like a Google recruiter to contact you. I said yes and gave them my details.
Fast forward to about two months ago. I finally got an email from an internal Google recruiter asking to talk. I freak out a little bit and start madly researching what a first contact entails (as it turns out, just an informal phone call about your career and what you might want to do at Google). During my research I also looked into what the infamous Google technical interviews might look like, and discovered that I needed to brush up on my algorithms and data structures, and fast. I told the recruiter I needed two to three months to prep (this is apparently not too uncommon, thankfully). She said that when I was ready, I should send her my resume and the jobs I'm interested in (probably in the Pittsburgh office so we can stay close to my wife's family), and she'll get the ball rolling. She also mentioned that it's possible that I could skip the standard video tech screen (since they already had a coding sample in the form of my Foobar submissions) and proceed directly to the onsite interviews.
The thing is, I've been primarily doing PHP web development for ages. I've done a bunch of freelance work previously and I've been working for a great startup for the last few years after immigrating to the US from Canada in 2009. But as far as I know, Google doesn't do much / any PHP, and we all know the general opinion on the language. I have, thankfully, done many other languages throughout my career... Javascript (lots), Java (college / some Android development), C++ (in my college days), C (when I was first teaching myself to program in a real language). But my professional experience has been dominated by PHP.
As far as education goes, I have an associate's degree in programming and about two years of a CS program (interrupted to move to the US). I always thought Google had a hard Bachelor's requirement but that's apparently not the case (you just have to show that you have the aptitude, skills, and experience necessary).
My prep so far has been reading through The Algorithm Design Manual (at least the theory part of the book), and more recently, reading through Cracking The Coding Interview and doing the questions, on paper first, and then verifying on my laptop. I am doing these questions in Python, which was the language that I did Foobar in, and probably the language I will interview in. That said, I learned Python for the first time going through Foobar, so I'm far from an expert in the language. I'm doing this prep while managing my current full time job and caring for a four month old, which I wouldn't even come close to managing without my wife's amazing support.
Doing a search here, I found the MIT Hacking a Google Interview site which seems like a goldmine, and Pramp which also seems like a great resource once I'm done with CtCI. Considering Interview Cake but only if people think it's indispensable ($200).
I have about one month left in the original timeframe I gave the recruiter. I am incredibly excited by the prospect and also incredibly intimidated. Do you have any advice for me on how to maximize my chances?
Also, should I apply as a SWE or a SWE-Frontend? My full stack web development experience seems relevant to SWE-Frontend but I don't want to only end up doing frontend work and I don't want it to be career-limiting; I like the backend stuff as well, and I'm definitely not a designer.
Thanks!
Edit: For those looking for the Foobar backdoor, it no longer works. It was a crossword you could solve that randomly generated (easy) CS and crypto clues, and was accessible from an IP apparently found in promos for The Imitation Game, but the crossword entrance has since been shut down. However, I figured out why I couldn't get in through the main method (searching Java- or Python-related CS queries). You have to both be logged into Google, and, crucially, you have to have search history enabled. Once I reenabled search history, the Foobar break-in came right up after a couple Python searches.
Learn Linux
http://linuxcommand.org/tlcl.php
Learn Power shell / BASH
https://www.amazon.co.uk/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=sr_1_1?ie=UTF8&amp;qid=1527669274&amp;sr=8-1&amp;keywords=powershell+in+a+month+of+lunches
Learn Programming in Python
https://www.amazon.co.uk/Python-easy-steps-Mike-McGrath/dp/1840785969/ref=sr_1_1?ie=UTF8&amp;qid=1527669308&amp;sr=8-1&amp;keywords=python+in+easy+steps
I have personally used the Python and the Linux book I highly recommend them.
Would I create new lines below that one for the other OUs?
No, absolutely not. :)
The line I wrote is all you need.I'll try to explain it line by line.
&#x200B;
$data = Import-Csv -Delimiter "," -Path C:\temp\data.csv
This line will import csv data from path C:\temp\data.csv into variable $data and it will use , as delimiter.Run it on your data and then run just $data to check what is inside your new variable.
$OU = ($data | select OU -Unique).OU
This line will select only OU column from your csv data in variable $data and it will select only unique values, so if you have users that are in same OU it will not duplicate it.After you run it check what's inside your variable by call it $OU.
&#x200B;
Now we come to foreach loop.
foreach ($item in $OU) { New-ADOrganizationalUnit -Name $item -Path "dc=contoso, dc=com" }
It does exactly what it say, for each item, value inside variable OU it will run following code
New-ADOrganizationalUnit -Name $item -Path "dc=contoso, dc=com"
So let pretend you have this inside your variable OU.$OU
Finance
Accounting
Sales
IT
Quality
&#x200B;
If we were to ran this code:
foreach ($item in $OU) { Write-Host "test" }
This would be the result in my terminal
test
test
test
test
test
Since we have 5 items inside $OU and command Write-Host "test" will be ran 5 times.
Now if I were to ran this code:
&#x200B;
foreach ($item in $OU) { Write-Host "$item" }
This would be the result in my terminal
Finance
Accounting
Sales
IT
Quality
&#x200B;
It will take each item from OU and output it to terminal.
&#x200B;
I hope that makes it clear for you why all you need is this one line.
New-ADOrganizationalUnit -Name $item -Path "dc=contoso, dc=com"
&#x200B;
If you really want to learn powershell and not just finish you project I strongly suggest this book:
Learn Windows PowerShell in a Month of Lunches
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160
&#x200B;
It's great book, really accessible and written in such approachable way that I guarantee if you finish it, you will understand and know powershell basics. :)
If you are more video guy this is old but great video series that will explain powershell basics.Big plus it's Jeffrey Snover talking about powershell. Can't beat that with a baseball bat :)
https://www.youtube.com/playlist?list=PLyJiOytEPs4etH7Ujq7PU7jlOlHL-9RmV
http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693
I highly recommend the book Learn Windows Powershell in a Month of Lunches.
Powershell is a favorite at my place of work and allows us to automate some pretty fun stuff.. if you get started scripting or have any questions feel free to P.M. me anytime.. as for resources for powershell:
https://leanpub.com/powershell-scripting-toolmaking - PDF
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160 - Book
https://www.youtube.com/watch?v=6CRTahGYnws&amp;list=PL6D474E721138865A - Video
Hope this helps.. :)
You want this
Learn Windows PowerShell in a Month of Lunches
Mersi de raspuns.
Eu ma gandeam ca Unibuc e mai potrivit pt ca la Poli voi face multa electronica si programare low-level si nu cred ca le voi folosi.(btw ce crezi de masterul asta de la unibuc http://fmi.unibuc.ro/ro/pdf/2008/curs_master/informatica/4InteligentaArtificialaEnachescuSite.pdf , e din 2008,nu am gasit o varianta mai buna.Daca voi avea posibilitatea sa fiu acceptat l;a o facultate mai moderna care face cercetare din afara o voi face,dar mai intai trebuie sa capat o diploma din Romania).
Planul meu a fost intotdeauna sa invat singur dar vreau sa fac cercetare/sa fiu angajat asa ca voi face o facultate.
Acum sunt a 10 la intensiv info.Am decis de anul asta ca vreau sa lucrez intr-un fcomp sci field si m-am apucat sa invat dinainte la info,in mare parte C++ si algoritmi ca DivideetImpera.Simt ca programa merge prea incet.Nu stiu nimic despre machine learning(inafara de chestii simple ca si la ce se foloseste) dar mi se pare un field foarte interesant unde contribuirile mele ar putea fi importante.
Va veni vacanta de vara si voi avea mult timp liber si vreau sa ma apuc de machine learning de-acum.Ce crezi de planul asta de invatare?
1-algebra liniara(de la MIT OCW https://www.youtube.com/watch?v=ZK3O402wf1c )
2-Invat despre algoritmi(MIT discrete math si MIT Algorithms sau Algorithms design manual )
3-Invat Python
4-Statitica( de pe KhanAcademy si dupa de pe MIT OCW)
5-Ma apuc de calculus(in a 11-a vom face diferentiale si a 12-a integrale dar ma voi apuca oricum dinainte ca trebuie sa le stiu oricum).Aici nu prea stiu ce va trebui sa invat mai exact.Stiu ca imi trebuie multivariable calculus dar trebuie sa invat integrale si diferentiale inainte?
6-Ma apuc de machine learning-Artificial intelligence:a modern approach si de cursul lui Andrew Ng de la Stanford.
Ce crezi de planul asta?
I don't think either of these will help you become good at problem solving except on a very high conceptual level. Traditional games like those you mention are the inverse of programming. In traditional games you have a fixed measure of success, fixed legal moves, and a finite number of states. In programming you have a nebulous measure of success, an infinite number of things you can solve and an infinite number of states.
If you want to study games, look at them from a high level. What makes them the same? What makes them different? Are there strategies that transcend single games and apply to many?
You can also look for problems that are more open or look deeper into everyday things. Math proofs are a good example, think back to geometry and try to construct simple but sound proofs on your own. Try some problems on Project Euler. Read The Code Book and try to break some ciphers. Look at the objects you come across every day, ask yourself "why does this work the way it does?" and think through all the ramifications (here's one: why do stairwells have a swinging door on the first floor?) Look at the processes you have day to day, how could they be improved? How would you improve them?
I really recommend The Code Book by Simon Singh. Not only is it an amazing history of ciphers and codebreaking, but he gives a LOT of examples and practice material. There's some more challenges on his web site as well.
Depending on age, The Code Book is a very approachable history and introduction to cryptography.
The Code Book. Very entertaining, too.
You might want to check out this guy and his book aptly named the Code Book. I can't speak for it's authenticity and how accurate all the information is, being just an amateur, but it is quite interesting and gave me a nice overview of different secret message writing techniques. Worth a read.
If you like books and are interested in modern cryptography, "Serious Cryptography" was excellent. A more introductory text with historical context is "The Code Book".
I enjoyed Big Bang very much. I have also been recommended here another book by the same author: The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography
Some search terms for how the internet works: Packet switched networking, TCP, IP, SSL.
I don't think I have ever read a book about basic internet workings, the internet is really the best place to read about that stuff (hence the search terms).
Instead I will list some books which look at how we define security and why secure systems fail:
Secrets and Lies is a good primer discussing trust / networks / cryptography and a few other things at a high enough level to be interesting to a lay reader: http://www.amazon.com/Secrets-Lies-Digital-Security-Networked/dp/0471453803/ref=sr_1_4?ie=UTF8&amp;qid=1419753343&amp;sr=8-4
Art of Intrusion is packed full of stories about how systems (computers or otherwise) fail and become insecure: http://www.amazon.com/Art-Intrusion-Exploits-Intruders-Deceivers/dp/0471782661/ref=sr_1_1?ie=UTF8&amp;qid=1419753466&amp;sr=8-1 the sister book Art of Deception (stories about Social Engineering) is also pretty good.
The Code Book, mostly history, but provides a great introduction to cryptographic concepts. http://www.amazon.com/The-Code-Book-Science-Cryptography/dp/0385495323/ref=pd_rhf_se_s_cp_7_RTJS?ie=UTF8&amp;refRID=1RRWWY0RNX7G8HRYPFFS
Hi I'm not sure if these are the books you would enjoy, but I do have a couple of them in my pocket list:
Personally in recent years I'm interested in topics about algorithms/cryptology and economics, so The Code Book by Simon Singh, Fortune's Formula: The Untold Story of the Scientific Betting System That Beat the Casinos and Wall Street by William Poundstone, The Physics of Wall Street: A Brief History of Predicting the Unpredictable by James Owen Weatherall, these are the ones of my all time favorite "history" books about math and science and their applications. : )
I can still come up with another (popular) book, Freakonomics: A Rogue Economist Explores the Hidden Side of Everything, but I didn't really enjoy the book, guess I didn't agree some of the conclusions in that book. But maybe you would find it interesting. :)
Hope this helps! ☺️
There are two basic types:
If you want to enjoy reading about encryption. checkout the book by Simon Singh: The Code Book
The Code Book was really good as well!
As soon as I looked at the image, the first thing that popped into my head was:
"Really useful chart to use against simple ciphers"
Have you read "The Code Book" [1]? Fantastic read :)
[1] https://www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323/
http://www.amazon.com/The-Code-Book-Science-Cryptography/dp/0385495323
The Code Book is exactly what you are looking for. Very fun read, very informative.
Somebody told me, so I'm telling you: The Code Book is where it's at. Very easy to read and understand and will answer your questions.
Off the top of my head:
The Psychopath Test is a wittily written personal study of detecting, treating and (possibly) rehabilitating psychopaths.
The Freakonomics books are written by both an economist and a journalist (so easy to read) and contain slightly left-of-centre economic theories with easy to follow research. These are excellent.
The Omnivores Dilemma is both engaging and though provoking. It's All about the production of food in the modern age. In particular, four different meals.
The Code Book is one of my all-time favourites. As the title suggests it's about all forms of cryptography. If you have a mathematical bent I also like Singh's book about Fermat's Enigma).
I'm also a big fan of Simon Singh's The Code Book because he included ten encoded messages at the end offering a prize to the first person to break them. It took over a year from the book's release for someone to solve them.
There's an interesting book about encryption that I read a few years ago that discusses exactly this. [The Code Book by Simon Singh] (http://www.amazon.com/The-Code-Book-Science-Cryptography/dp/0385495323).
Anyone interested in encryption and how it has evolved should read this book. bobcobb42 is absolutely right, some of the modern encryption techniques such as RSA are near impossible to break if applied correctly. In RSA two very large (the larger the better) prime numbers are multiplied to encrypt data. As long as the prime numbers used to encrypt the data are kept secret then the process of finding those number and reversing the encryption would take many many powerful computers working many many years to break. The reason for this is because to find the original prime numbers that were multiplied to get they key very large numbers would have to be factored, which is very hard to do since their is currently no algorithm that is known to do this.
IIRC the government actually gave the inventors of RSA or Diffie-Hellman, one of the two, a really hard time over their encryption because they couldn't break it so they didn't want it public.
I quite enjoyed The Code Book by Simon Singh. It's a book on cryptography for the layman. Not really about computer science, per se, but it's fascinating and explains a lot about thinking algorithmically.
The Code Book by Simon Singh is a nice, informal introduction to cryptography including modern day cryptography.
ah, yeah they're sorta the same thing.
Two other ideas, if he's into books, If Hemingway Wrote Javascript is an awesome one -- he pairs up like, 100 famous authors with programming languages and writes programs as if he were the author.
Also, The Code Book is really cool too. A really interesting and in depth history of encryption.
The beginning of this video has a good explanation of how public/private key cryptography works, using the analogy of paint colors to show how one way functions make encryption like this possible. The math part is a little rushed, but the first half is a great visual aide.
I recommend reading The Code Book by Simon Singh if you're interested in the history of cryptography in general. The sections on the Enigma machine are fascinating.
RSA and public key cryptography in general are fascinating ideas, and do have tremendous applications to "real life". For an extremely approachable/readable book about cryptography I highly recommend Simon Singh's "The Code Book". It doesn't delve very deep into the technical mathematics of cryptography, but it does do a great job of understanding the basic evolution of codes. ciphers, and cryptography. I wrote my high school IB extended essay on the history of RSA and public key cryptography, and this book was a great source. Again, you would probably get better recommendations for topics if you specified your current grade/level.
this book has great reviews. this guy is a genius.
this
Just one table? Better get a million random numbers in case you run out.
http://www.amazon.com/Million-Random-Digits-Normal-Deviates/dp/0833030477
I’ve had a fun time reading this,
still waiting for the index volume so I can find my favorite parts more quickly.
These are actually the best reviews on Amazon.
Also check out the sequel!
You haven't seen this book yet, then, I'm guessing.
How about this book?
http://www.amazon.com/Million-Random-Digits-Normal-Deviates/dp/0833030477/ref=sr_1_1?ie=UTF8&amp;qid=1289494923&amp;sr=8-1
https://www.amazon.com/Million-Random-Digits-Normal-Deviates/dp/0833030477
One of my faves is the Million Random Digits book.
Oh god. Okay. I feel like I've been preparing for this post my whole life (or at least since I found these awesome things on amazon):
Make sure you read the comments on these amazing, once in a lifetime products!!!
edit: Aww shoot, I just saw you meant for realz. I got nothing, sorry. But still, you'll have a good laugh!
If it's a question of combat, print versions of either A Million Random Digits with 100,000 Normal Deviates (1955) or the full set of The Art of Computer Science (1968 - ...) carry some weight and double up as door stops or steps to reach the higher shelves.
Here's a lot of numbers for you.
A Million Random Digits
If you want a very comprehensive (althought maybe a bit dry) resource on web app security, I recommend The Web Application Hackers Handbook, it covers most of the web security stuff like remote file inclusion, sql injection, csrf xss etc etc.
OWASP Testing Guide
Also check out the Web App Hackers Handbook. This is an extremely handy book to reference to during tests. It would be a good starting point for you to check out.
Hacking: The art of exploitation
The Web Application Hackers Handbook
The Tangled Web: A Guide To Securing modern Web Applications
The Hacker Playbook 2
The Hacker playbook 3
Black Hat Python: Python Programming for Hackers and Pentesters
> Ps; anyone know of a good recommendation on how to start on web apps on the labs. Looking for a good book or resource.
The OSCP web app portion is good, but if you're like me you might benefit from some supplemental materials. Not necessarily specific to the course, but I found these resources really helpful for working on my web app skills
Hope that helps! :)
Some great resources are The Web Application Hackers Handbook. It's a long read but very in-depth. Link
If you want to practice as you read look into Damn Vulnerable Web App (DVWA) [Link] (http://www.dvwa.co.uk/), Pentester Lab challenges [Link] (https://www.pentesterlab.com/), bWapp. Learn how to use tools like Burp, ZAP, sqlmap, and BEEF (among others).
I've also heard that Security Tube has a lot of great videos but I haven't checked it out personally yet.
As for fundamental knowledge, you'll need to understand how the web and web applications work. Things like HTTP/HTTPS, HTTP methods, forms, Javscript, sessions, cookies, databases. Also about application input, application frameworks, application firewalls. If you don't have any programming experience, you should start learning some fundamentals to understand application logic and structure. This can help you think of assumptions that developers made and how you might be able to bypass or work around those assumptions to do things that weren't intended or anticipated.
I don't know if you're specifically interested in learning about the security and security flaws of web apps specifically, but I would definitely recommend The Web Application Hacker's Handbook as it's an amazingly thorough guide on vulnerabilities.
Typically you start testing sites by using a security toolkit underneath your browser, such as Burp Suite. I don't do much of this stuff myself so hopefully this'll get you started.
Also /r/howtohack might be helpful, along with this thread to find some good hacking practice (DONT hack sites you don't have permission for)
Good luck!
Penetration Testing: A Hands-On Introduction to Hacking by Georgia Weidman is similar to the OSCP syllabus and a good introduction.
The Web Application Hacker's Handbook: Finding and Exploiting Security Flaws 2E is the web application hacking bible.
Don't take any shortcuts, if you don't understand any topics read around them and make sure you do - that is usually a good start.
When i was in the process of applying for Matasano Security, they had me read this book and said it covered web security (fit application security is your thing): http://www.amazon.com/The-Web-Application-Hackers-Handbook/dp/1118026470
The web application hacker's handbook is an excellent book for web applications pentesting. https://www.amazon.com/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470
What kind of coding, and what are you interested in regarding security exactly? I would brush up on some python personally.
If you are inclined to read, I think the following are essential.
Just do your degree and start exploring ethical hacking, get involved with community.
Personally, I think great ethical hacker needs great understanding of networking, assembly, and OS, all of which you can learn in UofT.
These 3 topics are critical, you actually need to understand how to find vulnerabilities to be great in cybersec.
Also, start attending https://www.defcon.org
This book has been recommended to me as a high level introduction: https://www.amazon.ca/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470/ref=pd_lpo_sbs_14_img_1?_encoding=UTF8&amp;psc=1&amp;refRID=195742DY502NMJ1N4JBT
Also, install cali linux and get some introductory level book on it.
Source: worked for a cyber sec in one of the Big4, worked with ethical hackers, and helped them with security scanning.
I've had this bookmarked forever (Probably linked to from here)
http://www.irongeek.com/i.php?page=videos/web-application-pen-testing-tutorials-with-mutillidae
I have no comments on the quality of the information, it's been on the master to-do list for damn near ever.
If you want to spend some money there is also http://www.amazon.com/gp/product/1118026470/ref=ox_sc_sfl_title_2?ie=UTF8&amp;psc=1&amp;smid=ATVPDKIKX0DER
(again, it's been mentioned here, and again, can't say anything about it personally, master to-do list)
Start playing around with:
http://www.dvwa.co.uk/
http://sourceforge.net/projects/metasploitable/files/Metasploitable2/
https://www.owasp.org/index.php/OWASP_Broken_Web_Applications_Project
Download some of these:
http://vulnhub.com/
Get yourself a copy of:
http://www.amazon.co.uk/gp/product/1118026470/ref=pd_lpo_sbs_dp_ss_1?pf_rd_p=569136327&amp;pf_rd_s=lpo-top-stripe&amp;pf_rd_t=201&amp;pf_rd_i=0470170778&amp;pf_rd_m=A3P5ROKL5A1OLE&amp;pf_rd_r=0VDGSR97R5Y5N3SS6QTB
You don't need courses to learn
Thanks, what do you think of this book?
http://amzn.com/1118026470 (Web Application Hacker's Handbook 2nd Edition)
JavaScript & jQuery: Interactive Front-End Web Development by Jon Duckett. I don't know what more you could ask from a beginner's JavaScript book. It doesn't read like a textbook, but instead contains full-color illustrations, analogies, syntax breakdowns, and examples with each new topic introduced on a new page. This is the most "modern" feeling programming book I've ever looked through. Just really good content for beginners presented in an attractive and clear fashion.
http://www.amazon.com/JavaScript-JQuery-Interactive-Front-End-Development/dp/1118531647/ref=la_B001IR3Q7I_1_2/187-4834899-6907722?ie=UTF8&amp;qid=1371960862&amp;sr=1-2
It could be non-religious related.
What materials/methods are you using to learn JavaScript?
I'm a web developer and there are times where I find myself struggling to learn something. I've noticed I do a lot better with videos than reading a book. I also do better with some book/video authors than others. It's nothing personal to those authors, it's just like high school sometimes you do better with a particular history teacher than another one.
I'd suggest trying the trial versions of different video services. You might want to look into Safari books online. For $15 a month you can rent up to 5 books. You could try out other authors and see how it goes.
I'd also recommend this book:
http://www.amazon.com/JavaScript-JQuery-Interactive-Front-End-Development/dp/1118531647
Jon Duckett is a really awsome writer!
JavaScript & JQuery: Interactive Front-end Web Development I have been working through this and its quite good. Well structured and designed, so it isnt just a wall of text.
Jon Duckett, who wrote the HTML & CSS book you bought (which is the best in my opinion) also just released his JavaScript book, which I am excited to read. Once you get a grasp on it, I would read JavaScript The Good Parts, by Douglas Crockford, who works for ECMA and helped write the language.
Just read Jon Duckett's new Javascript book and this was a good gauge for how much I learned. Thanks!
I just chose some books that looked good from this list and this one.
The one's I got:
Clean Code
(already read)
Cracking the Coding Interview
Code Complete
Peopleware
Don't Make Me Think
Code (currently reading)
Regular Expressions Cookbook
Head First Design Patterns
C++ Primer
Working Effectively with Legacy Code
Elements of Programming Interviews in Java
The Mythical Man-Month
The Design of Everyday Things
JavaScript and JQuery
I figure that's enough reading material to last me until I graduate.
This is a good book for that. There's also many tutorials online, googling will help you out, and check Codepen.io as well.
Hey there! I recently finished this course and also recently got my first offer for a Jr. Front-End Developer role after about a year and a half of self-study. Colt's course is awesome, and I found it to be the best single resource on web development I encountered. So I think you've picked a really good place to start. But, that being said, it is just a starting point (even a full-time $10k boot camp is just a starting point), and you probably will need to look into other resources as well.
I will second what others have said that I found the Rob Percival course underwhelming, but there's a lot of other stuff out there that I would recommend. Note: I'm going to go a bit link crazy here, and I know that might seem a bit overwhelming, but I'm figuring it's better to give you more rather than less; your mileage may vary, and you may not need all of these. These are just the resources I found most helpful.
Free Code Camp is a great place to find practice problems to work through, mainly when it comes to front-end. I can't stand using it end-to-end as a learning path, but others love it. So, different strokes and all that.
CSS Tricks is a really great blog and site for learning how to do advanced CSS stuff. And the site founder Chris Coyier, also hosts a really great podcast called Shop Talk that's all about front end.
John Duckett's books HTML & CSS and JavaScript & JQuery are really pretty and very noob friendly. The JS one does have some errors, so be wary of that, but I found it really helpful for getting a sense of the underpinnings of the language while reading on the train.
You Don't Know JS Is a great book series that is all available online for free and will really help you solidify your JS knowledge.
JavaScript: Understanding the Weird Parts is another Udemy course that does a deep dive of JS (Udemy always has sales, by the way, so never pay full price for their courses).
JavaScript Design Patterns is a free course on Udacity that is super helpful in introducing you to JS frameworks and MV* design patterns. Note that, while you can pay to do a "Nanodegree" through Udacity, you can also access a lot of their courses for free, so I would recommend trawling through them--there's a lot of good stuff on there.
JavaScript 30 is a 30-day structured course in building stuff with vanilla JS by Wes Bos, who has a lot of other good courses as well (though some of them are paid).
Practical JavaScript This is one I've actually just started working through, but so far, I'm really enjoying it. Again, this is free. It will introduce you to test-driven development and give you a better sense of how to plan your own projects, while also not getting mired in any frameworks.
If you want to go into the bowels of the framework world, though:
The udemy course I did first for React/Redux now seems to have been taken down by its creator so that he can update it. But it was called The Complete React Web App Developer Course by Andrew Mead, and when it comes back in updated form (hopefully soon), I would definitely recommend it. If you like Colt's teaching style, Andrew's has a lot of the same feel (excited, but really detailed explanations, and goes over things 50 times in different projects and contexts so that you really learn them). I've also started doing Stephen Grider's Modern React with Redux, and it seems really good so far (though I'm not that far into it, so take it with a grain of salt).
React Fundamentals is another awesome free course by one of the developers of react-router.
Html & css:
https://www.amazon.com/HTML-CSS-Design-Build-Websites/dp/1118008189
Also I assume you mean Javascript? Otherwise that's a pretty odd combo. A good Javascript book is this one by the same author:
https://www.amazon.com/gp/aw/d/1118531647
Used both of these for school. Very easy to read and surprisingly comprehensive. Very pretty as well
PS: people don't generally call html and css programming languages
If you're just interested in learning for yourself, don't take it at ASU. It'll be cheaper and you'll probably learn more through other resources. Here's one put together by the University of Michigan on Coursera: https://www.coursera.org/learn/introcss
Or, you can do it the old fashioned way and pick up a book. This one, in particular, is very good.
https://www.amazon.com/HTML-CSS-Design-Build-Websites/dp/1118008189
After you get through that book pick up the Javascript and JQuery one (same author):
https://www.amazon.com/JavaScript-JQuery-Interactive-Front-End-Development/dp/1118531647/ref=pd_sbs_14_img_2?_encoding=UTF8&amp;psc=1&amp;refRID=72Z6B7X975GSJ4VVAZG9
Thanks for the fun contest!
I think JavaScript is the way to go as well. Start with just plain vanilla and then go from there!
I would do the JavaScript course on codecademy (I would dabble with every language they offer too!) and then move on to this book (you can also find it for free).
Just an idea... You could love or hate web design. Who knows! But you have to start somewhere and start narrowing things down while learning general programming structures. Almost everything you learn at first is transferrable to other languages.
A friend who is learning JavaScript got this book I skimmed through it, I wish I had something like it when I learned JavaScript or programming!
You keep saying "A+ exam" in your post so I hope you are aware that there are actually 2 exams you have to pass to get the A+ and they must both be from the same series. Be sure to look over the exam objectives (listed here and here) and keep in mind that you only have 9 days as of today (21 June 2016) to pass both exams before they expire and the 900 series takes full effect. If the classes you mentioned don't start until fall semester you may as well start studying for the 900 series exams instead and give yourself some time. I highly recommend The All-In-One Comptia A+ Certification Exam Guide by Mike Meyers and Professor Messer. They're fairly easy exams but they're not that easy and they included a few topics I hadn't been exposed to before I started studying for them.
If you're looking for something textbook-y, the Mike Meyers A+ Certification guide is very all-encompassing: http://www.amazon.com/dp/125958951X
It's more than just hardware though. Windows, networking, troubleshooting, even printers and cell phones.
Is that the sort of thing you had in mind, or something else?
I started reading the course material for CompTIA when I started looking at getting into IT but never got round to the exam. There was a fair amount of good stuff in the book I was reading, also a lot about stuff you really didn't need to know (like the max voltage of an IBM PCXT power supply from the last millennium).
If you are someone wanting to get into IT at ground level, with minimal working knowledge of a helpdesk, troubleshooting process or how IT as a field hangs together, I'd recommend at least reading the course material for CompTIA, then if you're still keen, do the exam, if nothing else it shows willingness to learn to an employer. After that look at the Networking+ and Security+ qualifications, or a Microsoft accreditation. Anything Office 365 these days is a licence to print money if you're looking to contract as an IT person (here in the UK as of the last 2 years or so at least).
This was the book I read, though that was about three years ago: https://www.amazon.co.uk/dp/125958951X/ref=cm_sw_r_cp_apa_R30vxbJ3FQJT2
Been in IT for just over three years, currently 2nd/3rd Line Engineer/Consultant and looking to go contracting in the next year. Any queries, let me know.
Hi, All of those things are an excellent start, but I think you need more. Do the free practice tests on the Exam Compass site (http://www.examcompass.com/comptia/a-plus-certification/free-a-plus-practice-tests). Some of their questions are VERY picky, but overall they're good prep. Do the tests on the Crucial Exams site, too (https://crucialexams.com/exams/comptia/a+/220-901/). See if your library has the new Mike Meyers book (http://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X). Go through the questions at the end of each chapter. Use the CD that comes with the book as a source of more questions. Good luck to you!
http://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X
Mike Meyers A+ 901 edition
https://www.amazon.co.uk/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X/ref=sr_1_1?ie=UTF8&amp;qid=1463150745&amp;sr=8-1&amp;keywords=mike+meyers
As for the courses it's up to you. I'm going to take the 901 next week and I self studied using Messer, Myers, and practice tests.
I really enjoyed this book while studying for my A+ certification:
https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X/ref=sr_1_1?ie=UTF8&amp;qid=1495120816&amp;sr=8-1&amp;keywords=a%2B
Even if you don't go for the cert, it is still a very good read, as it basically covers a little bit of everything from networking to hardware to Windows. It is pretty long @ about 1600 pages (about 1300 main material), but if technology is something that interests you, you will enjoy it. And if you are able to absorb everything from the book and have the extra cash, you might as well take the exam and have an A+ certification to put on your resume.
This is what you need. CompTIA A+ Certification All-in-One Exam Guide, Ninth Edition (Exams 220-901 & 220-902) https://www.amazon.com/dp/125958951X/ref=cm_sw_r_cp_apa_47KnzbN70YMGA
it's good for getting your foot in the door as a basic repair tech or helpdesk.
AFAIK Mike Meyer's book has been, and still is, the gold standard for books:
https://smile.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X/ref=sr_1_1?ie=UTF8&amp;qid=1497277667&amp;sr=8-1&amp;keywords=mike+meyers+comptia+a
Woof, that's a whole lot of questions, here's some answers!
https://www.reddit.com/r/CompTIA/comments/9yieto/general_exam_tips_and_tricks/
Me personally, don't look at the whole of the cert, it's a mountain, take it one step at a time.
Also, the current edition of the A+ is going to be replaced shortly(start of the year) and there is a grace period of about 6 months. I would very much focus on the new edition, the 1001 and the 1002. My philosophy is this, whatever new stuff shows up on the 100x, you can't change the info you learn from the 90x series. a USB port on the 90x is going to be the same on the 100x, understand? https://certification.comptia.org/certifications/a#buyoptions
Also, just review some of the free options for study, but be prepared to throw some money out there for study materials https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X/ref=sr_1_1?ie=UTF8&qid=1542683036&sr=8-1&keywords=mike+meyers
CompTIA A+ Certification All-in-One Exam Guide, Ninth Edition (Exams 220-901 & 220-902) https://www.amazon.com/dp/125958951X/ref=cm_sw_r_cp_apa_i_k6t2Db13MHWWP
If you can get your hands on a PDF of this guys text, you'll be glad to did. Well written, well structured, easy to digest and thorough.
I've only passed the 901 and putting the A+ on my resume as "in progress" (listed it literally as "Certifications: CompTIA A+ (in progress)") has already gotten me a possible job opportunity. Guy knew right away what that meant and he just asked when I planned on taking the 902.
So yeah it'll definitely help with getting hired.
As for studying, look over the exam objectives and see how much of it you know. If it's less than half, buy the Mike Meyers book and read it front to back. If it's more than half, buy the Pearson ExamCram book and read that instead. Watch Professor Messer's videos in either case and use CrucialExams, ExamCompass, Professor Messer, and ExamCram practice tests. ExamCram had questions most like the ones on the actual test, ExamCompass is the hardest, and Professor Messer's pop quiz collection is the one that gave me a score closest to what I actually got (846 on the real 901 exam, 847 adjusted from a percentage on Professor Messer's pop quiz collection).
Good luck.
https://www.amazon.com/dp/125958951X/ref=cm_sw_r_other_apa_ap8yyb8SMDVVZ
The CompTIA A+ All in one exam book is what helped me when I took the older versions (https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X/ref=sr_1_1?ie=UTF8&amp;qid=1479940713&amp;sr=8-1&amp;keywords=comptia+a%2B) It's $35 for it new, but if you can find a used copy for cheap, go for it. You'll want to supplement your learning between the Professor Messer videos (which are free) with a good certification book such as the one I mentioned.
Since it is a 2-part exam, this will mean you will need to purchase 2 exam vouchers. I know usually on Professor Messers website, he will have discount codes you can use to take off a bit of the cost towards the voucher. The vouchers are what really make it pricey, which is why I strongly urge that you really make sure you are ready for the exams before you go and take them since they are not refundable.
Congrats in advance on having a kiddo and good luck with your studies. This subreddit is pretty great to ask questions and get studying advice.
Awesome! I'm feeling more and more confident about this now! I'll most likely attempt a networking certification through CompTIA as well, but later on. I believe you're referring to the book that I saw on Amazon:
CompTIA A+ Certification All-in-One Exam Guide, Ninth Edition (Exams 220-901 & 220-902)
https://www.amazon.ca/dp/125958951X/ref=cm_sw_r_cp_api_nTIlybCJWQ4J1
It's the one I was considering buying, but I saw 2015 somewhere on the page and didn't know if it was still applicable.
A common study tool is the Meyer's book. https://www.amazon.com/CompTIA-Certification-Guide-220-901-220-902/dp/125958951X/ref=sr_1_1?ie=UTF8&amp;qid=1526814491&amp;sr=8-1&amp;keywords=Mike+Meyers+a%2B
This looks, verbatim, like the CompTIA A+ certification study guide, and I strongly recommend picking up one of these: CompTIA A+ Certification All-in-One Exam Guide by Mike Myers - I used an older edition a few years back before I took and passed the cert, and it was all I needed. This looks like an outline of this book for sure and will help you in this endeavor.
Good luck!
The Mike myers book is great if a bit wordy and half the price.
Not sure what the difference is per say but I have this one:
https://www.amazon.com/gp/aw/d/125958951X/ref=mp_s_a_1_1?ie=UTF8&amp;qid=1517975927&amp;sr=8-1&amp;pi=AC_SX236_SY340_QL65&amp;keywords=a%2B&amp;dpPl=1&amp;dpID=51Vogw4seHL&amp;ref=plSrch
I'm around 880 pages in of 1288 and I liked it pretty well it's just A LOT of material.
The disc questions are lame...they try to force you to buy stuff they are just sample stuff. The key to the disc however is that it includes a free copy of the entire book on PDF! I put the disc in and put the book on a flash drive to read at work during lunch. So it works out that I didn't buy a ebook version.
I would also suggest to go to udemy and buy his lectures they're for the 901 and 902...they should be $10 each and they complement the book perfectly....they like overview each chapter.
Once I finish the book I plan to rewatch the videos on udemy as a refresher as well as watch professor messer videos.
http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
PowerShell isn't really that bad once you get the hang of it.
http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080/ref=sr_1_1?ie=UTF8&amp;qid=1370231896&amp;sr=8-1&amp;keywords=powershell+in+30+days+of+lunches
That's the one, I think. It's good.
this is what i read through and it helped me out
http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1462150872&amp;sr=1-1&amp;keywords=learn+powershell+3+in+a+month+of+lunches
http://www.amazon.com/Windows-PowerShell-Action-Second-Payette/dp/1935182137/ref=sr_1_1?ie=UTF8&amp;qid=1462150962&amp;sr=8-1&amp;keywords=powershell+in+action
I would suggest that you look at this book: Learn Windows Powershell in a month of lunches
It really helped me when I was starting out. As for what you are trying to do, I prefer the output using Quest AD tools for Powershell. They have a lot of really nice AD cmdlets. This would do it for you:
Get-QADGroup | export-csv C:\location\filename.csv
edit for typo
If you are looking for an actual book, check out "Learn Windows PowerShell in a Month of Lunches"
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
That's come up more times in various IT forums. The link I posted had the video version by the same author. I am going to get started on this myself. I know enough to get by, but think it will be good to go through the entire thing.
Glad to hear! If you want to learn more PowerShell, grab this book. It's becoming a standard read for new hires at my office.
There's a menu to the right of this subreddit with various links and book recommendations. You'll need to be on desktop version of the reddit website to see these though.
Personally I really like the Getting started with PowerShell 3.0 Jump Start.
Most will recommend the Learn Windows PowerShell in a Month of Lunches book.
Also, it would be wise to grab the "Learn Windows PowerShell 3 in a month of lunches" at some point in the near future if you're going to go down the PowerShell path. Doing so is of course recommended, as most everything Microsoft has been releasing over the last few years has had management based on PowerShell to be as close to, or at parity with, the UI management tools.
The Powershell class i'm taking right now uses this book: http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
It does a good job explaining the how things work.
It took me a while to get good at PowerShell and I had a pretty extensive programming background prior to trying to learn it.
The Exchange cmdlets are also less than ideal when trying to learn... but it was also my first experience with PowerShell. They're usually pretty slow to run and aren't great from a syntax standpoint. The AD and file system cmdlets (
Get-ChildItem
/Get-Item
) are more consistent, faster, and generally easier to work with.Trial and error, as well as looking at code examples on /r/PowerShell is the way I ended up learning. You'll notice on /r/PowerShell people usually post very different ways of solving a problem and one isn't necessarily better than the other, but just use different features or logic.
PowerShell in a month of lunches is usually the recommended book / guide.
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
https://www.youtube.com/playlist?list=PL6D474E721138865A
My advice would be to get this book.
hmmm...I grew out of that position this past year. It was similar in scope to yours. In your position I highly recommend going desktop infrastructure. Studying for it will allow you to at the very least have a clear understanding of the latest technology available to you for architecting desktop solutions. However, it's not enough to know just that. Here's some advice:
check out this book
Learn Windows PowerShell 3 in a Month of Lunches
http://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
Learn Windows PowerShell in a Month of Lunches!
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617291080
https://www.educational-business-articles.com/5-step-problem-solving/
Okay. A lot to go over here. I work with both linux/windows to various degress, so Im glad to address it:
>My issue is if you're doing any sort of system administration work, typing out PowerShell's commands is going to get hella annoying. Would you rather type two characters, or thirteen every time you wanted to use a command?
Tab complete is a thing for powershell. Just typing "ge" and hitting tab will cycle through all of the "get-xxxx" commands in alphabetical order. If you can get to "get-h," its much faster to hit the command you want. Powershell gives up a few more keystrokes for much, much more accessibility. It also has heaps of default alias's and the ability to set new ones like bash, so its really just a matter of learning them or setting them to speed this up for experienced users.
>I am not entirely sure what you mean by this. Firstly, as far as I can tell the built-in help to each cmdlet is lackluster. ("get-childitem -?" for instance, compared to "ls --help") On Windows with -? it lists only the syntax and aliases, with no further explanation of what each parameter is
I see where this is confusing form a unix perspective, but you've barely scratched the surface of the powershell help syntax. Thats okay, it generally something people learn about only during dedicated study. "help command" is the correct syntax for the help files in powershell, but the help command itself has modifiers. Try -examples for a long list of the command used in context, or --full for every detail about the commands use. You can also use --showwindow to pop out the -full in a different and easier to search window.
Not only that, but each help command shows you a couple of contexts about what parameters the command can take, and in what contexts. For example, here is the syntax of get-childitem:
Get-ChildItem [[-Filter] <String>] [-Attributes <System.Management.Automation.FlagsExpression
1[System.IO.FileAttributes]&gt;] [-Depth &lt;UInt32&gt;] [-Directory ] [-Exclude &lt;String[]&gt;] [-File ] [-Force ] [-Hidden ] [-Include &lt;String[]&gt;] -LiteralPath &lt;String[]&gt; [-Name ] [-ReadOnly ] [-Recurse ] [-System ] [-UseTransaction ] [&lt;CommonParameters&gt;]<br /> <br /> Get-ChildItem [[-Path] &lt;String[]&gt;] [[-Filter] &lt;String&gt;] [-Attributes &lt;System.Management.Automation.FlagsExpression
1[System.IO.FileAttributes]>] [-Depth <UInt32>] [-Directory ] [-Exclude <String[]>] [-File ] [-Force ] [-Hidden ] [-Include <String[]>] [-Name ] [-ReadOnly ] [-Recurse ] [-System ] [-UseTransaction ] [<CommonParameters>]I realize the above doesn't mean much to a layman, but the format is consistent in each powershell command, which count into 500 or so defaults, with a few thousands mixed in with the more specialized modules for things like SQL. The above tell you required parameters, ones you can optionally add, and what kind of input each parameter needs. It shows which parameters need to be strung in a specific order, and what are okay to add anywherfe. Its full of information that you get immediately when you run "help command."
>For further explanation it looks like the proper method is to use "get-help get-childitem" in which case, the help files are not installed by default (at this point I couldn't be bothered, but I noticed there was a -online option which pops open a web browser which is convenient).
Yes, you do need to run update-help on a new install, or periodically, but thats a good thing. It means the help is actively updated, not written in 1986 and left alone as "good enough." Automate that help update and you will never have to think about it. Or, you can do what you did and immediately get the most updated help from inside the console, not googling around and hoping you run into the right info.
One other great thing about powershell help? There are accepted formatting standards in the community. When you start writing your own powershell modules (which are basically unix tools) you can add all the above syntax and expected info into the command in an easy way. This means that even third party tools have this kind of info.
>But for commands you use frequently, you will know which parameters to pass and you're done rather quickly such as "alias dir="ls"" versus "New-Alias -Name "ls" Get-ChildItem"
I see how the above would annoy you, but i bet it was easy to find out how to make a new alias in powershell. You could even just do "new-alias "alias" new-alias" and from now on you can use "alias" if you want. Its also incredibly easy to explort/import these alias's into powershell with, you guess it, "export-alias" and "import-alias". Basically, you setup alias's once in powershell, just like in linux, and its equally easy to move them around as needed.
>Unix commands e.g. "man", "vi", "less" generally share common commands. E.g. for moving between lines or pages, quitting, or searching for text.
Key word above is generally. Its completely arbitrary. Powershell? Always uses the same conventions.
>Unix tools are designed in bite-sized pieces so they can be chained together
Piping and bite- sized tools are 100% a thing in powershell as well. You can pipe sort commands from select commands, move the text around, invert it, compare it to other text files, what have you. It different philosophy than unix, as unix manipulation is text based, and powershell is object based, but the end result is the same. Still, each cmdlet does only what it does. You string them together to get results, same as bash.
Another powerful thing about powershell? Almost all of Microsoft GUI products like exchange/AD/whatever actually just run powershell commands in the background. It means that each of there products, whatever they are, can all be automated with this same syntax. Once you learn how powershell works, you gain full control of every suite in their ecosystem. There isnt a comparsion for that on the linux/bash side of the aisle.
I dont defend most of what Microsoft does, but powershell is a powerhouse. If you want to learn more, the veritable powershell bible is "Learn powershell in a month of lunches" by Don jones. If you follow along just to this book, you'll put most windows administrators to shame with what you can do.
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=sr_1_1?ie=UTF8&amp;qid=1499701751&amp;sr=8-1&amp;keywords=powershell+in+a+month+of+lunches
"how can I learn to script powershell without having the basics for syntaxes"
honestly, i think if you try going this route, you're going to wind up very frustrated. you really ought to start with the basics. you can't just jump straight to the "knowing" part -- have to go through the process of learning before you get there. crawl before you can walk, and all that.
i bought myself a copy of "Learn Powershell in a Month of Lunches" (amazon link: https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/) and i like it. many people here on /r/sysadmin recommend it, as well. i would start there to build a good foundation. one of the earliest things the book teaches you is how to use powershell's built-in help and how to read error messages and such, which will become extremely helpful when you do get to the point where you start writing scripts.
buy that book, and/or ask your supervisor to buy you a license to a training site like CBT Nuggets or PluralSight. some people prefer videos and narration over books, but find what works for you, and remember to start with the basics and move up from there.
Agreed. OP, you nee to take some time and learn powershell - you can certainly do all the tasks that you listed in your post, but again, you need to learn the basics. I suggest starting with this book. Best of luck.
https://www.amazon.com/Learn-Active-Directory-Management-Lunches/dp/1617291196/ref=sr_1_1?ie=UTF8&qid=1541159458&sr=8-1&keywords=active+directory+in+a+month+of+lunches
&#x200B;
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=sr_1_1?ie=UTF8&qid=1541159482&sr=8-1&keywords=powershell+in+a+month+of+lunches
The book "Learn PowerShell in a month of lunches" is a great first read!
https://www.amazon.com/Learn-Windows-PowerShell-Month-Lunches/dp/1617294160/ref=asc_df_1617294160/?tag=hyprod-20&amp;linkCode=df0&amp;hvadid=312091457223&amp;hvpos=1o1&amp;hvnetw=g&amp;hvrand=4435694643250366932&amp;hvpone=&amp;hvptwo=&amp;hvqmt=&amp;hvdev=c&amp;hvdvcmdl=&amp;hvlocint=&amp;hvlocphy=9002018&amp;hvtargid=pla-406163967273&amp;psc=1&amp;tag=&amp;ref=&amp;adgrpid=62820903995&amp;hvpone=&amp;hvptwo=&amp;hvadid=312091457223&amp;hvpos=1o1&amp;hvnetw=g&amp;hvrand=4435694643250366932&amp;hvqmt=&amp;hvdev=c&amp;hvdvcmdl=&amp;hvlocint=&amp;hvlocphy=9002018&amp;hvtargid=pla-406163967273
Not really fair to link to a PDF copy of the book. It's a fantastic book and worth purchasing and supporting the author.
It can be purchased on Amazon
The Unix and Linux systems administration handbook is also worth it’s money. https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057
If you are doing more with virtualization and automation have a look at vagrant, it will help you get an environment up and running quicker.
As soon as possible also try out other virtualization stacks as kvm, xen and lxc. These are some of the most used and free ones. VMware is the paid contender in most places.
Last time I remember leafing though this guy it was still very relevant.
It's a lot of basic UNIX/Linux nuts and bolts stuff.
Two books
I recommend this book to everyone I taught Linux to. As some people have already commended on learn to program first. Linux knowledge will come.
http://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057
I hear good comments on this book:
Linux Administration Handbook
or
UNIX and Linux System Administration Handbook
A few of my favorite books I reference and recommend. Just a note, many of these are older and can be purchased used for much less. Also if you can afford it, get a Safari subscription. I use my work Safari subscription but this alone has saved me from my book buying habit. Now I only buy "must have" books. :)
Official Ubuntu Server book - I really like this book as the writing style helped me "get it" with Linux. Kyle Rankin has a very good method of showing you the technology and then a quick run down to get the server working, followed by some admin tips. It's a just scratching the surface type of book but it's enough to get you started. I rarely use Ubuntu now, but this book helped me understand DNS and other topics that were IMHO harder to grasp from other books.
As a bonus, this book also has an entire chapter dedicated to troubleshooting. While this sounds obvious, it's a great read as it talks about dividing the problem, how to approach the facts, etc. Stuff a seasoned admin would know but might be hard to explain to a new admin.
The Linux Command Line: A Complete Introduction - You can read this book for free on the site, but having a paper copy is nice. As mentioned, you should have a very solid understanding of the command line. In my experience, I have seen co-workers struggle with basic shell scripting and even understanding how to make a single line for loop. This book covers the basics, moving to shell scripting and I think it's a good solid reference guide as well.
DevOps Troubleshooting: Linux Server Best Practices - This book is referenced a few times here but I'll throw another comment for it. Another book from Kyle Rankin and has the same straight to the point writing style. It's very quick reference and simple enough that you could give this to a new sysadmin and he or she could get started with some of the basic tools. While the book covers a good selection of basic services and tools, it's easy to get deeper into a chapter and find it's only discussing a handful of troubleshooting steps. The idea with this book is it's a quick reference guide, and if you want to get deeper into troubleshooting or performance, take a look at other books on the market. Either way, this is a great book I keep on my desk or reference through Safari.
UNIX and Linux System Administration Handbook (4th Edition) - Another popular book based on the comments here. This is a pretty big book, thin pages, but it's like a small brick of UNIX/Linux knowledge. While it's starting to get dated, it does give a great reference to many topics in the system administration world. The chapters can dive deep into the subject and offer more than enough information to get started but also understand the technology. The e-mail chapter I thought was great as well as the DNS. I think of this book as a overall guide and if I want to know more, I would read a book just on the subject, that's if I need more information. One thing to point out is this book makes use of different OS's so it's filled with references to Solaris, different UNIX versions, etc. Not a problem but just keep in mind the author may be talking about something outside the scope of vanilla Linux.
Shell Scripting: Expert Recipes for Linux, Bash and more - I found this book to be a good extenstion of the Linux Command Line book, but there are many many other Bash/Shell scripting books out there. The author has many of the topics discussed on his site but the book is a good reference for scripting. I can't stress enough how important shell scripting is. While it's good to know a more formal language like Python/Perl/etc, you are almost certain bash will be on the machine you are working on.
Systems Performance: Enterprise and the Cloud - I can't comment on this book beyond the first chapter, I'm still reading it now but it's reading similar to Brendan Gregg's site, and that's a great thing. If you don't know who this guy is, he's one of the top performance guys in the Solaris and now Linux world. He has some great infographics on his site, which I use for reference.
Use method for Linux
Linux Performance
Example of Linux performance monitoring tools
Hope this helps!
I recently got a job as a junior admin and found Unix and Linux System Administration to be really good. There is also a nice CBT Nuggets series on Linux which is a great overview, especially when watched while reading LPI Linux Certification in a Nutshell as the book complements the videos.
If he already knows another programming language Dive Into Pythion is great for getting up to speed quickly.
https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1473533950&amp;sr=1-1&amp;keywords=unix+and+linux+handbook
I think you meant this book.
>Information in this book generally applies to all of our example systems unless a
specific attribution is given. Details particular to one system are marked with the
vendor’s logo:
>Ubuntu® 9.10 “Karmic Koala”
>
>openSUSE® 11.2
>
>Red Hat® Enterprise Linux® 5.5
>
>Solaris™ 11 and OpenSolaris™ 2009.06
>
>HP-UX® 11i v3
>
>AIX® 6.1
Instead of buying tons of books, you might want to look at Safari Books. I have the 10-book bookshelf subscription, and it is seriously plenty. Pros, you have instant access to a massive library of tech books. Cons, you are stuck reading on your computer/tablet/phone (I did try reading a few chapters on my Kindle, but the didn't care for the experience).
Books I would suggest:
I'm not a huge fan of training videos, but generally watch recordings from conferences. Although, I do really enjoy the format of vimcasts though.
As for general advise, I did see someone recommend looking for an MSP. If you are looking to be a Linux SysAdmin, I wouldn't recommend this route as you are going to be supporting MS installations. Personally, I started doing help desk for a web company and moved up from there. Also, I worked hard to create my opportunities within each position. You'll have to put yourself out there and be patient, It took me 4 years to earn the official title of Systems Administrator (in a small-ish town). The key to this is finding a good Sr. SysAdmins who are willing to mentor you, and some environments/people aren't conducive to this.
EDIT:
BTW, I have a B.A. in Political Science, so don't be ashamed to rock that Philosophy degree. You will see a lot of posting that are looking for a B.S. in Computer Science/Computer Engineering/Rocket Surgery, but seriously don't even worry about that. Most job postings are a list of nice to haves, and most places really only care that you have a degree.
I've been recruited by and interviewed with some very respectable tech companies. I just usually have to explain how I got into tech with a political science degree. In an interview, having the right attitude and knowing your stuff should say more than your major in college. But, you will also run into elitist douche bags who knock your degree/doubt your abilities because you don't have a B.S. in CS/CE. If you work with these people, your work should speak for itself. Don't try and get caught up into a pissing match with them. If it is an interview (as in someone you might work for), practice interviewing never hurts.
Yeah:
http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
http://www.amazon.com/Practical-Unix-Internet-Security-3rd/dp/0596003234/ref=sr_1_1?ie=UTF8&amp;qid=1422046190&amp;sr=8-1&amp;keywords=unix+security+concepts
that'll get you started
>nice error message
Oh yeah, reminds me of those gems:
ERROR: Root device mounted successfully, but /sbin/init does not exist.
Bailing out, you are on your own now. Good luck.
Uhhuh. NMI received for unknown reason 20.
Dazed and confused, but trying to continue
Linux is good and informative when something screws up and you can usually debug and fix most issues using a combination of google/documentation/logic/common sense barring incompatible/broken hardware, but the general public doesn't want to study ULAH to be able to use their computer, thus the downvotes.
http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057/ref=wl_it_dp_o_piT1_nS_nC?ie=UTF8&amp;colid=12MNX8P4AJLZY&amp;coliid=I3AKRESKO8PAOP
http://www.amazon.com/Practical-Commands-Editors-Programming-Edition/dp/013308504X/ref=wl_it_dp_o_pdT1_nS_nC?ie=UTF8&amp;colid=12MNX8P4AJLZY&amp;coliid=I2HFBSVXDY6AFF
http://www.amazon.com/RHCSA-Linux-Certification-Study-Edition/dp/0071765654/ref=wl_it_dp_o_piT1_nS_nC?ie=UTF8&amp;colid=12MNX8P4AJLZY&amp;coliid=I2P3ILHN0013L1
http://www.amazon.com/Practice-System-Network-Administration-Edition/dp/0321492668/ref=wl_it_dp_o_pdT1_nS_nC?ie=UTF8&amp;colid=12MNX8P4AJLZY&amp;coliid=I3H6KNRFYQI1QC
http://www.ebook3000.com/upimg/201008/07/07145034267.jpeg
http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
If you're talking about this book, it's one of my favorites. It's the book I've recommended as a supplement to everyone I've taught thus far.
Find an intern job at a small company that does linux based IT consulting, there are plenty of those. The pay will be shit, the hours will be long but what you'll really looking for is a good tutor. Read http://www.amazon.com/Linux-System-Administration-Handbook-Edition/dp/0131480057
I hear this is great UNIX and Linux System Administration Handbook
Although I can't personally vouch for it.
I would recommend this one
Machine Learning, Mitchell
https://www.amazon.com/Machine-Learning-Tom-M-Mitchell/dp/0070428077
Reinforcement Learning, Sutton & Barto
https://www.amazon.com/Reinforcement-Learning-Introduction-Adaptive-Computation/dp/0262193981
Artificial Intelligence, Norvig & Russell
https://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597
The aima textbook - http://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597/ref=sr_1_1?ie=UTF8&amp;qid=1318459836&amp;sr=8-1 (from occamslazor's post)
You're lucky then. A ton of the books for my CS degree were $90+.
Here's a current example: the book for <http://ai-class.com/&gt;, which has over 100,000 students registered now, is $116 on Amazon: http://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597/ref=sr_1_1?ie=UTF8&amp;qid=1317855027&amp;sr=8-1
Edit: Dear Markdown, you can be a dick sometimes.
I don't know where you've been looking, but Bayesian networks have been around long enough that they are covered quite well in textbooks. The very popular AI: A Modern Approach (Russell & Norvig) has a good overview of the basics and it is very well written with plenty of examples, as far as I recall. If you really want to get in depth, the "bible" on Bayesian Networks is the fairly recent textbook Probabilistic Graphical Models (Koller & Friedman). I'd recommend finding PDF samples or something before you buy them, of course. And don't worry if you feel some Bayesian Network stuff is over your head ... this is mostly graduate-level CS stuff, so you might just need to be patient =P
I think this might be beyond what you're looking for, but I really enjoyed Pattern Recognition and Machine Learning. It's very heavy on statistics, and if you're looking into machine learning methods, it has a wonderful amount of mathematical information given in a fairly clear manner. It might be severe overkill if this isn't your field, but I thought I'd mention it since you said AI.
For AI in general, I see Artificial Intelligence: A Modern Approach used a lot. It gives some solid basic concepts, and will be helpful in getting you started writing basic AI in your applications.
I can't really recommend discrete math because, despite enjoying it quite a bit, I haven't found a textbook that I like enough to endorse. My textbook for it in college was by Rosen, and I despised it.
edit:
Just double checked it, and I would stay far away from the first recommendation unless you have a very extensive knowledge of sophisticated statistics. I like it because it gives the math that other books gloss over, but it's not good for an introduction to the subject. It's almost like going through a bunch of published papers on some new cutting edge methods. The ever popular Machine Learning by Thomas Mitchell is a much better introduction to machine learning. If you want to obtain the mathematical depth necessary for your own research into the field, go with the other book after you've gotten acquainted with the material. I'll leave my suggestion up anyway in case anyone here might find it interesting.
The classic book for AI is the Russel-Norvig book which gives a pretty comprehensive overview of the fundamental methods and theories in AI. It's also fairly well written imo.
The third edition is the latest one, so it's going to be rather expensive. You're probably just as well off with the first or second edition (which you should be able to find much cheaper) since the changes between them aren't very significant.
In that case...
You may want to wait for the 5th edition of UNIX and Linux System Administration, as it should release near the end of this year and they don't release new versions that often.
A good way to get started building a college library is to see what the curriculum for the school is and what books are required by professors. Often other colleges will list their book recommendations for the courses online to get an idea of where to start looking. (I know my school has an online bookstore that lists the books for each course and is open to the public)
At least one or two good books in each of those categories, to get a rough idea to start:
C, C++, Java, Python and Ruby are popular to start with
https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739
https://www.amazon.com/Programming-Paperback-Addison-Wesley-Microsoft-Technology/dp/0134382250
you already have a couple here
https://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597
https://www.amazon.com/Windows-Internals-Part-architecture-management/dp/0735684189 (coming soon)
Edit: On second thought, pretty much every college teaches system programming on linux - so perhaps just the linux texts would be adequate for that.
Which kind of AI do you have in mind?
If you wanna go deep academical to it you should read Artificial Intelligence A Modern Approach (3rd Edition)
here's a way to test if you're really interested in AI
I have to throw out the obligatory, "[Artificial Intelligence - A Modern Approach] (http://www.amazon.com/Artificial-Intelligence-Modern-Approach-Edition/dp/0136042597)." It really is quite good.
Google is your friend. Some good links i found by searching for queries like "where to start if i want to study AI" or "good books about AI":
The side bar of https://www.reddit.com/r/MachineLearning/ can also be a good starting point (Machine Learning is propably the most important branch of AI).
The standard intro book is http://www.amazon.com/Artificial-Intelligence-Modern-Approach-Edition/dp/0136042597
The standard introductory AI textbook is Artificial Intelligence: A Modern Approach, by Russell and Norvig. It can be a bit heavy, though.
Introduction to Computer Science: https://mitpress.mit.edu/books/introduction-computation-and-programming-using-python-1 (basic programming and problem solving)
Algorithms: https://mitpress.mit.edu/books/introduction-algorithms (as you have heard) It is not very easy to read, but the content is on point.
Artificial Intelligence: https://www.amazon.ca/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597 (as above, this is a seminal book, but not the most approachable)
For those who don't see it: http://i.imgur.com/Ej4wE.jpg
I guess Xzibit is designing textbook covers now (it's real):
http://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1291166426&amp;sr=8-1
Then learning Python would be very useful for you. I have used the book called Automate the Boring stuff (Free).
For data science and machine learning I use: Data Science from Scratch and Hands on Machine Learning with Scikit-learn and Tensorflow.
For AI I have used Artificial Intelligence: A Modern Approach (3rd ed.).
Artificial neural networks are great, but keep in mind that they're just a means to an end. The best way to learn them is to go through a good textbook or online course where you'll try them out on good examples that have been designed specifically to be good for beginners.
To a professional, you don't start with the tool and search for a problem - you start with a problem and figure out the best tool. Sometimes that tool is neural networks, but probably 99% of the time it's not. Even when the right tool is "machine learning", there are a lot of machine learning techniques other than ANNs.
As a beginner, the best thing you can do is start by learning about machine learning in general. You can't properly use ANNs if you don't understand the principles of machine learning in general, which is what the book or course I linked above will give you.
&#x200B;
This was the algorithms book we used at UW Madison
http://www.amazon.com/Introduction-Algorithms-Second-Thomas-Cormen/dp/0262032937
And this was the AI book
http://www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1278078229&amp;sr=1-1
I suck at math and physics so can't help you there.
Useless, conceited, futurist masturbation.
You want the theoretical framework of AI, go study math and programming, then go read Russell & Norvig, or if you want philosophy without the practicality, Hofstadter.
Nothing beats CLRS. But a decent alternative that is less dense is http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/ref=sr_1_6?ie=UTF8&amp;qid=1410724273&amp;sr=8-6&amp;keywords=data+structures
I enjoyed this book and the author has an online course about Algorithms too.
Mastering Algorithms by Kyle Louden
Algorithms - 4th Edition : by Robert Sedgewick
Introduction to Algorithms - 3rd edition - Thomas H. Cormen
Tips and pointers for writing good Java code
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
Algorithms in Java with code examples
http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1416453105&amp;sr=1-1&amp;keywords=algorithms
For mobile development, check out the Big Nerd Ranch books. They contain guided projects that help you learn a variety of core features of mobile programming.
Thanks! Just to make sure, do you mean these two books?
If so, I'm glad you mentioned those. Both of them are already on my to-read list, but they were further down than Knuth's work. Since, as you say, they might better for starters, I'll check those out first.
By the way, I have also heard some good things about this one:
Have you any experience with that book? It's also on my to-read list.
https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X
website: http://algs4.cs.princeton.edu/home/
Doesn't the course offer a book? The professor might suck, but what about the textbook?
Otherwise, I think these two are the most commonly recommended algorithm books:
https://www.amazon.com/dp/032157351X
https://www.amazon.com/dp/0262033844
> Ako krene sa C naucice kako da stedi na memoriji i pise efikasne programe.
Ako krene sa C, odustaće posle trećeg segfault-a JER IMA 13 GODINA.
> [C previše komplikovan] nije
Možda ne tebi ili meni. Ali, evo, napiši mi kod koji će da u skup stavi imena gradova "London" i "Madrid" na C-u i onda to ispiše, onda ću ja to isto u Ruby-ju, i videćemo koliko je šta kompleksno.
> Vreme izvrsavanja je nebitno
Pogledaj sve, ali pogotovo slajd 8.
> Algoritmi na visokim jezicima... ne ide u istu recenicu.
Onda mi objasni zašto je najpopularniji udžbenik o algoritmima na Javi (ili pročitaj u njemu zašto je). Jedina druga poznata, CLRS, je u pseudokodu (jer je i Java previše low-level). Znaš li kako funkcionišu string-ovi u C-u? Hoćeš klince da učiš malloc i calloc i kastovanje void* ili kako funkcioniše tok kontrole?
In no particular order:
Structure and Interpretation of Computer Programs
Code Complete
C Programming Language(K&R)
The Pragmatic Programmer
The Mythical Man Month: Essays on Software Engineering
Introduction to Algorithms and/or Algorithms
Basic:
Building Java Programs
Interview Practice
Intermediate:
Algorithims
These are just a few books with good reviews that are also used in computer science curriculums at MIT or Princeton can't remember which and UW.
I can also post some basic ones too if you would like
Time Management for System Administrators: Stop Working Late and Start Working Smart
The Practice of System and Network Administration, Second Edition
Windows Server 2008 R2 Unleashed
Windows Server 2016 Unleashed includes Content Update Program
The Practice of Cloud System Administration: DevOps and SRE Practices for Web Services, Volume 2
The Practice of System and Network Administration: Volume 1: DevOps and other Best Practices for Enterprise IT
Network Warrior: Everything You Need to Know That Wasn't on the CCNA Exam
3rd edition was just released.
https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=asap_bc?ie=UTF8
I'm going to recommend a book: https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165
Read the first edition of this 20 years ago. Great book about doing the "job" of being a sysadmin. Nothing OS specific.
Also, learn a scripting language. You're not a real IT guy unless you know one. Python is my preference, but PowerShell is fine if you primarily work in a Windows environment.
If you are looking for stuff to do in your environment, this book will give you some pretty good pointers:
The Practice of System and Network Administration
The Visible Ops Handbook: Implementing ITIL in 4 Practical and Auditable Steps
The Practice of System and Network Administration: Volume 1: DevOps and other Best Practices for Enterprise IT (3rd Edition)
For us a Change is any change to the environment that isn't controlled by a separate process, like new employees, termination, etc.
If your not sure, it's a CM.
So I have the MCSE Mobility and I do not know if that alone will last.
Would rather say it depends on your skill. You can also become a sysadmin without a certificate as the others have already mentioned. The MCSE Mobility does not really go deeper into server landscapes like the MCSA Server 2016 does.
The topics to be covered is:
Deplyoment
Inunte
And SCCM with intune I think.
I chose Deployment because I already had experience.
This contains:
LTIDeployment (mdt)
ZT Deployment (sccm)
WDS
USTMIf you really want to go deeper I can recommend the following book
is also recommended here in the wiki.
https://www.amazon.com/Practice-System-Network-Administration-3rd/dp/0321919165/hope you get your sysdamin place :)
Or for cheap starters, this book with an overly long title:
The Practice of System and Network Administration: Volume 1: DevOps and other Best Practices for Enterprise IT (3rd Edition)
https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=sr_1_1?ie=UTF8&amp;qid=1501175669&amp;sr=8-1&amp;keywords=practice+of+system+and+network+administration
The Practice of System and Network Administration: Devops and Other Best Practices for Enterprise it
Also OneNote,
I'd recommend reading:
https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165/ref=pd_lpo_sbs_14_t_0?_encoding=UTF8&amp;psc=1&amp;refRID=QNAPT9P3GEA7NRR24K7X
Also read this book
https://www.amazon.com/dp/0321919165/ref=cm_sw_r_sms_awdb_t1_.OHYDb49VR92P
Did you get that old edition or the latest 3rd edition with it's cloud admin partner?
Check out "The Practice of System and Network Administration: Volume 1: DevOps and other Best Practices for Enterprise IT (3rd Edition)" by Thomas Limoncelli.
https://www.amazon.com/dp/0321919165
I'm also pretty new to this job, and this book has been really helpful in better understanding all that we get to do.
I am in a similar boat as OP and also found the book you recommended, so just wanted to add that there is a new edition coming very soon, the one you linked is from 2007.
https://www.amazon.com/Practice-System-Network-Administration-3rd/dp/0321919165
https://www.amazon.co.uk/gp/product/0321919165/ref=oh_aui_detailpage_o02_s00?ie=UTF8&amp;psc=1 deals with a lot of issues, among them support/helpdesk/people stuff.
Oh, I just see that the great price is for the first edition. The second edition is quite a bit more expensive, also used, but at $45 still very much worth it, I'd say.
You wouldn't learn anything wrong from the first edition, but there have been a few exciting changes and additions to C++ lately (C++11 and C++14 standards), which are touched upon in the second edition.
I spent money on a book in attempts to kinda force myself to sit down, it hasn't gone too well. But when I do, it feels more scholarly so I am more focused on learning?
I got this one for free, it's made by the dude who made C++ himself, and is more accessible than expected!
And I bought this one, since it felt more activity based!
Super tare, o motivatie in plus sa ii dau maxim :)!
Din ce invat efectiv acum este cursul asta,
https://www.udemy.com/video-course-c-from-beginner-to-expert/, am ajuns la bitwise operators.
Ca extra lectura pe autobus ori cand sunt on the move mi-am scos cartea asta https://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784?ie=UTF8&amp;ref_=asap_bc. E scrisa foarte bine cel putin cat am reusit eu sa citesc, ma prinde.
In principiu am idee ce inseamna GIT Hub evident ca nu am lucrat efectiv cu el, bug trackere am putina cunostinta de JIRA si Mantis, dar in rest de ce ai scris urmeaza sa invat, ergo e chineza deocamdata :)).
Multumesc tare frumos inca odata!
I'm not the best source of advice for books. Once you have a good grasp of C++ I would suggest Effective Modern C++ by Scott Meyers. I haven't read the book but Programming: Principles and Practice Using C++ (2nd Edition) would be the book I would suggest for beginners to C++. It's written by the inventor of the language, it's for beginners, and crucially, it covers the C++11/14 standards. I've read other books of his and enjoyed them.
Whatever you do, stay away from "Learn C++ in ... Days!" type of books.
I'll repeat what /u/Transputer said: You need a book.
Especially since you are learning C++ from scratch and it's your first language.
This book is written by the creator of the language, it's recently updated to cover the new additions by the C++11 and C++14 standard.
It's designed to teach first year university students programming in C++
http://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784/
Your other option is to learn Programming through another language that might have video lectures or tutorials (Java?) once you are familiar with the concepts you can pick up a smaller book and get acquianted with C++
Good luck.
I also strongly suggest this book if your are just getting into programming!
Programming: Principles and Practice Using C++ (2nd Edition) https://www.amazon.com/dp/0321992784/ref=cm_sw_r_cp_apa_i_u-avCbMTKX625
A big step with coding is giving yourself projects. Code an Arduino or other microcontroller to work on a model rocket, or control a miniature rover. Little projects like this will give you a reason to learn, and give you experience related to the field.
Yes, you are right, this one is quite good.
If you actually want to learn to implement efficient algorithms and data structure in C++ you might have a long road ahead of you since loads of them are quite complex. If you're interests are purely in machine learning than I would suggest you make use of the containers and algorithms provided by std and boost.
Going more domain specific and using things like armadillo or eigen. The later is used in many popular NN libraries/frameworiks such as tensorflow while the former is (based on my subjective opinion) quit easy to use, more similar to matlab and used in a number of libraries such as dlib and opencv. These "higher" level libraries are likely even better suited for your needs since they may help you use multiple cpus and gpus for your algorithms.
Further more, if you are interested in getting something shipped out quickly check out some C++ ML libraries, my personal favorite is Dlib but its quite limited in scope. However, I assume you wish to implement your own algorithm, in which case you are in luck because most of these libraries are open source:
https://github.com/tensorflow/tensorflow/tree/master/tensorflow
https://github.com/davisking/dlib
https://github.com/opencv/opencv
https://github.com/Somnibyte/MLKit
(are some examples of such libraries).
For familiarizing yourself with C++ I'd recommend:
-> so documentation
-> [Programming: Principles and Practice Using C++](https://www.amazon.com/dp/0321992784/?tag=stackoverfl08-20](https://www.amazon.com/dp/0321992784/?tag=stackoverfl08-20)
-> Effective Modern C++
Stack overflow documentation has plenty of examples that explain things which might otherwise seem strange about the language, Programming: Principles and Practice Using C++ was written by the creator of the language, Bjarne Stroustrup, who also happens to be a university teacher, so I would say it could be considered an objectively reasonable starting point for learning C++ for someone not very experienced with programming and Effective Modern C++, while aimed at programmers that are already experienced with C++, might give you a bit of insight into understanding why old codebases look the way they do and how to improve them and not repeat their mistakes (its also quite a well written book in many aspects, quite a pleasure to read).
Also I would avoid any C++ centric book on algorithms and data structures written pre 2011 like the plague, since the language has evolved a lot and you might find yourself learning a very old.
There is book written by the creator of the C++ for people who are learning how to code: https://www.amazon.com/dp/0321992784/?tag=stackoverfl08-20
Other than that, there are the r/learnprogramming sub, the http://cppreference.com where you can learn everything about the language, from the the very beginning and the other books written by Scott Meyers and the creator of C++ himself. All of them are great. Hope it helps.
I've been writing C++ for about three years now, so I'm mostly familiar with C++11 (one of the newer updates that added quite a bit of functionality and sort of "updated" the language to make it more modern), though there are definitely people with way more experience in it than me on here.
C++ is a language with a very steep initial learning curve that drops drastically once you understand the basic concepts and write a few programs to practice the concepts involved. If you feel like it's too difficult at some point, take a break, then come at it from a different approach (and of course write a few tests to make sure you're getting it). This applies to other languages almost equally, of course.
You should try to learn C++11 (and C++14, a minor update) more than older variations of the language because it added quite a bit to make it easier to read and write with.
Online guides for C++ tend to be outdated or just plain wrong, it's actually one of the few languages with that quality (although that's changing slowly). It's best to get a book like The C++ Programming Language or Programming Principles and Practice Using C++ (which I would recommend for you over the former, which is actually more of a reference book). By the way, they're both authored by the initial creator of the language, so they also explain some of the design choices and details of the language which may or may not help you better understand it.
Beyond that, just do what's suggested for any other programming language (look at references, read actual programs written in it, etc.)/
This is C++, there are various resources for learning it. It is more difficult than some other programming languages, I would personally recommend that you start with something easier to learn like Python.
C++ Book - https://www.amazon.com/dp/0321992784/
Other C++ books - http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list
Python book - http://www.diveintopython3.net/
Other Python books - see sidebar of /r/python
Since you are a C++ beginner, you should initially concentrate your efforts in learning the language.
My suggestion is to read Programming: Principles and Practice Using C by the father of C++ Bjarne Stroustrup https://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784/ and do the exercises from the book. Try to do these on your own, if you are really stuck on something search an alternative explanation, ask on Reddit /r/learnprogramming or Stackoverflow.
Also, very important, use a modern C++ compiler like the one from Visual Studio 2017 if you are on Windows, G++ 6 or 7 if you are on Linux, and latest Xcode if you are on macOS.
There is not much to it, just grab a book that applies the concept; like this one: http://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784/ref=sr_1_2?ie=UTF8&amp;qid=1425383272&amp;sr=8-2&amp;keywords=c%2B%2B+stroustrup
It's also in C++ ;)
( quand je dis HTML+javascript, c'est javascript le langage de prog.)
Si tu veux apprendre le C++, sous windows tu peux télécharger VisualStudio Community (je crois que c'est comme ça que ça s'appelle la version gratuite maintenant) de Microsoft et essayer.
Sur le net ya des tonnes de cours sur google, en français en anglais pour commencer. Il faut déjà pratiquer et mettre les mains dans le cambouis.
A savoir après des années de stagnation le C++ évolue (presque) vite, certains livres parlent de C++11 alors qu'on est au standard C++17 et bientôt C++20
Après, si tu veux vraiment apprendre des trucs pour :
https://www.amazon.fr/Programming-Principles-Practice-Using-C/dp/0321992784
https://www.amazon.fr/Tour-C-Bjarne-Stroustrup/dp/0134997832/
https://www.amazon.fr/C-Programming-Language-Bjarne-Stroustrup/dp/0321563840/
https://www.amazon.fr/Effective-Modern-C-Scott-Meyers/dp/1491903996/
Sans oublier sur le net les bonnes pratiques, à jour:
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
Et sur youtube il y a plein de vidéos aussi, et des conférences.
Et je conseille d'apprendre le C en même temps, parce qu'en C++ on utilise beaucoup de librairies en C.
https://www.amazon.fr/langage-2e-éd-Norme-ANSI/dp/2100715771
It is an introductory-level book so it does cover the basics, and progresses through topics building only off previously covered material, so it's not like it suddenly drops you off in the middle of enterprise-level topics. But there isn't a lot of hand-holding. As a beginner you might need to do a bit of additional googling to feel confident that you've really grasped the material in the book.
I initially found Accelerated C++ on this list of recommended books on StackOverflow.com. It lists Programming Practices and Principles in C++ as the recommended book for people who want to learn C++ but have no prior programming experience. I'm not familiar with that book, but perhaps it would be more suitable for a non-programmer :-)
If you want an interesting history of cyptography, read Simon Singh's The Code Book
You can write perfect encryption by hand using a One Time Pad. It requires exactly zero high level mathmatics. The reason it isn't used as often as other encryption methods is that it requires an exchange of keys each time it is used.
The Code Book by Simon Singh has a nice section on the Enigma machine and at least some of how it was cracked. It's a little simplified but not significantly*. I took a course years ago that went really in depth on cracking Enigma by hand, and it used Singh's book as the main textbook for that part with a lot of additional handouts that I don't have any more.
* Different branches of the gov't and military had different Enigmas, and some really were more complicated and way harder to crack. The "standard" army one is basically like Singh describes, although he assumes that the inner wirings of the rotors are known. In fact Rejewski had to figure that out too, and though that also used cycle structures, it's much more technical.
Start here:
https://www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323
For a thriller treatment of infections diseases, the following are a nice read
I'm inclined to also suggest the works of Simon Singh, to whom I was introduced by his book on math and cryptography - The Code Book. But he has also written about cosmology and "alternative" medicine. The later got him involved in a landmark libel lawsuit in the UK. For that reason, there is probably more than the usual bit of politics you'd expect in a popular science book. However, in the post-truth era of Donald Trump and company, that maybe fitting if bitter medicine.
Edit: As someone who may not have the best scientific background, one might be prone to confuse science with pseudoscience. Even today, there is no shortage of low quality literature on UFOs and parapsychology. As such, Carl Sagan's The Demon Haunted World: Science as a Candle in the Dark is highly recommended.
The two starting books that gave me a great deal of understanding on systems (which I think is one of the toughest things to grasp and CLRS and the Art of Programming have already been mentioned):
[Computer Systems: A Programmer's Perspective] (http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/0136108040/ref=sr_1_2?ie=UTF8&amp;qid=1407529949&amp;sr=8-2&amp;keywords=systems+computer)
This along with its labs served as a crash course in how the system works, particularly a lot about assembly and low-level networking.
The Elements of Computing Systems: Building a Modern Computer from First Principles
I've mostly only done the low-level stuff but it is the most fun way I have found to learn starting all the way at gate architecture. It pairs well if you have read Petzold's Code. A great introduction to the way computers work from the ground up.
Read this book. The first half, in which it shows you how to design and instantiate (in an included simulator) flip-flops, registers, an ALU and RAM, are extremely enlightening.
The second half is about software, so I didn't bother to continue. But the first half is well worth the price of admission. Oh, related to /u/panda_burgers' comment below, this is the book for the NAND2Tetris course. But their site is throwing malware warnings at the moment.
Got THIS, it´s amazing.
It starts out with the fundamental principles of logic gates and transistors, moving through memory adresses and basic assembly, through to making your own compiler and a basic OS. Each chapter has a nice little simulator program you can download and use together with a number of exercises, to help you consolidate what you´ve learnt.
And no, I didn´t write it! Or sell it for a living. Nor am I in any way affiliated with anybody having to do anything with the production or sale of this book. I just read it. It´s great.
You want to read Charles Petzold's book Code: The hidden language of Computer Hardware and Software. This is another good one.
Actually to give you some better advice try this:
https://www.amazon.co.uk/Elements-Computing-Systems-Building-Principles/dp/0262640686
It's available free online, but choose amazon as I don't know the link sites. I bought a hard copy.
This is a university course written by a Harvard professor. You start with basic binary logic and end up writing a basic operating system. It will teach you how a computer works from the ground up, as you basically build your own virtual CPU in software and write a compiler for it.
Yes, its really hardcore but you don't need to do the whole thing in a few weeks. Stretch it out over 5 years while you learn on the job.
The point is, it teaches you HOW a computer works. With that understanding, everything else becomes a lot easier. It grounds the concepts into you that are fundamental to everything, from hardware to software to networking. All of it makes much more sense when you have the foundation to understand it.
Others I'd recommend:
Any of Peter Norton's books on the IBM PC from the 80's. You'd think they would be irrelevant by now, but we still use IRQ's on modern hardware, even if its far abstracted by the OS now.
I'm a systems architect now, after 19 years in the industry, but pulling the books from my shelf that got me here:
Peter Norton: Inside the IBM PC and PS/2
Peter Norton: Programmers guide to the IBM PC
Brian Kernighan/Rob Pike: The Unix programming envrionment
Will Asop: Unauthorised Access
Street/Nabours/Basking: Dissecting the hack
Gerald Weinberg: The psychology of computer programming.
Oh and anything written by Kevin Mitnick
Another good place to start: http://www.amazon.com/The-Elements-Computing-Systems-Principles/dp/0262640686
It is not just a text, it's a course that walks through building a virtual CPU using Hardware Description Language and a Hardware Emulator, and then coding Tetris on top of it.
It starts with a single NAND gate and go on from there.
you could start here. or here.
Io non sono molto un tipo da libri, ma tra i miei preferiti avevo salvato :
You might want to check out something like this book to make it all come together.
I'm a self taught programmer, so I don't know what CS degrees entail, but I highly recommend the book Code and also another one called The Elements of Computing Systems.
The former pretty much teaches you how a computer physically works and the latter teaches you how to build a processor and then write an OS for it. After reading those two books you pretty much know how computers work at every level of abstraction. I think that's the way programming should be taught.
You might want to look at The Elements of Computing Systems, also known as "nand2tetris", It will start you out with nothing more than a
NAND
logic gate and you'll build the whole stack, from ALU to CPU to compiler to simple OS. Quite fun and kept reasonably simple.https://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/
Build a simple system from scratch :)
LondonPilot has an excellent explanation.
If you want everything explained in a book, look at Code by Charles Petzold. It's basically an ELI5 Computers through all the layers of abstraction, literally starting with binary.
If you want a hands on approach, check out The Elements of Computing Systems. It will take you through building the gates that LondonPilot is talking about to building Memory, ALUs, and even a CPU. It continues on to assembly language programming, writing a compiler, writing a high level language, etc.
These books combined is really a large chunk of what you should know with a BS in Computer science.
Elements of Computing Systems. Any lower level than that and you're moving closer to analog circuit territory.
Remember that CS is much about the physical computer than anything else. Computers are made possible by multiple layers of abstraction. They begin with semiconductors, boolean logic, machine language, assembly language, compiler/linker, leading up to high level languages like python and C. Computers organized memory hierarchy to arbitrate between the access time and availability of different types of memory (cache, DRAM, hard drive) .
In addition, the current trend seems to be much focused on the multi-core, parallel system, since engineers can't get enough performance improvement just by implementing pipelines or faster clock cycles.
So that's that. If you enjoy this realm of CS (it's more of computer engineering to be precise), you should read about these books. Nevertheless, this knowledge will "expand", as you put it, your understanding of computing system in general.
http://www.amazon.com/The-Elements-Computing-Systems-Principles/dp/0262640686/ref=pd_sim_b_27
http://www.amazon.com/Computer-Organization-Design-Revised-Edition/dp/0123747503/ref=sr_1_1?ie=UTF8&amp;qid=1344489171&amp;sr=8-1&amp;keywords=hennessy+computer+organization
As other's have said, K&R is a great introduction to C, but not a great introduction to programming/computer science. I think more people should try to C as their first language as it gives the student a better idea of what the computer is actually doing than high-level languages. I wish I had a modern book I could refer you to for learning C as a first language, but I am out of the loop, however, I have heard great things about Harvard's free online course: Introduction to Computer Science which uses C (and some other languages).
As far as learning how to be a better programmer, I think one of the key things is to 1) strive to understand what is happening under the hood. 2) Break large problems into smaller ones 3) Logically order the operations needed to complete the tasks that solve the problem, 4) Learn multiple programming languages.
Some tips for becoming a better programmer
Strive to understand what the computer is doing when you execute your program
Understanding what the compiler/interpreter is doing with your source code, how the the processor executes the binary and how information is stored/accessed in memory will help you write more efficient code. The C language is great for learning these things once you start to wrap your mind around it. I would also recommend learning computer organization and hardware. One book I found that really helped me learn what a computer does is The Elements of Computing Systems: Building a Modern Computer from First Principles. I would recommend a casual reading of it, don't get too hung up if you don't quite 'get' it. Read it and see what sinks in. After you get better at C and maybe learn another language, come back to this book and read it again with closer scrutiny.
Break large problems into smaller ones. Logically order the operations needed to complete the tasks that solve the BIG problem
Before I write a single line of code I will spend days, weeks or even months just planning the program out. Flow charts and lists, pseudo code are your friend. Identify your large problem, think about all the different steps needed to get there, write them all down. Determine how to what you need to do to complete each step. Determine if you are doing the same task multiple times (I keep writing data to this log file, I keep checking to see if this array is full, etc.), if so, then you need a function for that. Write this all down as a human readable list of steps. Once you think you have solved the big problem, start coding the small stuff. Write small programs that complete each step you identified and test each little program. Once you've written all those little programs, put the pieces together. Check out How to Think Like A Programmer. It's an excellent book in this area.
Learn multiple programming languages
Again, stick with C until some things are really clicking for you. Eventually though you need to learn another language or two before the "thinking like a programmer" will really sink in. The more languages you learn, the easier it is to learn even more languages. You will begin to see the patterns in languages. You will notice the different approaches that different programming paradigms take. There is a reason that nearly every book, course or tutorial on learning a language follow very similar trajectory: What datatypes exist in this language? How to declare a variable of a particular type. How to output text to the screen, how to cast a variable to a different type, how arrays work in this language, how IF/Then/Else works, How loops work, etc. These are things (nearly) every language has and they are the first steps to learning how to work with that language.
Hope some of this helps!
This is an excellent book, I enjoyed reading it. I would also recommend the Elements of Computing Systems.
You should be able to find the book on Amazon.
Here Its’s not called nand2tetris.
Edit: I was a little unclear. The book is not called nand2tetris, but the associated courses are/were. You can go to nand2tetris.org to find the author’s website and links to their coursera courses. You really don’t need the courses. The books is great.
Elements of Computer Systems: Building a Modern Computer From First Principles is a great introduction to a wide range of computer science topics. It covers principles from the bottom up, and is a good place to start for things like computer architecture and programming language design. It doesn't cover things like networking or algorithms/data structures, but if you're interested in systems, this is a great book.
I was interested in the same topic, I purchased this book:
http://www.amazon.com/gp/product/0262640686
I haven't gone all the way through it yet, but it helps you learn where assembly code came from, and low loevel interactivty between hardware and software.
which books exactly, please guide me.
these ones?
Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)
Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14 1st Edition
More Effective C++: 35 New Ways to Improve Your Programs and Designs 1st Edition
What is the difference between them? It seems effective cpp 3 is from 2005 and more effective cpp is from 1996. Is there a point in reading more effective cpp after reading the third edition of effective cpp?
Also, what do you think about C++ How to Program?
These are good, but I would say they're actually better for learning C++ rather than branching to higher level concepts. C++ is one of the easiest languages to implement best practices with and it's intuitive if you're a good programmer. The language and standard itself promotes cleverness and conciseness.
Some books I would suggest for branching to higher level C++ would be Effective C++ and More Effective C++.
Both are wonderfully written and relevant across standards. It focuses on bigger picture C++ rather than exactly current standards.