(Part 3) Reddit mentions: The best computers & technology books

We found 39,382 Reddit comments discussing the best computers & technology books. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 9,387 products and ranked them based on the amount of positive reactions they received. Here are the products ranked 41-60. You can also go back to the previous section.

41. The Art of Game Design: A Book of Lenses, Second Edition

    Features:
  • AK Peters
The Art of Game Design: A Book of Lenses, Second Edition
Specs:
Height9.5 Inches
Length8 Inches
Number of items1
Weight2.29942139266 Pounds
Width1.25 Inches
▼ Read Reddit mentions

42. The Linux Command Line: A Complete Introduction

    Features:
  • No Starch Press
The Linux Command Line: A Complete Introduction
Specs:
Height11 Inches
Length8.5 Inches
Number of items1
Release dateJanuary 2012
Weight2 Pounds
Width1.09 Inches
▼ Read Reddit mentions

43. Game Engine Architecture

    Features:
  • Used Book in Good Condition
Game Engine Architecture
Specs:
Height9.25 Inches
Length7.5 Inches
Number of items1
Weight3.65085505872 Pounds
Width1.75 Inches
▼ Read Reddit mentions

44. Game Engine Architecture

    Features:
  • AK Peters
Game Engine Architecture
Specs:
Height9.75 Inches
Length8 Inches
Number of items1
Weight3.89997741478 Pounds
Width2.25 Inches
▼ Read Reddit mentions

46. Learning Python, 5th Edition

    Features:
  • O'Reilly Media
Learning Python, 5th Edition
Specs:
Height9.19 Inches
Length7 Inches
Number of items1
Weight4.95 Pounds
Width2.8 Inches
▼ Read Reddit mentions

47. Compilers: Principles, Techniques, and Tools (2nd Edition)

    Features:
  • O Reilly Media
Compilers: Principles, Techniques, and Tools (2nd Edition)
Specs:
Height9.52754 Inches
Length6.49605 Inches
Number of items1
Weight3.2848877038 Pounds
Width1.73228 Inches
▼ Read Reddit mentions

49. Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14

    Features:
  • O'Reilly Media
Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14
Specs:
Height11 Inches
Length8.5 Inches
Number of items1
Weight1.26986262912 Pounds
Width0.76 Inches
▼ Read Reddit mentions

50. The Shallows: What the Internet Is Doing to Our Brains

    Features:
  • W W Norton Company
The Shallows: What the Internet Is Doing to Our Brains
Specs:
Height8.3 Inches
Length5.5 Inches
Number of items1
Release dateJune 2011
Weight0.55 Pounds
Width0.8 Inches
▼ Read Reddit mentions

51. CompTIA A+ Certification All-in-One Exam Guide, 8th Edition (Exams 220-801 & 220-802)

    Features:
  • Used Book in Good Condition
CompTIA A+ Certification All-in-One Exam Guide, 8th Edition (Exams 220-801 & 220-802)
Specs:
Height9.2 Inches
Length7.5 Inches
Number of items1
Weight5.42006471127 Pounds
Width2.1 Inches
▼ Read Reddit mentions

52. The Algorithm Design Manual

Springer
The Algorithm Design Manual
Specs:
Height9.25 Inches
Length7.01 Inches
Number of items1
Release dateOctober 2010
Weight2.86160016076 Pounds
Width1.69 Inches
▼ Read Reddit mentions

53. Real-Time Rendering, Third Edition

    Features:
  • New
  • Mint Condition
  • Dispatch same day for order received before 12 noon
  • Guaranteed packaging
  • No quibbles returns
Real-Time Rendering, Third Edition
Specs:
Height9 Inches
Length6.25 Inches
Number of items1
Weight3.95068373504 Pounds
Width1.75 Inches
▼ Read Reddit mentions

54. Think Like a Programmer: An Introduction to Creative Problem Solving

    Features:
  • No Starch Press
Think Like a Programmer: An Introduction to Creative Problem Solving
Specs:
ColorMulticolor
Height9.25 Inches
Length7 Inches
Number of items1
Release dateAugust 2012
Weight1.25 Pounds
Width0.72 Inches
▼ Read Reddit mentions

57. Java Concurrency in Practice

    Features:
  • Addison-Wesley Professional
Java Concurrency in Practice
Specs:
Height9.2 Inches
Length7 Inches
Number of items1
Release dateMay 2006
Weight1.51678036256 Pounds
Width1.2 Inches
▼ Read Reddit mentions

58. C Programming: A Modern Approach, 2nd Edition

    Features:
  • TURNAROUND PUBLISHER SERVICES
C Programming: A Modern Approach, 2nd Edition
Specs:
Height9.2 Inches
Length7.5 Inches
Number of items1
Release dateMarch 2008
Weight2.57499922016 Pounds
Width1.1 Inches
▼ Read Reddit mentions

59. CCNA Routing and Switching Study Guide: Exams 100-101, 200-101, and 200-120

    Features:
  • Sybex
CCNA Routing and Switching Study Guide: Exams 100-101, 200-101, and 200-120
Specs:
Height9.25195 Inches
Length7.448804 Inches
Number of items1
Weight3.30693393 Pounds
Width2.200783 Inches
▼ Read Reddit mentions

60. CCNA Routing and Switching Complete Study Guide: Exam 100-105, Exam 200-105, Exam 200-125

    Features:
  • Sybex
CCNA Routing and Switching Complete Study Guide: Exam 100-105, Exam 200-105, Exam 200-125
Specs:
Height9.200769 Inches
Length7.40156 Inches
Number of items1
Release dateSeptember 2016
Weight4.19319222324 Pounds
Width2.40157 Inches
▼ Read Reddit mentions

🎓 Reddit experts on computers & technology books

The comments and opinions expressed on this page are written exclusively by redditors. To provide you with the most relevant data, we sourced opinions from the most knowledgeable Reddit users based the total number of upvotes and downvotes received across comments on subreddits where computers & technology books are discussed. For your reference and for the sake of transparency, here are the specialists whose opinions mattered the most in our ranking.
Total score: 14,765
Number of comments: 125
Relevant subreddits: 7
Total score: 623
Number of comments: 334
Relevant subreddits: 5
Total score: 571
Number of comments: 87
Relevant subreddits: 3
Total score: 487
Number of comments: 62
Relevant subreddits: 2
Total score: 415
Number of comments: 72
Relevant subreddits: 4
Total score: 295
Number of comments: 89
Relevant subreddits: 3
Total score: 280
Number of comments: 65
Relevant subreddits: 7
Total score: 235
Number of comments: 78
Relevant subreddits: 7
Total score: 153
Number of comments: 70
Relevant subreddits: 8
Total score: -230
Number of comments: 68
Relevant subreddits: 9
📹 Video recap
If you prefer video reviews, we made a video where we go through the best computers & technology books according to redditors. For more video reviews about products mentioned on Reddit, subscribe to our YouTube channel.

idea-bulb Interested in what Redditors like? Check out our Shuffle feature

Shuffle: random products popular on Reddit

Top Reddit comments about Computers & Technology:

u/CodyDuncan1260 · 2 pointsr/gamedev

Game Engine:

Game Engine Architecture by Jason Gregory, best you can get.

Game Coding Complete by Mike McShaffry. The book goes over the whole of making a game from start to finish, so it's a great way to learn the interaction the engine has with the gameplay code. Though, I admit I also am not a particular fan of his coding style, but have found ways around it. The boost library adds some complexity that makes the code more terse. The 4th edition made a point of not using it after many met with some difficulty with it in the 3rd edition. The book also uses DXUT to abstract the DirectX functionality necessary to render things on screen. Although that is one approach, I found that getting DXUT set up properly can be somewhat of a pain, and the abstraction hides really interesting details about the whole task of 3D rendering. You have a strong background in graphics, so you will probably be better served by more direct access to the DirectX API calls. This leads into my suggestion for Introduction to 3D Game Programming with DirectX10 (or DirectX11).



C++:

C++ Pocket Reference by Kyle Loudon
I remember reading that it takes years if not decades to become a master at C++. You have a lot of C++ experience, so you might be better served by a small reference book than a large textbook. I like having this around to reference the features that I use less often. Example:

namespace
{
//code here
}

is an unnamed namespace, which is a preferred method for declaring functions or variables with file scope. You don't see this too often in sample textbook code, but it will crop up from time to time in samples from other programmers on the web. It's $10 or so, and I find it faster and handier than standard online documentation.



Math:

You have a solid graphics background, but just in case you need good references for math:
3D Math Primer
Mathematics for 3D Game Programming

Also, really advanced lighting techniques stretch into the field of Multivariate Calculus. Calculus: Early Transcendentals Chapters >= 11 fall in that field.



Rendering:

Introduction to 3D Game Programming with DirectX10 by Frank. D. Luna.
You should probably get the DirectX11 version when it is available, not because it's newer, not because DirectX10 is obsolete (it's not yet), but because the new DirectX11 book has a chapter on animation. The directX 10 book sorely lacks it. But your solid graphics background may make this obsolete for you.

3D Game Engine Architecture (with Wild Magic) by David H. Eberly is a good book with a lot of parallels to Game Engine Architecture, but focuses much more on the 3D rendering portion of the engine, so you get a better depth of knowledge for rendering in the context of a game engine. I haven't had a chance to read much of this one, so I can't be sure of how useful it is just yet. I also haven't had the pleasure of obtaining its sister book 3D Game Engine Design.

Given your strong graphics background, you will probably want to go past the basics and get to the really nifty stuff. Real-Time Rendering, Third Edition by Tomas Akenine-Moller, Eric Haines, Naty Hoffman is a good book of the more advanced techniques, so you might look there for material to push your graphics knowledge boundaries.



Software Engineering:

I don't have a good book to suggest for this topic, so hopefully another redditor will follow up on this.

If you haven't already, be sure to read about software engineering. It teaches you how to design a process for development, the stages involved, effective methodologies for making and tracking progress, and all sorts of information on things that make programming and software development easier. Not all of it will be useful if you are a one man team, because software engineering is a discipline created around teams, but much of it still applies and will help you stay on track, know when you've been derailed, and help you make decisions that get you back on. Also, patterns. Patterns are great.

Note: I would not suggest Software Engineering for Game Developers. It's an ok book, but I've seen better, the structure doesn't seem to flow well (for me at least), and it seems to be missing some important topics, like user stories, Rational Unified Process, or Feature-Driven Development (I think Mojang does this, but I don't know for sure). Maybe those topics aren't very important for game development directly, but I've always found user stories to be useful.

Software Engineering in general will prove to be a useful field when you are developing your engine, and even more so if you have a team. Take a look at This article to get small taste of what Software Engineering is about.


Why so many books?
Game Engines are a collection of different systems and subsystems used in making games. Each system has its own background, perspective, concepts, and can be referred to from multiple angles. I like Game Engine Architecture's structure for showing an engine as a whole. Luna's DirectX10 book has a better Timer class. The DirectX book also has better explanations of the low-level rendering processes than Coding Complete or Engine Architecture. Engine Architecture and Game Coding Complete touch on Software Engineering, but not in great depth, which is important for team development. So I find that Game Coding Complete and Game Engine Architecture are your go to books, but in some cases only provide a surface layer understanding of some system, which isn't enough to implement your own engine on. The other books are listed here because I feel they provide a valuable supplement and more in depth explanations that will be useful when developing your engine.

tldr: What Valken and SpooderW said.

On the topic of XNA, anyone know a good XNA book? I have XNA Unleashed 3.0, but it's somewhat out of date to the new XNA 4.0. The best looking up-to-date one seems to be Learning XNA 4.0: Game Development for the PC, Xbox 360, and Windows Phone 7 . I have the 3.0 version of this book, and it's well done.

*****
Source: Doing an Independent Study in Game Engine Development. I asked this same question months ago, did my research, got most of the books listed here, and omitted ones that didn't have much usefulness. Thought I would share my research, hope you find it useful.

u/two-gun · 29 pointsr/linux4noobs

Sorry for getting all dramatic, but for me you're asking a red pill/blue pill question. I applaud your curiosity and can only recommend you follow your gut and take the red pill. The truth is by asking the question you already know what to do next. Just keep going. However I'll give you a few ideas because you got me excited.

  1. Get in touch with your osx terminal
  2. Get linux ASAP
  3. Learn the command line

    OSX Terminal


    Underneath the shiny GUI surface of your mac you have an incredible unix style OS just waiting to be played with and mastered. A few tips to get you going.


    Download iTerm 2. Press cmd-return, cmd-d and command-shift-d.


    Congrats. you now have a hollywood hacker style computer

    Copy and paste this line into your terminal and say yes to xcode.


    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    Awesome you now have homebrew. A linux style package manager.

    May as well get cask too.


    brew install caskroom/cask/brew-cask

    Now you can install programs by typing a couple of words.

    try

    brew cask install virtualbox

    Get Linux ASAP


    Linux is relatively easy to get up and running and awesome fun. try any of these options

  • Download virtual box and install a 'virtual machine' to run linux on your mac (see above).
  • Buy a Raspberry Pi.
  • Create a bootable usb and install refind on your mac.
  • Take a friends old laptop and install linux on it from your live usb distro.

    If any of the above seems slightly daunting don't sweat it. Be confident and you may just surprise yourself at how much you can learn in such a short amount of time.

    Learn the command line


    The command line opens up the wonderfully powerful and creative world of unix. Push on.

  • Get the basics down with codecademy
  • Play with some books (this or this for eg)
  • Watch some youtube videos (this guy's good for webdev)
  • Learn a text editor (Try Vim. You already have it. Type 'vimtutor' in your terminal to get started)

    Play, Play, Play


    Do what gets you excited.

    I got a big kick out of learning ssh and then pranking my friends with commands like

    say hello friend, i am your computer. i think your friend two-gun is very handsome. Is he single?

    or

    open -a "Google Chrome" https://www.youtube.com/watch?v=X0uYvQ_aXKw

    Do what you find fun. Oh and check out Richard Stallman. He's a good egg.

    Enjoy.

    edit-0

    forgot iTerm link

    edit-1

    Wow! Gold! Ha! Thank you. This is so unexpected! I'd like to thank the academy, my agent, my mom...

u/robscomputer · 2 pointsr/linuxadmin

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!

u/proverbialbunny · 5 pointsr/algotrading

Scott Meyers made Effective Modern C++ which has a lot of changes in the language documented and documented well. If you're proficient in C++ I highly recommend checking it out. (Or watch: https://youtu.be/xnqTKD8uD64)

The big one is ownership semantics leading to smart pointers.

The general rule of thumb is you should never use a raw pointer, except when you're not transferring ownership. Also, consider weak_ptr, and references, always references.

SFINAE in class, really? I'm impressed. Use constexpr if instead when you can (90% of the time). SFINAE should really only be used for firmware and library engineers and is on its way out, if concepts ever get finished.

Metaprogramming in C++? More like dark magic, taking advantage of C++17 plus SFINAE. No, I think you mean meta template programming, most likely. Meta template programming has been replaced with constexpr if as well. Don't do it, unless you like pranking your coworkers. You can write meta template programming to crashes IDEs when they try to read the file.

>data structure/algorithms (arrays/linked lists/trees/maps/stacks/queues/searching/sorting/graph searches and efficiency considerations)

That's more data structures than algorithms. I personally think algorithms are more important, but I digress:

std::deque is important, and no it's not a doubly linked-list. All the different hash and tree structures like std::unordered_multiset are super helpful to know, even if you never use them. Understanding sets and tuples too. None of this is specifically modern C++, except that most of these data types didn't exist or were incomplete 'till C++11. cppreference is super helpful and imho should be used regularly.

Oh and C++ has a whole slew of algorithm functions and classes now. Check them out on cppreference, but imho they're not super helpful like they are in Python or R. Really, learning how to make an algorithm is more important.

Oh, I've been rambling about old stuff. Okay back to modern: the different kinds of bracket initializations are important. Previously initialization had a lot of () in it, so auto foo = Bar(0);, should that be a () or a {}? Looking at it I can tell you it most likely should be auto foo = Bar{0}; but it's not a guarantee. I'd have to look at Bar's source code to verify.

There are modern idioms that should be considered, like aaa or almost always auto, and should be followed when possible and reasonable to do so.

Lets see, what else.. nullptr instead of NULL. A lot of the pre processor can be replaced with constexpr and constexpr if.

Ranges is definitely worth learning but that's a C++20ism. std::expected is super helpful to know but that's a C++20ism as well. (Just to know there are more ways to handle exceptions and which to use.)

They teach perfect forwarding in classes you go to? What classes are you taking? That's impressive. I'd say std::move is super important to know and understand, but it's a given if you understand ownership semantics.

Oh, there are new keywords. default and delete should be used liberally when creating a new class, in conjunction with the 0,3,5 idiom. override is important on the inheritance front, and imho should be enforced using a compiler flag.

Oh! Threading and file handling have had a complete over hall. Now C++ does it instead of using the OS' libraries. Threading is a bit of a sinkhole and should be known inside and out if you're working on your own project. If the project is large enough the framework should handle all of the threading for you. Otherwise, it is important. (eg, lockfree programming is kind of important in most situations.)

And of course lambdas. Super useful. No more void *. I can't believe I almost forgot them. Pass code around, not variables.

RVO is important when considering ownership semantics. Basically, don't std::move on return unless necessary. Don't return a pointer or a reference unless necessary.

Gosh there was something else..

Let's see, inheritance isn't taught right in any book or class I've seen. There is a prerequisite of understanding how to make types. This is important for quant work, because you'll probably be using custom types everywhere. Learning how to make them in C++ is important, not just use them, because it builds the prerequisite conceptual understanding for multiple inheritance.

Inheritance in Haskell terms is subtyping or abstract typing. Abstract classes (not necessarily fully abstract, just not concrete) are a type of class, sometimes called a subtype or abstract type. Inheritance isn't just for gluing code together. It's for having types of classes, or categories of classes. This is something understood on a senior level, but because it is so difficult to understand modern languages tend to just ban multiple inheritance out right. C++ has it, so understanding the thought process to not doing it right, but thinking about it right, is important.

I'm sure there is more. Oh, there is a new syntax Herb Sutter has been pushing which is pretty great, if the whole code base has it. .... and I can't find the video. The skinny is int foo(double bar) becomes auto foo(double bar) -> int. The philosophy is the function name should be as far as possible to the left hand side to make code more readable, because types can get stupidly long sometimes. The C++98 equiv, which thankfully most of the code bases I've worked on do:

int
foo(double bar)

Oh and std::variant combined with constexpr replaces unions.

Basically, if it's in C there is a C++ equiv. Use that instead. The exception is native types, and functions. Even loops have changed to range based for loops eg for(auto it : foo) and with std::for_each, though C style loops are still useful and used sometimes. Oh and structs are still around and can be popular, but std::variant or std::all might be a better option depending on what you're doing.

And the most important saved for last. Read http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines learn it, love it. For example, checkout F.15. Super helpful. This is official, so you can use it for coding disputes and what not.

phew \>.\<

u/empleadoEstatalBot · 1 pointr/argentina

> It’s hard to consolidate databases theory without writing a good amount of code. CS 186 students add features to Spark, which is a reasonable project, but we suggest just writing a simple relational database management system from scratch. It will not be feature rich, of course, but even writing the most rudimentary version of every aspect of a typical RDBMS will be illuminating.
>
> Finally, data modeling is a neglected and poorly taught aspect of working with databases. Our suggested book on the topic is Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World.
>
>
>
>
>
> ### Languages and Compilers
>
> Most programmers learn languages, whereas most computer scientists learn about languages. This gives the computer scientist a distinct advantage over the programmer, even in the domain of programming! Their knowledge generalizes; they are able to understand the operation of a new language more deeply and quickly than those who have merely learnt specific languages.
>
> The canonical introductory text is Compilers: Principles, Techniques & Tools, commonly called “the Dragon Book”. Unfortunately, it’s not designed for self-study, but rather for instructors to pick out 1-2 semesters worth of topics for their courses. It’s almost essential then, that you cherrypick the topics, ideally with the help of a mentor.
>
> If you choose to use the Dragon Book for self-study, we recommend following a video lecture series for structure, then dipping into the Dragon Book as needed for more depth. Our recommended online course is Alex Aiken’s, available from Stanford’s MOOC platform Lagunita.
>
> As a potential alternative to the Dragon Book we suggest Language Implementation Patterns by Terence Parr. It is written more directly for the practicing software engineer who intends to work on small language projects like DSLs, which may make it more practical for your purposes. Of course, it sacrifices some valuable theory to do so.
>
> For project work, we suggest writing a compiler either for a simple teaching language like COOL, or for a subset of a language that interests you. Those who find such a project daunting could start with Make a Lisp, which steps you through the project.
>
>
>
> [Compilers: Principles, Techniques & Tools](https://teachyourselfcs.com//dragon.jpg) [Language Implementation Patterns](https://teachyourselfcs.com//parr.jpg)> Don’t be a boilerplate programmer. Instead, build tools for users and other programmers. Take historical note of textile and steel industries: do you want to build machines and tools, or do you want to operate those machines?
>
> — Ras Bodik at the start of his compilers course
>
>
>
>
>
> ### Distributed Systems
>
> As computers have increased in number, they have also spread. Whereas businesses would previously purchase larger and larger mainframes, it’s typical now for even very small applications to run across multiple machines. Distributed systems is the study of how to reason about the tradeoffs involved in doing so, an increasingly important skill.
>
> Our suggested textbook for self-study is Maarten van Steen and Andrew Tanenbaum’s Distributed Systems, 3rd Edition. It’s a great improvement over the previous edition, and is available for free online thanks to the generosity of its authors. Given that the distributed systems is a rapidly changing field, no textbook will serve as a trail guide, but Maarten van Steen’s is the best overview we’ve seen of well-established foundations.
>
> A good course for which some videos are online is MIT’s 6.824 (a graduate course), but unfortunately the audio quality in the recordings is poor, and it’s not clear if the recordings were authorized.
>
> No matter the choice of textbook or other secondary resources, study of distributed systems absolutely mandates reading papers. A good list is here, and we would highly encourage attending your local Papers We Love chapter.
>
>
>
> [Distributed Systems 3rd edition](https://teachyourselfcs.com//distsys.png)
>
>
>
> ## Frequently asked questions
>
> #### What about AI/graphics/pet-topic-X?
>
> We’ve tried to limit our list to computer science topics that we feel every practicing software engineer should know, irrespective of specialty or industry. With this foundation, you’ll be in a much better position to pick up textbooks or papers and learn the core concepts without much guidance. Here are our suggested starting points for a couple of common “electives”:
>
> - For artificial intelligence: do Berkeley’s intro to AI course by watching the videos and completing the excellent Pacman projects. As a textbook, use Russell and Norvig’s Artificial Intelligence: A Modern Approach.
> - For machine learning: do Andrew Ng’s Coursera course. Be patient, and make sure you understand the fundamentals before racing off to shiny new topics like deep learning.
> - For computer graphics: work through Berkeley’s CS 184 material, and use Computer Graphics: Principles and Practice as a textbook.
>
> #### How strict is the suggested sequencing?
>
> Realistically, all of these subjects have a significant amount of overlap, and refer to one another cyclically. Take for instance the relationship between discrete math and algorithms: learning math first would help you analyze and understand your algorithms in greater depth, but learning algorithms first would provide greater motivation and context for discrete math. Ideally, you’d revisit both of these topics many times throughout your career.
>
> As such, our suggested sequencing is mostly there to help you just get started… if you have a compelling reason to prefer a different sequence, then go for it. The most significant “pre-requisites” in our opinion are: computer architecture before operating systems or databases, and networking and operating systems before distributed systems.
>
> #### Who is the target audience for this guide?
>
> We have in mind that you are a self-taught software engineer, bootcamp grad or precocious high school student, or a college student looking to supplement your formal education with some self-study. The question of when to embark upon this journey is an entirely personal one, but most people tend to benefit from having some professional experience before diving too deep into CS theory. For instance, we notice that students love learning about database systems if they have already worked with databases professionally, or about computer networking if they’ve worked on a web project or two.
>
> #### How does this compare to Open Source Society or freeCodeCamp curricula?
>
> The OSS guide has too many subjects, suggests inferior resources for many of them, and provides no rationale or guidance around why or what aspects of particular courses are valuable. We strove to limit our list of courses to those which you really should know as a software engineer, irrespective of your specialty, and to help you understand why each course is included.
>
> freeCodeCamp is focused mostly on programming, not computer science. For why you might want to learn computer science, see above.
>
> #### What about language X?
>
> Learning a particular programming language is on a totally different plane to learning about an area of computer science — learning a language is much easier and much less valuable. If you already know a couple of languages, we strongly suggest simply following our guide and fitting language acquisition in the gaps, or leaving it for afterwards. If you’ve learned programming well (such as through Structure and Interpretation of Computer Programs), and especially if you have learned compilers, it should take you little more than a weekend to learn the essentials of a new language.
>
> #### What about trendy technology X?
>

> (continues in next comment)

u/Orthak · 4 pointsr/mylittleandysonic1

The first thing that I would say is: If you're thinking or making something bigger than a Pong clone, dial it way back. Your not going to make something fantastic, or Hell even good, straight out of the gate. Think of one idea that you have, and stick only to that. Make something very small, you can always build on it as you progress.

As for resources, they're limitless. There are tons of engines, assets, tutorials, book, and anything else you'd want. I'll make a small list of things here to get you started, but I strongly suggest looking for other things that you'd need on your own. Research and critical tinging is paramount in this hobby/profession.

Engines:

  • Unity - Very powerful and free 2d/3d engine. Uses mainly a JavaScript dialect and C# for scripting. The asset store is a great built-in resource
  • GameMaker - Surprisingly powerful 2d only engine. Uses it's own language for scripting, and has excellent drag-n-drop scripting. It's been a while since I used it, but it was great from what I remember.

    Art:

  • OpenGameArt - I've used tons of assets from this site. They range in any quality/type that you could need.
  • Kenny.nl - Wonderfull asset packs, I've used one of their UI packs and it was great. I think these are also the guys that post free stuff to /r/gamedev every now and then.

    Music/Sounds:

  • FreeSound.org - Great resources. I've used many sounds from here, and they usually have just what I need.

  • as3sfxr - Create your own chipsounds! I've mad a bunch of stuff here if I needed something that sounded a bit less organic.

    Tutorials:

  • Cooking With Unity - Is fantastic. I've followed almost all of these, and I loved them. He does a really good job explaining the concepts, and the scale in difficulty isn't too seep.

    Books:

  • A Book of Lenses - I haven't gotten too far into it, but what I've read so far is great. Wonderful info on game design.

  • Game Programming Patterns - This is an awesome book to get into the programming aspect. The examples are written in C++, but can be implemented in any language. Also: The web version is totally free!

    That's about all I can think of quickly. It should be enough to get you off the ground.

    Have fun, and good luck!
u/MinMacAttack · 2 pointsr/leveldesign

Buying him computer hardware might be nice, but there's a lot of other ways to give something related to games and game design.

There's always a great big pound of dice. It's full of dice of assorted numbers of sides, and a game designer remotely interested in tabletop (which should be all of them) can use a healthy supply of dice for making tabletop games. There's always the fun of just rolling dice giant handfuls of dice. I'm out right now but I'll add the link when I get back home. Here's the link: Pound of dice

I'd also look into games he hasn't tried. BoardGameGeek has a lot of board games listed and reviewed that you could get, and of course there's always steam. For board games I'd recommend:

  • Red Dragon Inn, a fun party game for 2-4 that's best with 3+. You play as a bunch of adventurers after big dungeon raid and now they're spending gold at their local tavern and gambling. Can support more players with its sequels.
  • Monopoly Deal: A card game version of Monopoly, without the bullshit. Unlike it's big board game cousin, it actually plays out fairly quickly while still being focused on building monopolies to win the game. As a game player perspective it's a fun game, but also from a game designer's perspective it's interesting to see how this game re-imagines the original board game while being true to the source material and streamlining many of its game mechanics.
  • Carcassonne: A well known classic game that works well with 2-5 players where players build up a world of castles, farmland, and roads.
  • Bang the Dice Game: A game where the sheriff and his deputies face off against the outlaws but nobody knows who to shoot. At the start of the game players are given their roles in the conflict but only the sheriff shows who they are. The rest of the game involves social deduction to try to figure who everyone is supposed to be shooting, and trying to read past bluffs. The game works great for 5-8 players, and can work for 3-8.

    There's also a lot of books on game design you can get him. You may have to check to see if he owns some of these already, but I've found them to be great reads that I can recommend to anyone interested in game design.

  • Blood, Sweat, and Pixels: This is a book that tells "The Triumphant, turbulent stories behind how video games are made" and talks about the stories behind 10 different games from across the video game industry and what went on during development. I just bought this one and haven't gotten to chance to read it yet, but I'm excited to start it soon.
  • The Art of Game Design: This is one of the most well known books on game design that discusses a lot of what makes games work. I recommend it to anyone interested in game design.
  • Game Design Workshop: A Playcentric Approach to Creating Innovative Games: This book talks about everything that goes into how to design a game and some key differences on how some types of games work. It's more on the beginner/intermediate side, so some of it might be familiar to him.
u/MrBushido2318 · 20 pointsr/gamedev

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!

u/Cohesionless · 17 pointsr/cscareerquestions

The resource seems very extensive such that it should suffice you plenty to be a good software engineer. I hope you don't get exhausted from it. I understand that some people can "hack" the technical interview process by memorizing a plethora of computer science and software engineering knowledge, but I hope you pay great attention to the important theoretical topics.

If you want a list of books to read over the summer to build a strong computer science and software engineering foundation, then I recommend to read the following:

  • Introduction to Algorithms, 3rd Edition: https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844. A lot of people do not like this classic book because it is very theoretical, very mathematical, and very abstract, but I think that is its greatest strength. I find a lot of algorithms books either focus too much about how to implement an algorithm in a certain language or it underplays the theoretical foundation of the algorithm such that their readers can only recite the algorithms to their interviewers. This book forced me to think algorithmically to be able to design my own algorithms from all the techniques and concepts learned to solve very diverse problems.

  • Design Patterns: Elements of Reusable Object-Oriented Software, 1st Edition: https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/. This is the original book on object-oriented design patterns. There are other more accessible books to read for this topic, but this is a classic. I don't mind if you replace this book with another.

  • Clean Code: A Handbook of Agile Software Craftsmanship, 1st Edition: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882. This book is the classic book that teaches software engineer how to write clean code. A lot of best practices in software engineering is derived from this book.

  • Java Concurrency in Practice, 1st Edition: https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601. As a software engineer, you need to understand concurrent programming. These days there are various great concurrency abstractions, but I believe everyone should know how to use low-level threads and locks.

  • The Architecture of Open Source Applications: http://aosabook.org/en/index.html. This website features 4 volumes of books available to purchase or to read online for free. It's content focuses on over 75 case studies of widely used open-source projects often written by the creators of said project about the design decisions and the like that went into creating their popular projects. It is inspired by this statement: "Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters."

  • Patterns of Enterprise Application Architecture, 1st Edition: https://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420/. This is a good read to start learning how to architect large applications.

    The general theme of this list of books is to teach a hierarchy of abstract solutions, techniques, patterns, heuristics, and advice which can be applied to all fields in software engineering to solve a wide variety of problems. I believe a great software engineer should never be blocked by the availability of tools. Tools come and go, so I hope software engineers have strong problem solving skills, trained in computer science theory, to be the person who can create the next big tools to solve their problems. Nonetheless, a software engineer should not reinvent the wheel by recreating solutions to well-solved problems, but I think a great software engineer can be the person to invent the wheel when problems are not well-solved by the industry.

    P.S. It's also a lot of fun being able to create the tools everyone uses; I had a lot of fun by implementing Promises and Futures for a programming language or writing my own implementation of Cassandra, a distributed database.
u/CSMastermind · 4 pointsr/learnprogramming

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


  1. Cracking the Coding Interview: 189 Programming Questions and Solutions
  2. Programming Interviews Exposed: Coding Your Way Through the Interview
  3. Introduction to Algorithms
  4. The Algorithm Design Manual
  5. Effective Java
  6. Concurrent Programming in Java™: Design Principles and Pattern
  7. Modern Operating Systems
  8. Programming Pearls
  9. Discrete Mathematics for Computer Scientists

    Junior Software Engineer Reading List


    Read This First


  10. Pragmatic Thinking and Learning: Refactor Your Wetware

    Fundementals


  11. Code Complete: A Practical Handbook of Software Construction
  12. Software Estimation: Demystifying the Black Art
  13. Software Engineering: A Practitioner's Approach
  14. Refactoring: Improving the Design of Existing Code
  15. Coder to Developer: Tools and Strategies for Delivering Your Software
  16. Perfect Software: And Other Illusions about Testing
  17. Getting Real: The Smarter, Faster, Easier Way to Build a Successful Web Application

    Understanding Professional Software Environments


  18. Agile Software Development: The Cooperative Game
  19. Software Project Survival Guide
  20. The Best Software Writing I: Selected and Introduced by Joel Spolsky
  21. Debugging the Development Process: Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams
  22. Rapid Development: Taming Wild Software Schedules
  23. Peopleware: Productive Projects and Teams

    Mentality


  24. Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency
  25. Against Method
  26. The Passionate Programmer: Creating a Remarkable Career in Software Development

    History


  27. The Mythical Man-Month: Essays on Software Engineering
  28. Computing Calamities: Lessons Learned from Products, Projects, and Companies That Failed
  29. The Deadline: A Novel About Project Management

    Mid Level Software Engineer Reading List


    Read This First


  30. Personal Development for Smart People: The Conscious Pursuit of Personal Growth

    Fundementals


  31. The Clean Coder: A Code of Conduct for Professional Programmers
  32. Clean Code: A Handbook of Agile Software Craftsmanship
  33. Solid Code
  34. Code Craft: The Practice of Writing Excellent Code
  35. Software Craftsmanship: The New Imperative
  36. Writing Solid Code

    Software Design


  37. Head First Design Patterns: A Brain-Friendly Guide
  38. Design Patterns: Elements of Reusable Object-Oriented Software
  39. Domain-Driven Design: Tackling Complexity in the Heart of Software
  40. Domain-Driven Design Distilled
  41. Design Patterns Explained: A New Perspective on Object-Oriented Design
  42. Design Patterns in C# - Even though this is specific to C# the pattern can be used in any OO language.
  43. Refactoring to Patterns

    Software Engineering Skill Sets


  44. Building Microservices: Designing Fine-Grained Systems
  45. Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools
  46. NoEstimates: How To Measure Project Progress Without Estimating
  47. Object-Oriented Software Construction
  48. The Art of Software Testing
  49. Release It!: Design and Deploy Production-Ready Software
  50. Working Effectively with Legacy Code
  51. Test Driven Development: By Example

    Databases


  52. Database System Concepts
  53. Database Management Systems
  54. Foundation for Object / Relational Databases: The Third Manifesto
  55. Refactoring Databases: Evolutionary Database Design
  56. Data Access Patterns: Database Interactions in Object-Oriented Applications

    User Experience


  57. Don't Make Me Think: A Common Sense Approach to Web Usability
  58. The Design of Everyday Things
  59. Programming Collective Intelligence: Building Smart Web 2.0 Applications
  60. User Interface Design for Programmers
  61. GUI Bloopers 2.0: Common User Interface Design Don'ts and Dos

    Mentality


  62. The Productive Programmer
  63. Extreme Programming Explained: Embrace Change
  64. Coders at Work: Reflections on the Craft of Programming
  65. Facts and Fallacies of Software Engineering

    History


  66. Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software
  67. New Turning Omnibus: 66 Excursions in Computer Science
  68. Hacker's Delight
  69. The Alchemist
  70. Masterminds of Programming: Conversations with the Creators of Major Programming Languages
  71. The Information: A History, A Theory, A Flood

    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.

  72. Peter Norton's Assembly Language Book for the IBM PC
  73. Expert C Programming: Deep C Secrets
  74. Enough Rope to Shoot Yourself in the Foot: Rules for C and C++ Programming
  75. The C++ Programming Language
  76. Effective C++: 55 Specific Ways to Improve Your Programs and Designs
  77. More Effective C++: 35 New Ways to Improve Your Programs and Designs
  78. More Effective C#: 50 Specific Ways to Improve Your C#
  79. CLR via C#
  80. Mr. Bunny's Big Cup o' Java
  81. Thinking in Java
  82. JUnit in Action
  83. Functional Programming in Scala
  84. The Art of Prolog: Advanced Programming Techniques
  85. The Craft of Prolog
  86. Programming Perl: Unmatched Power for Text Processing and Scripting
  87. Dive into Python 3
  88. why's (poignant) guide to Ruby
u/hell_onn_wheel · 13 pointsr/Python

Good on you for looking to grow yourself as a professional! The best folks I've worked with are still working on professional development, even 10-20 years in to their profession.

Programming languages can be thought of as tools. Python, say, is a screwdriver. You can learn everything there is about screwdrivers, but this only gets you so far.

To build something you need a good blueprint. For this you can study objected oriented design (OOD) and programming (OOP). Once you have the basics, take a look at design patterns like the Gang of Four. This book is a good resource to learn about much of the above

What parts do you specify for your blueprint? How do they go together? Study up on abstract data types (ADTs) and algorithms that manipulate those data types. This is the definitive book on algorithms, it does take some work to get through it, but it is worth the work. (Side note, this is the book Google expects you to master before interviewing)

How do you run your code? You may want to study general operating system concepts if you want to know how your code interacts with the system on which it is running. Want to go even deeper with code performance? Take a look at computer architecture Another topic that should be covered is computer networking, as many applications these days don't work without a network.

What are some good practices to follow while writing your code? Two books that are widely recommended are Code Complete and Pragmatic Programmer. Though they cover a very wide range (everything from organizational hacks to unit testing to user design) of topics, it wouldn't hurt to check out Code Complete at the least, as it gives great tips on organizing functions and classes, modules and programs.

All these techniques and technologies are just bits and pieces you put together with your programming language. You'll likely need to learn about other tools, other languages, debuggers and linters and optimizers, the list is endless. What helps light the path ahead is finding a mentor, someone that is well steeped in the craft, and is willing to show you how they work. This is best done in person, watching someone design and code. Also spend some time reading the code of others (GitHub is a great place for this) and interacting with them on public mailing lists and IRC channels. I hang out on Hacker News to hear about the latest tools and technologies (many posts to /r/programming come from Hacker News). See if there are any local programming clubs or talks that you can join, it'd be a great forum to find yourself a mentor.

Lots of stuff here, happy to answer questions, but hope it's enough to get you started. Oh, yeah, the books, they're expensive but hopefully you can get your boss to buy them for you. It's in his/her best interest, as well as yours!

u/DiggyDog · 9 pointsr/gamedev

Hey there, I'm a game designer working in AAA and I agree with /u/SuaveZombie that you'll probably be better off with a degree in CS. BUT... don't give up on wanting to be a designer!

 

You should realize that it's not giving up on your dream at all, in fact, it's great advice for how to reach that dream. A designer with an engineering background is going to have a lot more tools at their disposal than one who doesn't.

 

Design is way more than just coming up with a bunch of cool, big ideas. You need to be able to figure out all the details, communicate them clearly to your teammates, and evaluate how well they're working so you can figure out how to make something people will enjoy. In fact, working on a big game often feels like working on a bunch of small games that all connect.

Take your big game idea and start breaking it down into all the pieces that it will need to be complete. For example, GTA has systems for driving and shooting (among many other things). Look at each of those things as its own, smaller game. Even these "small" parts of GTA are actually pretty huge, so try to come up with something as small as possible. Like, super small. Smaller than you think it needs to be. Seriously! You'll eventually be able to make big stuff, but it's not the place to start. Oh, and don't worry if your first game(s) suck. They probably will, and that's fine! The good stuff you make later will be built on the corpses of the small, crappy games you made while you were learning.

 

If you're truly interested in design, you can learn a lot about usability, player psychology, and communication methods without having to shell out $17k for a degree. Same goes for coding (there are tons of free online resources), though a degree will help you get in the door at companies you might be interested in and help provide the structure to keep you going.

 

Here's some books I recommend. Some are specific to games and some aren't, but are relevant for anything where you're designing for someone besides yourself.

 

Universal Principles of Design

The Design of Everyday Things

Rules of Play

The Art of Game Design This and the one below are great books to start with.

A Theory of Fun This is a great one to start with.

Game Feel

• Depending on the type of game you're making, some info on level design would be useful too, but I don't have a specific book to recommend (I've found pieces of many books and articles to be useful). Go play through the developer commentary on Half-Life 2 or Portal for a fun way to get started.

 

Sounds like you're having a tough time, so do your best to keep a positive attitude and keep pushing yourself toward your goals. There's nothing to stop you from learning to make games and starting to make them on your own if that's what you really want to do.

Good luck, work hard!

u/VA_Network_Nerd · 2 pointsr/ITCareerQuestions

> Could you please go more in-depth on what you mean by seeing how the components work in harmony and understanding the needs of the different ones?

The absurdly short and easy for me response is:

https://www.amazon.com/Network-Warrior-Everything-Need-Wasnt/dp/1449387861

https://www.amazon.com/Practice-System-Network-Administration-Enterprise/dp/0321919165

The longer and more useful response would best be shared in a pub, assisted by frothy adult beverages of wisdom.

But, I'll give it a shot using the restrictive written word as a medium.

The CCNA certification will teach you the fundamentals of network design & configuration.
The MTA or MCSA certifications will teach you the fundamentals of Windows client and server design & configuration.

But what they don't tell you is when is a Catalyst 2960-series switch the right tool for a task, and what is something beefier like a Nexus 3K or 5K series device the more appropriate tool.

The driving factors behind appropriateness is in the details of the requirements.

Client devices (if we ignore WiFi) seldom have redundant network connections.
So laptops & desktops do not require redundant Layer-1/2 connectivity.
But all servers have, or should be equipped with redundant NICs, capable of some form of teaming configuration to form an active/active, or active/passive redundant team. The LAN solution must be compatible with this.

Then traffic volume. Client devices do not generally require frequent, sustained high volume network flows. Most client systems burst occasionally while they open a file, then settle back down to idle-chatter as they check e-mail every minute or so.

Some servers, like a DNS server receive never-ending, continuous bursts of small packet exchanges. Ass-loads of them. From thousands of source-addresses. Just a dozen packets in the conversation, which is then broken down and ended - conversation over.

Other servers, like a Hadoop cluster-member will chuck along fairly-quietly for short to medium periods of time, then engage in massive, sustained bursts of replication traffic or query exchanges.

Small, short conversations do not require extensive network buffering capability, and are not generally latency-sensitive. So general-purpose LAN hardware might be an appropriate tool for the job.

But very heavy workloads, or loads that ARE latency-sensitive (High Performance Computing, for example) might demand specialized network hardware designed for such activities.

-----

Beyond the network, one must understand the application workloads.
Some applications or systems might make ass-loads of DNS lookups.
A DNS query is not a complicated, or network-capacity intensive workload.
But if you know the application will be doing it, and will benefit from low-latency access to a DNS server, deploying an additional DNS server very close to the application might make a lot of sense.


-----

> There is one other school I have been considering. <AAS @ Green River>

I roll my eyes at the inclusion of CompTIA A+ material in a college curriculum.
That just strikes me as such a trade-school topic.
It's not bad material, but its like learning to change automotive oil as part of a mechanical engineering curriculum.

I see two Linux classes and two Network classes, so those things make me happy.
But I don't get a sense that this degree will transfer well.
I see things that should make you employable though.

The A+ cert won't get you a guaranteed job.
But the A+ and Sec+, combined with that array of associated educational topics should prepare you to hold your own in a reasonable interview.
Nothing is guaranteed, but that should be adequate.

-----

> How do you feel about a Business Degree with an (M)IS major vs a Bachelors of Science in Information Technology (maybe with a business minor)?

No objection from me on these degrees. Some of them do a better job of making sure you can see & speak-to the bigger picture, or higher altitude view of why these IT systems are important to the business.

IMO: Project Management is NOT an early-career role, but Systems Analysts, as players on a project team is certainly something early-career staff can perform.


> Do you think having a BBA would be detrimental for a career in technology?

Nope. knowledge trumps education.

> I hear some people say that MIS degrees aren't technical enough, or that they have a hard time finding a job after graduation.

Well, an MIS degree probably isn't technical enough for some job roles or position descriptions.
But an MIS degree with a CompSci minor might do the trick, for some roles.

But let's be honest, an MIS degree, all by itself is not the right degree for a position like "Lead Enterprise Architect for Mobile Application Development".

But an MIS degree, plus 9 years of experience developing software might be the right combination of education & experience for that role.

Let's also look at MIS v/s CS and IS/IT objectively, analytically.


Every single student in a college or university damned well knows that a CompSci degree is a fast-path to stable employment.
It's not quite a golden ticket for fame & fortune, but its among the most in-demand and immediately employable degrees available.

Employers & recruiters / placement agencies are actively searching for graduates that can survive a basic interview without drooling on themselves or sexually assaulting the recruiter.

There is a fixed and steady pipeline for CompSci graduates.

But CS includes a lot of big scary math, some of the biggest math requirements for any undergraduate degree track. And this scares away a lot of applicants.

A pecking order of "CompSci-light" degree options forms up, with these students all trying to get a degree that qualifies them to attend the Technology career fair, but protects them from evil math.

InfoTech, with it's focus on the nuts & bolts of operating systems, databases, networks & security proudly in a top-level tier beneath CompSci, and Computer Engineering. We rub elbows with Software Engineering grads who swear SoftEng is better, & more useful than CompSci.

InfoSystems, is watered-down InfoTech with more database and business-focus, and fewer nuts & bolts courses.

Management Info Systems is even more watered down technology material, with even more emphasis on business administration & data.


IS & MIS ARE useful degrees, and those roles ARE truly beneficial to the organization.
But the pipeline is smaller for those degrees within the Technology Career Fair.

But here is the fun fact for IS and MIS degrees:
They can attend the non-technology career fair if they want to.

IS & MIS might not have been highly in-demand at the technology career fair, but you have a whole different recruiting team with a completely different variety of slots to fill at the non-tech fair. IS & MIS starts looking much better & more attractive in this environment where they are actually hiring more project managers & analysts as opposed to developers & engineers.

-----

Some colleges, especially community colleges might only have a single career fair, but the concept still applies. MIS is valid for both technology and non-technical (less-technical) positions.

u/Vitate · 2 pointsr/cscareerquestions

My Story

Hey pal, I was in a similar boat about 8 months ago. It was my senior year as an Economics major, and after taking a programming class, I instantly fell in love with it. I crammed a few more programming classes in before graduating, but in the end, I sure as hell wasn't employable as a software engineer.

​

I had a choice: become a data analyst (the path I was currently on) or follow the software engineering dream. I chose the latter.

​

I decided to go to a (remote) coding bootcamp after college. The program was 6 months. It taught web development (Node, React) and some very basic CS fundamentals. I spent my free time outside the bootcamp inhaling all the computer science and industry information I could. I did this because I wanted to be a competent programmer. I found it fun.

​

This week I had my second onsite. I expect to receive a full-time software engineer offer (my second offer so far) later today, and I have 4 other onsites in the near future (a big 4 + a few startups). It has been a heck of a lot of work to get here, but if you want it badly enough, it's possible.

​

My Tips

  • Try not to be intimidated by these tips. Software engineering is something that you take little bites out of. You cannot become an employable developer in one bite, and sometimes the field can be intimidating.
  • Your options right now are self-teaching, a coding bootcamp, or a CS master's degree (might be hard to get into a good program without a bit more relevant experience, tbh.).
  • It's going to be pretty difficult to break into anything other than web development for your first programming job without a CS degree. Titles like Front-end Engineer, Full Stack Engineer, Backend Engineer, and Software Engineer (at a web company) are within reach. More specialized titles probably aren't very realistic.
  • Basic toy projects (i.e., simple HTML/CSS or similar) probably aren't enough to get significant attention. You need things more complex, like full-stack applications built from scratch. This means a working backend, a working database, a modern front-end (using a framework like React, etc.). Here's my portfolio if you're curious about the type of apps I mean.
  • Other types of programming applications outside of web dev are also fine, as long as they are sufficiently complex and interesting.
  • Put your projects on your GitHub no matter what. Learning how to commit code to GitHub is an important industry practice. Having a green GitHub history makes you look better.
  • Try and build a portfolio once you get better at coding. Don't kill yourself making it look amazing, but do try and make it look good. Not everyone will care about your portfolio, but some people will. I got an interview just based on having a nice portfolio.
  • Your university course sounds like a great primer, but you need to go deeper to be competent enough to pass interviews. I took similar courses at my university, but what really helped me was going through a few textbooks (1, 2, 3 -- some suggestions) and watching MIT 6.006 lectures. You will still have gaps in things like web security, scaling systems, networks, and operating systems, but I wouldn't spend a ton of time learning those topics as a new grad. Knowing the basics can be helpful though, because these things do definitely come up in interviews.

    ​

    Happy to answer any other questions you may have. I'm not an expert or an experienced software engineer yet, but I've walked the path you're considering, so hopefully my tips are helpful.
u/OmegaNaughtEquals1 · 1 pointr/cpp_questions

Welcome! You are showing great initiative in learning C++ and asking for feedback says that you are very serious about it!

A few words on your repository.

  1. Don't include binary files in git. Git is rather bad at versioning binary files and they just bloat your repository.
  2. Including a file structure without VS solution stuff and adding a Makefile for those of us who don't use Windows is always appreciated. :)

    A few items on the code.

    It doesn't compile out-of-the-box with gcc. I understand that this is just a practice project that you probably won't be officially distributing and supporting, but it never hurts to get in the mindset of cross-platform development early. For non-Windows environments, gcc is pretty much the de facto target compiler (others include clang, icc, and open64). Hence, it is well worth the effort to ensure you compile (preferably warning free!) under gcc. The errors were

  3. In vec3d.h and quaternion.h, you need to #include <cmath> to use std::sqrt, std::cos, and std::sin. You might need a preprocessor guard around the include since VC didn't have a problem with it. Additionally, <cmath> gives you M_PI so you don't have to #define your own.
  4. no match for ‘operator’ (operand types are ‘vec3’ and ‘quaternion’)

    I have no idea how this compiled in VC

    vec3 getForwardVector()
    {
    return vec3(0, 0, 1)
    this;
    }

    inline vec3 operator
    (vec3 &v, quaternion &q)
    {
    quaternion result = quaternion();
    result = q v q.conjugate();
    return vec3(result.x, result.y, result.z);
    }

    When you say vec3(0, 0, 1), you are generating what is known as an r-value (its name comes from the fact that it is usually something that is on the right of an assignment statement). You are passing this r-value into a function that expects an l-value (a thing on the left of an assignment statement). In general, this is not allowed (and for good reason!). What would happen in the following:

    void foo(int &i) {
    i = 2;
    }
    foo(3);

    The value 3 is a perfectly good r-value, but what happens when I execute i = 2 in foo? Badness, that's what. How can I possibly change 3 to 2? I would break the universe. :p So it's just not allowed.

    However, there are two ways that you can pass an r-value to an l-value parameter. The first is through a const l-value.

    void foo(const int &i) {
    // I can't change i because it's const!
    std::cout << "i = " << i << std::endl;
    }
    foo(3);

    The second is through what Scott Meyers calls "universal references." I need a slightly more complicated example to demonstrate this.

    struct foo {
    int x, y, z;
    foo(int _x, int _y, int _z) : x{_x}, y{_y}, z{_z} {}
    };

    foo bar(foo &lhs, foo &&rhs) {
    return foo(lhs.x+rhs.x,lhs.y,lhs.zrhs.z);
    }

    foo f{1,2,3};
    auto x = bar(f, foo(4,5,6));
    std::cout << "x.x = " << x.x << std::endl;

    What does this print? 5 You can use either of these forms to fix your `inline vec3 operator
    function. Notice that I didn't putconston the first parameter. This was purely to demonstrate thatfis an l-value and doesn't require being calledconstin the parameter list. However, it is good form to addconstto any l-value parameter that you are not intending to change. I *strongly* recommend a read through Scott's excellent book [Effective Modern C++](http://www.amazon.com/Effective-Modern-Specific-Ways-Improve/dp/1491903996/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1425771559&amp;amp;sr=1-1&amp;amp;keywords=scott+meyers). It is just chock full of great nuggets of wisdom like these.<br /> <br /> Wow. Another complete mystery as to why this compiles in VC (given what I just discussed, can you decipher the compiler error?)<br /> <br /> quaternion &amp;amp;q = m_camera-&amp;gt;getTransform().getRotation();<br /> <br /> &amp;gt; invalid initialization of non-const reference of type ‘quaternion&amp;amp;’ from an rvalue of type ‘quaternion’<br /> <br /> Does Visual Studio Express allow you to upgrade VC++ separately from VS iteself? If so, you need an upgraded compiler because this one stinks. Once you have mastered the art of l-value vs. r-value, you have lots of code to update as there are many errors surrounding this concept in your current code.<br /> <br /> While technically not an error, it is generally inefficient to pass primitive types by reference when you aren't going to be modifying them (the debate about using non-const references as in-out parameters rages to this day!). For example,<br /> <br /> static vec3 refract(vec3 &amp;amp;I, vec3 &amp;amp;N, float &amp;amp;NdotI, float &amp;amp;eta, float &amp;amp;cos_t)<br /> <br /> should really just be<br /> <br /> static vec3 refract(vec3 &amp;amp;I, vec3 &amp;amp;N, float NdotI, float eta, float cos_t)<br /> <br /> Ok. Errors out of the way. How can you make your code more C++-y? I promise I don't intend to sound pithy, but the Java is strong with you. :p Let's take that previous example.<br /> <br /> struct vec3 {<br /> /* lots of stuff! */<br /> <br /> static vec3 refract(vec3 &amp;amp;I, vec3 &amp;amp;N, float NdotI, float eta, float cos_t)<br /> }<br /> <br /> In Java, this makes sense since you aren't allowed to have free functions. But this is C++ and we do have them and folks are going to anticipate you have them rather than class-static methods.<br /> <br /> struct vec3 {<br /> /* lots of stuff! */<br /> }<br /> <br /> vec3 refract(const vec3 &amp;amp;I, const vec3 &amp;amp;N, float NdotI, float eta, float cos_t)<br /> <br /> Much better! :D (NB: notice that I addedconstto the input parameters? This is good form, too.)<br /> <br /> Alright. I think I have badgered you enough. Definitely keep us apprised of how the project evolves and don't be afraid to ask lots of questions!<br /> <br /> **EDIT**: fixed typos and added clarifications.<br /> <br /> **EDIT2**: Gavestruct foo` a non-default constructor so it will compile.

    EDIT3: Gold! Thank you, kind stranger.
u/Wiggledan · 7 pointsr/C_Programming

I've been self-teaching myself C through various books/courses/series the last few months (I'm still not that great), and so I have some suggestions about good places to start learning.

Books:

  • The C Programming Language AKA "K&amp;R" by developers of C - It's short/concise and simple, but covers the whole language (because there's not that much syntax to cover), and tons of people swear by it like a bible.
  • C Programming: A Modern Approach by K. N. King - This book is much larger and more in depth than K&amp;R, with around 800 pages and lots of examples and exercises. It's essentially a college textbook and is actually used in colleges.
  • Learn C the Hard Way by Zed Shaw - This one is free and online. I like it because it focuses more on you figuring out things on your own by breaking the code in various ways and having an absolute understanding of every line, rather than just having you copy everything and telling you how it works

    Courses/Videos:

  • [Harvard CS50x](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x) - An awesome, free online course with high production lectures, and helpful videos/tips if you get stuck. It mostly covers C, but it does go into other things (that are still worth knowing) at the very beginning and end.

  • A Free Course for C Beginners by Carl Herold - Not really a full course, just most of the videos. I found this very recently, and the original website doesn't exist anymore. It goes at a very relaxed pace and explains things incredibly well in a way that you will remember. These videos really solidified/helped my understanding of binary, hex, and pointers. I highly, highly recommend it over anything else if you're just starting out.
  • Handmade Hero by Casey Muratori - You can watch and follow along with this guy as he programs a video game from scratch in C. He streams every weekday, usually has a Q&amp;A after, and puts every video up on YouTube. The series starts off with a sort of rushed intro to C, and honestly the whole thing is always at a fast pace and can feel complicated. But that's what it takes to make a game from scratch, and he takes time to explain what everything means. Plus it's mostly all very interesting and useful.

    Resources:

  • Google - google everything, or Bing it, I don't care
  • Stackoverflow - someone probably asked your question before, especially with C
  • /r/dailyprogrammer - Great daily challenges. These are like working out your programming muscles.
  • /r/learnprogramming - Occasional posts about C, and you can ask/find your questions here as well
  • Online C Compiler - A convenient compiler that you can use anywhere to play with simple programs using C standard library functions.

    Other than that, you should maybe look into trying out Linux, because it's more developer-friendly than Windows (such as having a C compiler out of the box). And the whole kernel and many core components of the OS are written in C, which are all usually open source, so you can learn from, and contribute to them.

    Good luck, friend.
u/Aeiorg · 43 pointsr/gamedev

First of all, I wouldn't recommend learning game coding by looking at a codebase, the biggest reason being that all games are different and are using different techniques (obvious one being 2D vs 3D, but you have tons of differences between a FPS, a RTS, an open-world, etc).

I would recommend to find books or articles that explain why a certain technique is usefull, the coding language doesn't really matter, the technique itself is what is important (As you are saying it's for learning purposes and I don't think it's quite interesting to understand data-driven programming, cache optimization or 3D APIs optimization for C++ when you are first trying to understand a game structure).

I can recommend two really good books :

u/RoguelikeDevDude · 4 pointsr/gamedev

Book suggestions? Now that's my jam.

Out of all the books i've read, here are my recommendations regarding game programming:

Eric Lengyel's Books (only one out so far). This is aimed at game engine development, but if the 2nd onward are as indepth as the first, they will be amazing fundamental knowledge. Also, they're not thick, and jam packed with information.

Game Programming Patterns. The only book that comes more recommended than this is the one right below it by Jesse Schell. This book is fantastic, but you should write one or two small games to really get the most out of this book. You can also read it online on his website free, but then you don't get a pic of him and his dog on the back cover.

Book of Lenses. This is your intro/intermediate dive into game design. There are a lot of game design books, if you only read one, it should be this one.

Gane AI By Example. This book is a hodgepodge of fantastic techniques and patterns by those in AAA. There are other books on the series (like Game AI Pro) which are similar, but in my opinion (at least when I read AI PRO 3), they're not as good. But more knowledge is never bad.

Truthfully, as I sit here looking over all my books, those are the only ones i'd consider mandatory for any seasoned developer. Of course plenty of developers get by without reading these books, but they likely pick up all the principles listed herein elsewhere, in bits and pieces, and would likely have benefited having read them early on.

Here are a few others that I do recommend but do NOT consider mandatory. Sorry, no links.

Unity in Action. Personally, I recommend this or a more interactive online course version (udemy.com/unitycourse) if you want to learn unity while having a resource hold your hand. Having read the book, taken the course, AND taken Unity's own tutorials on the matter, i'd order them in order from Course being best, book second, videos from unity third. But none of them are bad.

Game Engine Architecture. This is the king for those who want a very broad introduction to making a game engine. It comes highly recommended from nearly anyone who reads it, just so long as you understand it's from a AAA point of view. Game Code Complete is out of print and unlikely to be revisited, but it is similar. These are behemoths of books.

Realtime rendering. This is one I haven't read, but it comes very highly recommended. It is not an intro book, and is also over 1000 pages, so you want this along side a more introductory book like Fundamentals of computer graphics. Truth be told, both books are used in courses in university at the third and fourth year levels, so keep that in mind before diving in.

Clean code. Yeah yeah it has a java expectation, but I love it. It's small. Read it if you understand Java, and want to listen to one of the biggest preachers on how not to write spaghetti code.

Rimworld guy, Tynaan sylvester I believe, wrote a book called Designing Games. I enjoyed it, but IMO it doesn't hold a candle to Jesse Schell's book. Either way, the guy did write that book after working in AAA for many years, then went on to create one of the most successful sim games in years. But yeah, I enjoyed it.

Last but not least, here are some almost ENTIRELY USELESS but interesting diagrams of what some people think you should read or learn in our field:

https://github.com/miloyip/game-programmer

https://github.com/utilForever/game-developer-roadmap

https://github.com/P1xt/p1xt-guides/blob/master/game-programming.md

u/coned88 · 1 pointr/linux

While being a self taught sys admin is great, learning the internals of how things work can really extend your knowledge beyond what you may have considered possible. This starts to get more into the CS portion of things, but who cares. It's still great stuff to know, and if you know this you will really be set apart. Im not sure if it will help you directly as a sys admin, but may quench your thirst. Im both a programmer and unix admin, so I tend to like both. I own or have owned most of these and enjoy them greatly. You may also consider renting them or just downloading them. I can say that knowing how thing operate internally is great, it fills in a lot of holes.

OS Internals

While you obviously are successful at the running and maintaining of unix like systems. How much do you know about their internal functions? While reading source code is the best method, some great books will save you many hours of time and will be a bit more enjoyable. These books are Amazing
The Design and Implementation of the FreeBSD Operating System

Linux Kernel Development
Advanced Programming in the UNIX Environment

Networking

Learning the actual function of networking at the code level is really interesting. Theres a whole other world below implementation. You likely know a lot of this.
Computer Networks

TCP/IP Illustrated, Vol. 1: The Protocols

Unix Network Programming, Volume 1: The Sockets Networking API

Compilers/Low Level computer Function

Knowing how a computer actually works, from electricity, to EE principles , through assembly to compilers may also interest you.
Code: The Hidden Language of Computer Hardware and Software

Computer Systems: A Programmer's Perspective

Compilers: Principles, Techniques, and Tools

u/Verdonkeremaand · 7 pointsr/GetMotivated

Thanks, I share your feeling. The first time I visited this subreddit I was looking for similar posts. I wondered how people could combine Reddit with their busy life or how they would be able to indeed create stuff by at the same time consuming so much. I could not find any of this idea at that time and I just kept surfing until a few months ago when I started frequenting Reddit less and less.

In the meantime I did not stop thinking about it, read The Shallows by Nicholas Carr and wondered how people could combine all this easy, distracting input (Reddit, Facebook, just surfing in general) with bigger things that require no distractions or 'alone time', like reading, learning a new language, or in your case hoolahooping with fire. My conclusion was that you can't. If you want to go for it, you just have to go for it.

Of course you can combine Reddit with taking a test, but you can not combine it with finishing cum laude. I also realised though that this does not count for most people, they can combine these things, but they do not have the intention to become the new Einstein. It is a whole different discussion if this should even be a personal goal, but my idea was that these new Einsteins are so into the achieving of their dream that this would be really hard to combine with the great entertainment part of the internet and our society. It requires an opt-out, you will have to be an einzelganger at some times and that is exactly what what internet tries to prevent.

You worded this very well in your statement and I agree wholeheartedly. As you can see I'm still on Reddit but not for long. The past few months when I paid Reddit a visit I noticed that the lesser frequency of my visits also made me see the content better. And although I'm subscribed to a whole lot of interesting subreddits and described from all these fun things, I still noticed that I did not need all of this. It gave me a sense of passivity that I should not want in my life.

Nevertheless there are a lot pro-arguments to this website and I see that as well. Because I'm living in the Netherlands, I do not necessarily have to suffer some of the ills that the United States is made of. I can really understand that you need some inspiration of sanity if you live in a small conservative town where everyone is the personal friend of Jesus. So yeah, Reddit should inspire you, but maybe more as in a caravanserai. You meet a lot of new and interesting people, have a good night's sleep and travel on. Staying there also means that you will not arrive at your destination.

The people who say that you should do everything in moderation do not see that this is really hard for some people, but these are the same people that will give you some of the most interesting stuff. They can immerse themselves, lose themselves in Reddit or alike, but if they learn to use this energy in a more enduring way they can use it to write books, build houses or govern countries (just some examples).

In my view it works just like torrents. You have the seeders, who make things. They put in the effort. They show themselves once they finish their product. Their creations will surprise or disappoint. Then, there are the leechers. They wait. They need the seeders and they will criticize or praise the products of the seeder. Most of the time a seeder also leeches, but a lot of leechers tend to forget that they can also be seeders.

TL;DR: Reddit should inspire you, but maybe more as in a caravanserai. You meet a lot of new and interesting people, have a good night's sleep and travel on. Staying there also means that you will not arrive at your destination. Just like torrents, the society consists of seeders and leechers. The OP decided he wanted to be a seeder, I as well.

u/Deightine · 3 pointsr/AskTechnology

If you are going to be a one-man IT solution, your work will break down four ways, each of which are a specialty unto themselves and will require different amounts of your effort at different times of the year. I'm going to go into a bit more than reading material, because frankly, you should have some warning about what the future might bring.

  • Hardware
  • Software
  • Networking
  • Inventory Management

    All four will require setup, upgrade, and troubleshooting in event of breakdown or customer complaint. The exception here is that your other coast's IT department probably has an inventory system already in place, you'll just want to get to know it well. Also, learn all about how your company handles shipping (which shipper they use, how they charge, who has authority to approve shipping, etc) and what security rules are in place for storing company equipment and data.

    In terms of Hardware, get and read just about any A+ book. It's going to be boring--I warn that in advance--but I've learned a ton of useful things from every A+ book I've looked at. The best one I've read is CompTIA's own A+ book because of how well put together it is, plus its written by the guy who writes the tests. There are a lot of things you may never use, but it makes a great reference, and your IT department might cover certification. Which becomes a great argument point for receiving a raise later.

    As for Software... that will change based on every software package you ever handle. Ask the distant IT team if they have a knowledgebase, and if so, what it will take to access it. If they don't, compile yourself a bookmarks list for the forums of every piece of software you will use regularly. If its Microsoft software, Google will work just fine. The problems tend to be so widespread that answers will jump up. They won't always work, but it'll help you troubleshoot. Also find out how the company handles its software licenses. That can be a real headache.

    Now the networking... That gets a bit more complicated. Depending on what your office is using for their network, it could be as easy as flipping power on and off on a few boxes hooked up to a broadband connection. If its more complicated, you'll want to learn about what solution is used for network administration. Good odds if its a major company that they'll be using Windows servers and Active Directory. Find out and learn about their account management solution. As for network hardware... you'll probably need to lean on the bigger IT team for awhile until you get comfortable with it. Proactively learn about routers, switches, domain controllers, DNS servers, and anything their Wikipedia pages link to that doesn't read like a Latin textbook. Most of your job won't be dealing with the theory, it will be trying to figure out where in the hose it is kinked, so that you can keep the Internet flowing and computers talking to each other. Learn about LAN cables and the different speeds, that'll help as well.

    For inventory, well, hopefully that's all in place. If not, secure a locked space if one isn't already in use. Talk to whoever is in charge of your facility and at least try to get a secure closet with a lock. You'll probably want to request a small supply of replacement parts or whole computers, dependent on what your overall IT department uses as their policy. Find out if they lease the hardware, and track everything you receive, ship, or disburse in a log. Keep that log backed up somewhere really safe. Track inventory info, serial numbers, company designations (if they're tagging hardware), dates of activity, and notes on things like shipping numbers. This will save your butt often.

    Good chance that for the first while, your job will be the same every entry level IT person ends up doing for awhile... You'll be someone else's hands. You'll have a problem, you'll try to fix it, you'll find out you can't or don't have privileges to do it, then you'll ask for help... then that person who would normally fly out to you will have you do the things on your end that they normally would, so they can finish things at their end. You'll be their hands in place. It can feel like monkey work, but eh, it can be a lot worse. You could be Migrating XP machines to Windows 7 for 3-10 months on 3rd shift, locked in a basement or storage unit. Folks all across North America have been enjoying that experience over the past 2-3 years.
u/balefrost · 1 pointr/AskProgramming

OK, a few things:

It looks like you're trying to build a shift/reduce parser, which is a form of an LR parser, for your language. LR parsers try to reduce symbols into more abstract terms as soon as possible. To do this, an LR parser "remembers" all the possible reductions that it's pursuing, and as soon as it sees the input symbols that correspond to a specific reduction, it will perform that reduction. This is called "handle finding".

&gt; If I am correct, my Automaton is a DFA?

When the parser is pursuing a reduction, it's looking for sequences of symbols that match the right-hand sides of the relevant (to our current parse state) productions in our grammar. Since the right-hand sides of all the productions in a grammar are simple sequences, all the handle finding work can be done by a DFA. Yes, the handle recognizer of your parser is a DFA. But keep in mind that it needs to be combined with other parts to make a full parser, and your actual grammar can't be recognized with just a DFA.

In particular, you've shown the ACTION table for a shift/reduce parser. It determines what to do when you encounter a symbol in the input stream. But a shift/reduce parser typically needs a second table as well - the GOTO table - that determines what to do after a reduction has taken place.

One other thing that's worth mentioning: you've expressed your ACTION table as a plain DFA transition table. That's not necessarily wrong, but it's not commonly done that way. Instead of reducing when you reach a certain state, it's common to instead attach an action - either 'shift' or 'reduce' ('accept') - to each transition itself. So in a shift/reduce parser, your table might look more like this:

| [ | ] | &lt; | &gt; | id | / | attr
----+-----+-----+-----+-----+------+-----+--------
0 | S1 | | S4 | | | |
1 | | | | | S2 | | R3 : Reduce Tag -&gt; [ id ]
2 | | R3 | | | | | R7 : Reduce Tag -&gt; &lt; id ??? / &gt;
4 | | | | | S5 | S10 | R9 : Reduce Tag -&gt; &lt; id ??? &gt;
5 | | | | R9 | | S6 | S8 R12 : Reduce Tag -&gt; &lt; / id &gt;
6 | | | | R7 | | |
8 | | | | R9 | | S6 | S8
10 | | | | | S11 | |
11 | | | | R12 | | |

Note that R7 and R9 aren't well-formed, since multiple sequences of input tokens might cause you to reach these actions. While it would be possible to construct a shift / reduce parser this way, it's not commonly done. Typically, the DFA to recognize handles is an acyclic graph, but your have a self-transition in state 8.

&gt; What would be the best way of implementing this automaton in C++? Do I really have to make a huge array?

In general, yes, you need a big array (or, as suggested before, two big arrays). But you can use any space-saving technique you want. For example, since most entries in the ACTION table are invalid, one could represent that data with a sparse array data structure. Also, both The Dragon Book and Cooper and Torczon briefly cover parser-specific ways to compress those tables. For example, notice that rows 5 and 8 in your example have the same entries. Most real grammars have multiple instances of identical rows, so factoring out this commonality can save enough space that the extra complexity is worth it.

---

I'm a little surprised that you're building a parser like this by hand, though. Typically people do one of two things:

  1. Build, by hand, a modified LL(1) recursive descent parser (or variant, like a packrat parser)
  2. Build, using a tool like YACC or Bison, a LR(1) shift/reduce parser

    You're sort of doing a mix of the two, which means you have the downsides of both approaches. You need to track all the states and transitions by hand, instead of relying on tools to automate that process, yet you don't get the flexibility of a hand-coded recursive descent parser.

    If you're doing this for education's sake, then by all means proceed. I'd highly encourage you to pick up a book on parsing; I think Cooper and Torczon is a great source. But if you just want a parser that works, I'd definitely recommend using a tool or using a more direct approach, like recursive-descent.
u/philosopheezy · 3 pointsr/learnjavascript

If you really want a book, there are a few that I've come across that I've liked and will suggest. Eloquent Javascript is a good one (it's free online!)

https://www.amazon.com/Eloquent-JavaScript-Modern-Introduction-Programming/dp/1593272820

Depending what you want to learn to do, also good:

https://www.amazon.com/Web-Design-HTML-JavaScript-jQuery/dp/1118907442/ref=pd_lpo_sbs_14_t_0?_encoding=UTF8&amp;amp;psc=1&amp;amp;refRID=YZ1P5N33ZRNPZG6SNM27

You just asked about books, but I would suggest unless you REALLY know you learn best by a book, I'd start with online tutorials (I liked Codeacademy) just to quickly get your feet wet. Codeacademy was a good way to learn the basic syntax you'll need. The books I've read, while great, tend to go deeper (not good at this stage IMO) than online tutorials which negate your "quickly" condition. Looking back, I didn't get a lot from the books until I was comfortable making code that did SOMETHING (and not much more) on my own. To me, that's the most effective way to learn quickly these days. It's easy to get sucked down a rabbit hole of feeling like you need to be an expert to start but looking back this is the plan that would have saved me a lot of spinning my wheels: 1st, do online tutorial (just 1 MAYBE 2); 2nd, then code SOMETHING (just to see you can make the computer listen to you); 3rd, When you feel like you can do something but don't understand exactly why or how it works THEN I'd get a book. That's when you'll get the most bang for your buck IMO. It's so easy to spin your wheels thinking you're one book or tutorial away from becoming an expert. It's cliche but the best thing really is to learn a little and then start making things. Take advantage of supportive programming friends or communities and don't be afraid to ask for help. You will learn more by making silly mistakes than if your code magically works the first time. Hope this helps!

u/bbel121 · 3 pointsr/ccna

My suggestions would be to augment it with other tools. It is a great book, but you want to study from more than just one source.

A couple of tips on preparing are as follows:

  1. You will want a good study guide. As already mentioend, the Wendell Odom book is great http://www.amazon.com/Routing-Switching-200-120-Official-Library/dp/1587143879 as is the Todd Lammle book http://www.amazon.com/CCNA-Routing-Switching-Study-Guide/dp/1118749618 In my opinion the Odom book is more detailed and in-depth but a little dry. The Lammle book is a little easier to read for newbies, but does not go into some subjects in depth enough.

  2. For some that learn better by watching videos, there is a lot on youtube like the Chris Bryant stuff
    www.youtube.com/user/ccie12933 , TrainSignal and the like.

  3. You will want to practice, practice, practice in your lab. This can be a virtual lab if you are tight on money like GNS3 http://www.gns3.net/download/ or you can build your own lab which is a better way to go with real equipment as tehre are a lot of things that simulators don't support fully. With real equipment there are a lot of things you will pickup that you can't with a simulator. Things such as cabling problems as you always pick the right cable in sims, physical items like getting used to certain models so you are not uncomfortable with this when you see them in the real world and then you can speak to the actual models you have experience on when you interview. http://www.certificationkits.com/cisco-lab-suggestions/ this link gives some really good suggestions and things to consider in building a lab.

  4. You will also want some sort of practice exam simulator. In my opinion the exam reveiw questions in the back of the books are just not adequate or representative of what you will see on the exam and you will be shocked when you sit the exam if that is all you have seen. Check out Transcender (really pricey) or Measureup (cheaper, but just about as good) http://www.measureup.com/CCNA-Cisco-Certified-Network-Associate-C207.aspx to see some of their sample stuff.

    There are also some good places to find free study material. I will list a few here with what they provide...
    http://www.freeccnaworkbook.com/ Free CCNA Labs
    http://www.freeccnastudyguide.com/ Free CCNA Study Guide
    http://www.ccnaskills.com/ Wendell Odom's Blog
    http://www.ccnablog.com/ CCNA Blog
    http://www.certificationkits.com/blog/component/wordpress/?cat=60 Blog of sample CCNA questions
    http://ciscoiseasy.blogspot.com/ Cisco is Easy Blog

    I hope all those resources help you in your studies and definately feel free to ask questions here on things you get stuck on.
u/MoreOfAnOvalJerk · 10 pointsr/gamedev

Here's my general advice as someone in the AAA field as a programmer doing it for many years.

1 -----------------

If possible, think of your game in modular bits and primarily concentrate on the programming aspects. Block in the visuals with placeholder art if you need to, but a game with good design and mechanics doesn't need fantastic art to be fun (unless your game is animation driven or atmospheric like Dark Souls).

If you break your code into modular bits, you can tackle each part piecemeal and it's a lot more fun to work on. "This week, I feel like making a great input system. Next week, I'll focus on a data-driven AI engine", and so on.

2 -----------------

Keep things realistic. Understand what you can achieve and don't attempt to make a game that can do absolutely everything. Unless you actually want to spend decades making your game, you need to focus on actually finishing the game at a certain point... maybe. If your game follows the dwarf fortress model of being a perpetually unfinished game that you're always working on, that's also fun. Understand what you're getting into though if you go that route.

3 -----------------

Despite what you may think, ideas are not terribly original. It's all about execution. There's TOOOONS of indie games that are extremely successful and use an idea I had been thinking about. Unlike me though, they actually made the game and had the design sense to give it the production value necessary to sell well.

4 -----------------

If you're hungry to make something now, don't lose a hold of that. Keep learning in your spare time. Buy programming books off amazon to supplement your coding ability. I wasted too many years in university playing video games and not enough time learning to be a better programmer. A good high level starting book that can help give you an understanding of the overall picture is this: [Game Engine Architecture by Jason Gregory] (http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135)

Just as you need to learn construction before you can build a house, you need to learn how to program properly before you can make a game. Keep focused and try to shorten the years you need to spend learning by reading books.

5 -----------------

most important unless you're working with a large team, don't worry about having perfect code the first time through. No matter what you do, it's not going to be correct. Try to do it to the best of your ability, but if you worry too much about clean code, you'll suffer from "perfection paralysis" and ultimately end up not finishing anything. This was another one of my mistakes when I was younger and I still catch myself doing it nowadays on occasion. Sometimes making mistakes is the only way to learn.

Don't be afraid to do things the wrong way first.

edit: grammar, added a link to a great book (no, I'm not the author)

u/RaunchySlappy · 2 pointsr/boardgames

Thanks for the great question! I'll answer the way my mother always answer my long emails...

  • Background? My background is in actually more on the visual creative side rather than the game design side! I graduated from the Massachusetts College of Art and Design with a degree in Illustration. My thesis project was to create and illustrate an entire game on my own ("Landfall" mentioned in a couple other places in this thread). Of course I ended up focusing on (and enjoying more) designing the gameplay and player experience aspects of the game.
  • Motivation? I really just want to design games and have people play them! If I'm lucky I'll break even on this project, haha. I've tried to keep everything as minimal and efficient as possible, to get the game to the people is my only real intent. It is incredibly satisfying when demoing the game to watch people truly enjoying something I've poured my blood, sweat, and tears into.
  • What resources did you seek/find? I am lucky enough to have a fantastic day job to afford to keep the lights on (and the 3D printer running), and have done lots, and lots, and lots, and loooots of research. The thing they don't tell you is that when you want to get your game published through KS, its like getting a third whole new job (in addition to my day job and my board game design job). It is so in depth you can practically major in crowdfunding. I read a ton of stuff from Jamey Stegmaier, have been reading this book andthis book, and have done lots and lots of trial and error.
  • Which resources were most helpful to you? Probably the 3D printer was one of my best investments as a tabletop game designer. It reaaaaally helps immerse the player (and myself) in the game I am creating if I can basically instantly create whatever components I want. (I purchased this affordable 3D printer and have had great success with it)
  • What approach worked for you personally, and how is it different from other boardgame designers? This is a really good question. Board game designing isn't typically something that becomes someone's full time job. Each person who has made the leap usually starts somewhere vastly different from game designing, and I believe that gives each designer a very unique perspective to their games and the way they go about creating them. For me, those things are mostly visually creative-related. At work I do illustration, graphic design, photography, videography, video editing etc etc. So making a decent looking prototype is something that I was able to do (mostly) on my own, and similarly making a nice game trailer and digital ads was relatively easy for me. While I had the visual components down, I differ from other designers who have different characteristics that they bring into play like business experience, industry contacts, an in depth understanding of Kickstarter (I am pretty familiar with KS, have backed a few things, but I am by no means a superbacker myself).
  • The biggest challenge you are proud to have overcome? Even though my campaign isn't at its goal just yet, I am proud at the amount of people I have been able to spark some interest and connection with through my game when starting basically from scratch. They say to have a successful campaign you need to have at least 10,000 emails when you launch, I had about 150 (I lucked out when my game trailer ended up blowing up on Reddit about a week before launch). It was very hot in that pigeon suit I wore for 4 days straight at PAX East promoting Crumbs, and it was exhausting taking a 5 day trip to NYC and demoing the game every day, but it was so worth it. This is my first game, and for someone starting with a near zero fanbase, I am proud my game has been able to touch this many people to begin with.
u/bridgesro · 2 pointsr/learnprogramming

I'm still not an expert yet, so I can't promise that my recommendation is the best path. Looking back at where I struggled and what worked for me, I'd say the best order to learn programming from the beginning is:

  • Basic problem-solving
  • Basics of programming
  • Introduction to your chosen language
  • Software design and object-oriented programming

    If I was helping someone start in programming, I'd have them go through the first chapter of Think Like A Programmer for basic problem-solving techniques, then Optional Bits – which my friend wrote – for programming basics, then Codecademy to learn the syntax of the language they're interested in (Treehouse is a good alternative if Codecademy doesn't have the language you want or if you learn better from video lessons).

    Problem-solving is the best place to start because it's going to drive how you look at every program you write. Good problem-solving techniques also help build confidence, which is really important for a beginner – lack of confidence really held me back my first year of coding. I also found it easier to understand the different courses I took and books I read once I got a better grip on how to solve problems.

    After that, learning programming basics should always come before learning a specific language. It makes learning new languages easier and, combined with problem-solving, helps you to understand how to put together a program together. If you can do that, then it doesn't matter which language you pick; the syntax is just filling in the blanks.

    Learning a language at this point would just be figuring out what keywords the language uses – you won't have to learn both programming and language-specific syntax at the same time. A basic introduction like Codecademy is probably good enough for this step if you've filled in their blanks with the other steps first.

    Then software design will help you learn things like OOP, coupling and managing dependencies, single responsibility, etc.

    Again, I'm still in the early stages of programming myself, so I can't promise this is the best way to do it. In retrospect, I think that order would have worked a lot better for me when I first started. Hope it helps!
u/sessamekesh · 2 pointsr/learnprogramming

In almost every field, you're going to end up dealing with groups of things - lists of contacts, groups of users, categories of billing items, whatever. Having a deep understanding of arrays vs. (hash) sets vs. (hash) maps is huge, by far that's the most common decision I make on a day-to-day basis.

I think it's worthwhile to expose yourself to a bunch of specialized algorithms and data structures. You don't need to study them all super in-depth, but reading about them and maybe hacking them out in Python/Java/C++/whatever is a great learning exercise. I personally like "The Algorithm Design Manual" by Steven Skiena, (EDU PDF, Amazon). It's on the dry side, but it categorizes algorithms into a handful of types (sorting, graphs, combinatoric search, etc) which makes it great reference material for learning.

A handful of useful exercises, maybe useful:

  • Quicksort (and why is it faster than a trivial sort like selection sort? Explain it like I'm five)
  • Caching! Also, how it makes pure functions preferable to unpure ones for expensive code.
  • Implement a Fibonacci function, and describe why the recursive solution is terrible (hint: draw out each function call for a number like 10). This is a great exercise in runtime analysis. Implement it better and know why your second shot is better.
  • Graphs manage to sneak into all sorts of places - knowing Dijkstra's algorithm by heart probably isn't important, but being comfortable with graphs is valuable. Many problems can be thought of as transforming data from group A and B into C, and thought of as information travelling through a graph, being changed at each node. The graphics pipeline used for 3D graphics is a fun example of an application of this idea.
u/InkognitoV · 1 pointr/learnprogramming

Hello! /u/RageBill has already provided a great response, but I still wanted to add a couple of my own thoughts.

  1. If you are brand new to programming I would encourage Python as your first programming language to learn as it is relatively simple to pick up and has a lot of online resources.
  2. Programming requires a base level of intelligence that I personally think most people have. I think it mostly requires learning to think like a computer.
  3. There is an open source MIT course that I would recommend. There are more recent ones, but the basic principles of programming don't change.
  4. There are a lot of books, I think that two books that may be helpful for getting started would be this one and this one
  5. If you know English I think you'll be fine.
  6. Python, Java, Golang
  7. Python first, then Java I think :)

    I would also suggest seeing if your highschool or university offers any computer science courses, and if so, sign up for the beginner class!

    Best of luck!

    Edit: most people will go back and forth all day on which language you should learn first, which are the most useful, etc. If you’re just starting out it can be easy to become overwhelmed with decision paralysis. If you’re just starting out you’ll want to pick a language based on how easy it is to pick up, and the level of support the community at large provides the language (how easy is it to find answers to problems on google?).

    Especially if you’re brand new, the goal is to learn the basics and fundamentals and not necessarily wrestle with more advanced or “obscure” technicalities or concepts.

    For these reasons (among others), the vast majority of entry level university computer science courses stick with python. If you google search the top ten most popular programming languages python is almost always on that list, along with Java.

    I would recommend starting with python while you learn the basics and fundamentals of programming and computer science.

    Of course these are just my thoughts and opinions and plenty of people will disagree. The point of what I’m trying to say is: don’t spend too much time debating which programming language to learn first, just pick one! You can always learn more later!
u/RibMusic · 2 pointsr/C_Programming

As other's have said, K&amp;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!

u/Idoiocracy · 2 pointsr/gamedev

I generally agree with the other replies that a vanilla computer science degree is better than a game degree, but let me use the example of the University of California Santa Cruz (UCSC) game degree to offer a balanced comparison.

At UCSC, the only difference with a computer science versus games degree is one class in the senior year. The fundamentals of both degrees are identical - you take the same math, physics, and programming in the game degree as you would in the CS degree. Only in your senior year does it differ, where as a games major you do a 1 year elective working on gaming group projects using Unity. If you did vanilla CS instead, you would use that year to take something like operating systems, artificial intelligence or databases. Deciding which one is a better fit for you partly depends on your philosophy of the purpose of school:

  • Ivory tower camp - If you feel that a university is best served teaching theory and fundamentals, rather than masquerading as a trade school, then you might agree that learning operating systems or databases in a "pure" manner, without worrying about production concerns like working in a group, would be the best use of your time while you have the privilege of being in school.

  • Emphasis on practicality - If instead you concede that while theory is nice and well, the practical needs of the working world sometimes take precedence, then you might feel that the year of working on gaming projects with others and being able to point at a concrete example of something you did would be time well spent in being able to land that first job.

    You can see this difference of philosophy being played out in not just the debate over a gaming degree program, but in things like the programming language of choice for first-year students, where some schools lean toward the practical (UCSC uses Java and C++) and some toward the theoretical (MIT traditionally used Scheme and now uses Python).

    Specifically at UCSC, I would say the pros and cons are as such:

    Pros:

  • Get to study and spend class time on what is presumably your main interest - game development.

  • Dedicated time to a group project that at graduation, you can cite on your resume and be able to say, "I made that."

  • Possibly make contacts with game industry veterans through the program.

    Cons:

  • Spend a one-year class being forced to work in groups and deal with the messiness of production tasks rather than being immersed in 'pure' theory like in a more typical computer science course.

  • Slightly negative connation among the uninformed of having the words "game degree" on your resume and possibly having to defend that your fundamentals are as sound as a vanilla CS major.

    The first question you should ask yourself is whether the school you're looking at has a comprehensive undergraduate education and a good reputation, like UCSC, or if it's a specialized trade school like Fullsail or DeVry (stay away) with a bad reputation. Not all game schools are bad - both Digipen and Guildhall at SMU are notoriously challenging programs and in my experience working with a handful of their graduates, I found them to be quite competent. Allen Chou will be graduating Digipen with his first job at Naughty Dog (which was Naughty Dog's first time they've hired someone straight out of school rather than someone with industry experience, though it should be noted that Allen earned a previous bachelor's in electrical engineering before attending Digipen). And USC's game school is well known for having produced Journey developer thatgamecompany, among others.

    As for the poor working conditions known at most gaming companies - yes, in general you will work more hours for less pay in the gaming industry than you would outside it. Yes, the industry is rife with constant layoffs. It is likely you will need to move all over the country and possibly world as you chase jobs throughout your career. It's up to you to decide if working on games and with other game developers is important enough to you that it's worth that sacrifice. Many people don't find it worth it, and they are not weaker for choosing another path. It's a personal decision of how much it means to you to work on games; alternatives are arguably more sane.

    For working at the kind of companies you mentioned like Bethesda and Blizzard, you will need to be an expert at C++. Because C++ is such a large and complicated language to first tackle, I recommend learning C first. My book of choice is C Programming: A Modern Approach by KN King, which is also highly recommended in the C programming FAQ. Or if you prefer a shorter book, many people have learned from the C Programming Language by Kernighan and Ritchie.

    For learning C++, there is only one book you need to know to start with: C++ Primer by Stanley Lippman, which is also the #1 recommendation of the C++ FAQ and highly reviewed elsewhere. You do not need to worry whatsoever about C++ becoming obsolete by the time you graduate. But you do have plenty to worry about mastering the language, because there is a lot of material to cover.

    I'm a moderator at /r/TheMakingOfGames and I would recommend perusing some of the videos there that show behind the scenes of development companies (though arguably, the bright side of development). Some examples:

  • Behind the scenes of God of War 3 with the programming team

  • Since you mentioned Blizzard, read Patrick Wyatt's articles on the development of Starcraft. He was a lead programmer at Blizzard before leaving to found ArenaNet and making Guild Wars.

  • Nine examples of dirty programming hacks to fix baffling bugs is a Gamasutra article that might give a glimpse at the harried side of game development, when under pressure and lacking time.

  • Naughty Dog's lead programmer Jason Gregory talking about their interview process and culture
u/CrimsonCuntCloth · 4 pointsr/learnpython

Depending on what you want to learn:

PYTHON SPECIFIC

You mentioned building websites, so check out the flask mega tutorial. It might be a bit early to take on a project like this after only a month, but you've got time and learning-by-doing is good. This'll teach you to build a twitter clone using python, so you'll see databases, project structure, user logons etc. Plus he's got a book version, which contains much of the same info, but is good for when you can't be at a computer.

The python cookbook is fantastic for getting things done; gives short solutions to common problems / tasks. (How do I read lines from a csv file? How do I parse a file that's too big to fit in memory? How do I create a simple TCP server?). Solutions are concise and readable so you don't have to wade through loads of irrelevant stuff.

A little while down the road if you feel like going deep, fluent python will give you a deeper understanding of python than many people you'll encounter at Uni when you're out.

WEB DEV

If you want to go more into web dev, you'll also need to know some HTML, CSS and Javascript. Duckett's books don't go too in depth, but they're beautiful, a nice introduction, and a handy reference. Once you've got some JS, Secrets of the javascript ninja will give you a real appreciation of the deeper aspects of JS.

MACHINE LEARNING
In one of your comments you mentioned machine learning.

These aren't language specific programming books, and this isn't my specialty, but:

Fundamentals of Machine Learning for Predictive data analytics is a great introduction to the entire process, based upon CRISP-DM. Not much of a maths background required. This was the textbook used for my uni's first data analytics module. Highly recommended.

If you like you some maths, Flach will give you a stronger theoretical understanding, but personally I'd leave that until later.

Good luck and keep busy; you've got plenty to learn!

u/Handsdowndopestdope · 3 pointsr/learnprogramming

Hey man. I'm currently doing what you are trying to do. I'm in my 4th-ish month now and having a blast. Right now I'm diving into javascript and I'm finding that that's where I'm having the most fun. Even though it's a fun time, I have to stay disciplined because sometimes I do fall off the horse. I try to make sure that I am studying 5 times a week 8 hours a day, but I don't always hit that mark. Pretty much trying to make it a full time job. I feel like I'm not quite job ready yet, maybe 2-3 months of learning and building projects. Thats the thing, just keep building websites. Here's a list of project ideas and follow FreeCodeCamp and do their challenges.

I recommend looking at FreeCodeCamp. Its free and they have a good curriculum and the best part are the Javascript challenges and mini projects they have you do and there is a pretty solid community and Gitter chat. Check out Jon Ducketts HTML &amp; CSS and Javascript Books. Eloquent Javascript, from what I'm told, dives into JS a little deeper and I'm reading that currently. Lastly, I would also subscribe to something like Treehouse. It's $25 per month and they have a huge library of videos that are pretty good.

edit: I want to add also that there really are a ton of resources out there. So if one of the resources I suggested doesn't work for you, dont sweat it, you will be able to find another. But I do recommend learning from multiple resources instead of just leaning on one.

It can be kind of overwhelming diving into all of this stuff so please feel free to ask if you have any questions. Feel free to PM any time

u/professorlamp · 25 pointsr/learnprogramming

Sure, like most people, I started with Python. I didn't start on codeacademy though, I started on program arcade games.

By the way, I should mention that at the time, I was a night manager at a Hostel so I got LOADS of free time to myself, and then when I got home I had even more free time so there was lots of time to practice.
In the first 3-4 months I learnt the basics of functions and classes and how to use them. After that time had passed, I dug deeper and bought Learning Python and read that a lot. I learnt pretty quickly about the cool things about Python like list comprehensions, anonymous functions (Lambdas), operator overloading, all that stuff. By the way, that book is not a beginner's book, it's a book on pretty much everything about Python

I kept programming in my spare time, I made a lot of crappy things and gradually my code got cleaner and easier to maintain. I made things that interested me, like a MIDI parser, a reddit bot that converts images to ascii Python C#, a bruteforce directory scanner and some other stuff. As you can see, I was pretty busy. This is what's important. By all means, do Project Euler and participate in Daily Programmer but don't expect it to nail you a job. That stuff is useful, but a lot of those are just algorithms, not programs that will impress the person interviewing you (who might not be technical in the first place).

Eventually I just sort of 'got' Python, and decided to learn other languages that interested me. For some reason, that was C. Choosing to learn C was a really good choice but at the time I found it too difficult so I gravitated towards slightly newer languages like C#.

When I started to think my programs had some sort of quality to them I applied for jobs. I looked at job listings and if I saw a requirement that I didn't have i.e. (Version Control) then I'd learn it.
The caveat with learning Python at the time, was that it left me pretty useless (bare in mind I live in Wales in the UK, not uber-progressive,technology wise). The majority of the listings wanted PHP, or VB.NET (yes you read right)

Eventually I got my lucky break with a duo of awful businessmen, they didn't know what they wanted and I didn't know how to deliver, but I tried and I learnt a butt-load as I tried to make their product. Their product was an entire website (frontend, backend and DB) that was to start off small and grow internationally, and they wanted it in 10 weeks... Needless to say, they didn't keep me on (surprise surprise) but with that experience I managed to nail a decent job with other developers using a similar set of skills. By the way that job with businessmen was in VB.NET, not an awful language but why not C#?

The new job is good, I create backends for websites, create frontends from photoshop files that are handled by our designer and I also create plugins for an in-house CMS (Think Joomla and similar stuff). This current position is in PHP, it has it's quirks - naming standards vary wildly, the $, foreach loop is backwards in syntax, -&gt; instead of ., and a bunch of other stuff, but it's easy to use.

As it stands currently, I'm working on trying out different architectural patterns. The good thing about the position I'm in is that it's lots of small projects so I can do something new with each new project. Maybe I'll try a different design pattern, maybe I'll go MVP over MVC, I'm pretty much free to learn and do as I want since there is no codebase (well there is a codebase, but I can still try out new methods) for a module that doesn't exist.

TL;DR

  • First 3-4 Months learnt basics (functions, classes, loops)
  • 5 Months onwards - Read 'Learning Python' and made programs
  • 6 months onwards - Tried out new languages
  • 8 Months on - basic SQL queries and commandline stuff
  • 12 months on - Applied for jobs, a lot.
  • 16 months on - Got first job with bad businessmen

  • 19 months on - Got second full time permanent position and it's fun


    Hopefully I answered what you wanted

u/theootz · 6 pointsr/cscareerquestions

TL;DR Improve yourself, invest in your future, don't worry about the mistakes...read the books listed at bottom, and practice!

Few months ago I royally fucked up an interview at Microsoft. A really simple question. But I had no experience doing coding on paper instead of a computer.

I spent a lot of time studying various books and paper coding to make sure it wouldn't happen again.

I then had an interview for another (in my mind at the time) dream job. I did fine for all the phone interviews and they flew me over to the west coast for an in person interview for the day. I did well for the first bit until they started pulling out dynamic programming and integer programming questions on me and expecting me. Once again something I didn't prepare for, and f'd up. Didn't get this job either. For the longest time I was really hard on myself at fucking up on both these interviews one after another. Especially this second one since a lot more was riding on it than just the job (another story).

But then I decided I didn't want to have this sort of experience again and expected better of myself. I made myself further improve and brush up on all those concepts as well. Did a few mock interviews with friends, spent some time working on interview type questions on both the computer and on paper. A month or two later I started interviewing again. By this point I was an interviewing machine - and I'm now able to do just about anything thrown at me. I've had my choice of employers and until just recently, was in the situation where I had so many offers I didn't know which one I wanted most. I'll be heading to silicon valley soon at one of the top tech companies in the world with a fantastic offer considering I just graduated.

The point is - learn from the mistakes and improve yourself. I realize you don't want to be that guy spending heaps of time coding outside of work or whatever... but this is an investment in yourself and your career. Do it once, and then just brush up on your skills from time to time. Get into the interviewing mindset and just rock them so you can have your choice of job - and then you can go about your thing once you have the job locked. The up front investment will be worth it!

Things that helped me:

  • www.hackerrank.com - practiced a lot of questions on here
  • www.careercup.com - another great site for questions
  • Cracking the Coding Interview More help on questions, but also some great insights into the interview process for the larger tech companies and many hints and tips on how to go about solving the more complex problems
  • Code Complete A great book for helping you to refresh or learn about software design
  • Eternally Confuzzled Great resource to learn how to think about common data structures and algorithms

    Having trouble with Algorithm design/analysis? These are some of the go-to books for that:

  • The Algorithm Design Manual Probably the defacto for learning about algorithm design and analysis
  • Introduction to Algorithms A great book with many different algorithms and data structures to learn about
  • Algorithm Design A great book if you want to dive deeper into more complex subjects like graph theory, dynamic programming, search algorithms, etc.. etc..
u/TheBestOpinion · 2 pointsr/feedthebeast

If you've read the art of game design or a similar book, you'll find that in FTB, most of the fun is had through the problem solving.

You have to give problems to solve to the player, hard ones if you must, but you must not hinder the player in his attempts to solve it. The player should be as free as possible to solve your problems any way he likes

When the player finds a shortcut, he receives some instant gratification. As a developper, you may hate shortcuts as they cut content from the player's experience. But the short-term gratification can be worth it. Letting the player skip some of the game's content isn't dramatic. And this is what makes Minecraft's replayability.

# Feels good:


Problem solving

  • Using a combination of redpower tubes, buildcraft pipes and all the mothers of all the different pipes to do something very specific.
  • Easily popping up a computer and taking 15-30min to code something simple and portable to solve an easy problem
  • I remember fondly the days of power converters. They made sense, were easy to craft, easy to use, and switching between the different energies was pretty fun. They were the source of lots of game breaking exploits, though. :|
  • Convenience vs efficiency trades. I once played on a server where tesseracts were costly but lossless and transceivers were early game but very lossy, I can't go back. It's SO much better that way. You could always rely on transceivers to help you solve problems quickly and you could optimize down the road if you wanted to by switching to cables or to tesseracts (not always easy btw).
  • Multiple alternate manners to obtain items and solve problems.
    • Gregtech was great at this with electrolyzers and centrifuging
    • Ex Nihilo is also great at this
  • Cross-mod """"exploits"""". Uncrafting something that wasn't meant to be uncrafted, weird ways to generate energy... when they aren't game breaking, I love cross mod interactions.

    Feels bad:


    Tediousness

  • Unnecessary steps in crafting. Go flatten your iron with a hammer, then cut it into stripes, then apply some rubber (&lt;= which you had to harvest, extract, cook) and you get a cable.
  • Spending 15 minutes to setup a computer and its power supply. Stop coding at least five times to craft all the modules you need.
  • Unnecessary cable management because tesseracts/dimensional transceivers/etc are pretty costly early game
  • Very mandatory yet almost useless machines (blast furnaces, coke ovens, vats, canning machines, QED...)
  • Shitty power conversion problems. "Use copper wires, they're magical"
  • Costly kind of cables that you can't get early game

    Stopping me, breaking my inertia, by asking me to do some weird task

    When you place a wall down my road and the only way to get past it is to jump, be careful, maybe I don't like to jump; add a window, a door, explosives, portals, anything.

  • Screw you, you need to activate that division sigil (AGAIN) to do the thing.
  • Being too lazy to start using a mod that's disconnected with everything else. Botania, for instance. Or blood magic. Or Psi.
  • Screw you, you need to make an X farm again. The same as the last one.
    • In sky factory, there are lots of good ways to get wither skulls... I almost cried. It was amazing.
    • There's also lots of good ways to get draconium

      Mixed feelings:

  • Big numbers. Draconic evolution stuff, pointless power generation, pointless ressource gathering. Perfecting your craft, even if there's no point, and seeing the numbers glorifying your accomplishment is the backbone of the game

    Alternately, when a mod relies too heavily on grinding and isn't automateable easily, it gets annoying. The grind isn't what's fun, the wait isn't what's fun, refining your machinery and scaling up your contraptions is where the fun is at.
u/CodeTamarin · 2 pointsr/computerscience

The Stanford Algorithm book is complete overkill in my opinion do NOT read that book. That's insane. Read it when you've been doing programming for a while and have a grasp of how it even applies.

Here's my list, it's a "wanna be a decent junior" list:

  • Computer Science Distilled
  • Java/ C# / PHP/ JS (pick one)
  • Do some Programming Challenges
  • SQL
  • Maybe build a small web app. Don't worry about structure so much, just build something simple.
  • Applying UML: and Patterns: An Introduction to Object Oriented Anaysis and Design Iterative Development
  • Head First Design Patterns
  • Clean Architecture
  • Refactoring: Improving the Design of Existing Code
  • If you're interested in Web
  • Soft Skills: Power of Habit , A Mind for Numbers , Productivity Project

    &amp;#x200B;

    Reasoning: So, the first book is to give you a sense of all that's out there. It's short and sweet and primes you for what's ahead. It helps you understand most of the basic industry buzz words and whatnot. It answers a lot of unknown unknowns for a newbie.

    Next is just a list languages off the top of my head. But you can pick anything, seriously it's not a big deal. I did put Java first because that's the most popular and you'll like find a mountain of resources.

    Then after some focused practice, I suggest grabbing some SQL. You don't need to be an expert but you gotta know about DBs to some degree.

    Then I put an analysis book that's OOP focused. The nifty thing about that book, is it breaks into design patterns nicely with some very simple design patters to introduce you to design patterns and GRASP.

    Then I put in a legit Design Patterns book that explains and explores design patterns and principles associated with many of them.

    Now that you know how code is structured, you're ready for a conversation about Architecture. Clean architecture is a simple primer on the topic. Nothing too crazy, just preps you for the idea of architecture and dealing with it.

    Finally, refactoring is great for working devs. Often your early work will be focused on working with legacy code. Then knowing how to deal with those problems can be helpful.

    FINAL NOTE: Read the soft skills books first.

    The reason for reading the soft skills books first is it helps develop a mental framework for learning all the stuff.

    Good luck! I get this isn't strictly computer science and it's likely focused more toward Software Development. But I hope it helps. If it doesn't. My apologies.
u/autisticpig · 1 pointr/Python

If you were serious about wanting some deep as-you-go knowledge of software development but from a Pythonic point of view, you cannot go wrong with following a setup such as this:

  • learning python by mark lutz
  • programming python by mark lutz
  • fluent python by luciano ramalho

    Mark Lutz writes books about how and why Python does what it does. He goes into amazing detail about the nuts and bolts all while teaching you how to leverage all of this. It is not light reading and most of the complaints you will find about his books are valid if what you are after is not an intimate understanding of the language.

    Fluent Python is just a great read and will teach you some wonderful things. It is also a great follow-up once you have finally made it through Lutz's attempt at out-doing Ayn Rand :P

    My recommendation is to find some mini projecting sites that focus on what you are reading about in the books above.

  • coding bat is a great place to work out the basics and play with small problems that increase in difficulty
  • code eval is setup in challenges starting with the classic fizzbuzz.
  • codewars single problems to solve that start basic and increase in difficulty. there is a fun community here and you have to pass a simple series of questions to sign up (knowledge baseline)
  • new coder walkthroughs on building some fun stuff that has a very gentle and friendly learning curve. some real-world projects are tackled.

    Of course this does not answer your question about generic books. But you are in /r/Python and I figured I would offer up a very rough but very rewarding learning approach if Python is something you enjoy working with.

    Here are three more worth adding to your ever-increasing library :)

  • the pragmatic programmer
  • design patterns
  • clean code

u/kurashu89 · 1 pointr/learnpython

If you want a serious book recommendation: Learning Python 5th Edition by Mark Lutz. It's a monster at 1600 pages but to say it's thorough is an understatement. I got the ebook so I can quickly search through it on my phone. Even though I wouldn't consider myself a beginner anymore, I find between this book and the Python Cookbook I find answers to most of my problems (unless they're related to a library).

You can also read Learn Python the Hard Way (my introduction to Python 2). Which is free but not anywhere near the scale of Learning Python. As a warning, there's some coarse language used in it.

If you don't know any Python -- and this will probably stir the pot a little -- learn Python 3. BUT learn how to make it Python 2 compatible. Sure, you'll give up things like advanced tuple unpacking and yield from (to name two off the top of my head) and you'll probably have to use six but when the day comes that you can fully move your library to just Python 3, you'll be thankful.

If you feel comfortable enough with Python to begin approaching a web framework, I would personally recommend Flask. I'm sure quite a few people would disagree and they probably make valid points. But Flask is easy to start with:

from flask import Flask

app = Flask(name)

@app.route('/')
def index():
return "Hello World"

if name == 'main':
app.run()

Miguel Grinberg (you'll see him float around /r/Flask and some of the other Python subs occasionally) has both a great blog series and a great book on building Flask projects. It's not the end all be all of Flask knowledge and honestly, I'd like see more written on working with bigger projects, but given Flask is only 4 years old I'm not surprised.

For Django, I've heard lots of good things about Two Scoops of Django but I've not read it (though, I need to at some point).

I'm unsure about other frameworks like Pyramid or TurboGears or WebPy.

You'll also want to have working knowledge of HTML (not hard), CSS and Javascript (much harder). And getting chummy with libraries like Bootstrap and JQuery/Angular/whatever is probably a good idea, too.

There's also specific concepts you'll want to be familiar with depending on where and what you work on: things like REST, JSON, Ajax, CSRF, etc.

u/Cracklings · 2 pointsr/csharp

This is just my 2 cents, but the first thing you should be asking when learning any language is what problem are you trying to solve with the language?

C# as a language doesn't amount to anything, but it's real potential comes from the frameworks it is associated with.

&amp;#x200B;

If you're wanting to:

web develop then you would need to look into .NET Core + WebApi + MVC or a front-end framework (Angular, React, Vue).

This is a great course to get you started with. It'll create a basic web application you can modify and play around with from the database to the front-end:

https://www.pluralsight.com/courses/aspdotnetcore-efcore-bootstrap-angular-web-app

&amp;#x200B;

desktop development then look at Wpf (window presentation forms) or use electron and c#

mobile development then take a look at xamarin

&amp;#x200B;

from your use of Unity though, it seems as if you are more into game development which I would advise then to go a bit lower and really learn algorithms and good implementations. For this, there are some greats books you can use to help you get started:

Cracking the Coding Interview: 189 Programming Questions and Solutions by Gayle Laakman - Even though this is an interview book it's a great intermediate book to algorithms. The book does assume you have a basic understanding of elementary data structures.

The Algorithm Design Manual by Steven Skiena - This is definitely more advanced and heavy but it's a great book to really dig down into the nitty gritty

A great website for practicing writing algorithms in c# is leetcode.com. It's a site that basically lists a bunch of small questions you can solve with an in browser compiler that includes c#. This way you wouldn't need to download visual studio to practice coding.

if you're up for the challenege, then you can download a framework like SFML.Net and try to develop a game from the ground-up without using an engine like unity. But this is obviously a lot of work ;)

&amp;#x200B;

Overall it's hard to give really specific advice without knowing where you're trying to head. But it's a good time to get into c# and in general microsoft's development stack. In the past people were shoe horned into using microsoft's technology stack from top to bottom but recently microsoft has made a lot of stride in making there tech more open which is making a lot of people turn heads.


If you are also looking for a more lite-weight ide then I recommend visual studio code or vscodium which is the same but without the trackers :)

u/Jumballaya · 10 pointsr/FreeCodeCamp

&gt; Felt pretty good about myself.. until I got to the algorithm section.

This is VERY normal. These are hard math concepts that take everyone a little bit to get used to. The only way you will learn these concepts is by implementing them, over and over and over and over and over.

&gt; I would say I was getting stuck probably about half the time and would turn to read-search-ask method.

If this were not the case, then there would be no need to learn. I am a web developer and I look up the most inane shit on a daily basis because it is something that I either have never used/implemented or something I rarely use/implement (my big one here is PHP's array functions, I can never remember if the array comes before the callback or not with array_map() but I remember that it is the exact opposite of array_filter() and array_reduce()). Embrace this, build your Google-fu because you will always need it.

&gt; A lot of times I was missing some small operator (code error) or somewhat minor step in the thought process, other times I would be lost entirely. Basically I wasn't thinking about how to implement my code well enough, imo.

This is 100% normal. Have you ever heard of a code review? This is where other developers review your code before it goes live. The point of this is that you cannot be 100% perfect with your code, maybe you forgot a semicolon or maybe your code is tough to read, that is what the code review process is like. I write code in iterations to make sure that I never 'get in too deep' and the fear of removing code sets in, each of these phases I go through a mini code review to see what is working at what isn't. I ALWAYS find some half-baked logic in my first few iterations before I really get into it and over the last couple years I find that I need fewer and fewer iterations and that I am able to get a better 'big picture.'

Don't be afraid to scrap some code and go back at it, this is your education and only you know when you understand the material. I have a bajillion abandoned side projects and so does every developer that I know.


Advice


  1. Keep coding, it is the only way you are going to get better, for real.
  2. Read other people's code. This is where I learn all my cool tricks; Anytime I find a cool project/library/framework I hit up github and read through as much of the source as I can stomach. You will be surprised at how much you learn about the parts of a project that AREN'T code like documentation, contributing, comment styles, things that seem secondary when first learning to program.
  3. Design patterns, paradigms, data structures, algorithms. I wouldn't suggest going head-on with this stuff yet, but don't be afraid of it. Design Patterns Book (Gang of Four) - This is a very highly suggested book, though the examples are in C++
  4. Learn another language. The largest increases in my JS knowledge have come from learning another language and bringing back that language's way of thinking into JS. I would suggest Python because it is stupid-easy to jump in and start making cool stuff, but any language will do. Python, Java, C#, PHP, Elixir, Ruby, C++ and Go are a handful I can think of that will aid in employment as well as teach you new ways of thinking about JS.
  5. Talk to developers, go to meetups, scour github for misspellings in documentation and contribute. Anything that you can do to get a free mentor will be an AMAZING boon for you


    Links

  6. Project Euler - Looking for something to code? Here is around 600 different problems to solve. I am pretty sure some of the FCC algorithms were taken from Project Euler as it is a very good resource.
  7. Eloquent JavaScript - A great resource, though, a little dated
  8. You Don't Know JS - Another great resource on the JavaScript language. I reread through these books every once in a while.
  9. Professor Frisby's Mostly Adequate Guide to Functional Programming - Great primer on functional programming with JavaScript
  10. Rosetta Code - Algorithm reference across many languages, though, the coding style for each tends to be a mess it is a good getting-started reference.
  11. 2017 Frontend Handbook - This is great for figuring out what to learn next when you get to that point where you don't know what to learn next.


    I did FCC up through the frontend section, I started my web dev career path in 2014 and picked up FCC in mid 2015 right before getting a job in web development. The most important part of FCC is that you are coding, getting practice and making mistakes, TONS of mistakes. Just keep it up, don't get burned out and remember that it is about your education, not how many challenges you complete. Code and read and read code.
u/Shadow-Master · 1 pointr/gamedev

Don't be suckered by a "Game Design" program. There are VERY few good ones. Most of them....as in, 99% of them...are rip-offs.

Learn programming, 3D-modeling, or animation. Pick one that you're more interested in and then full-speed ahead. These will make you useful in more than just game development roles, thus helping you in the future when you have trouble landing a game dev job. At least you'll still be doing something you like in the meantime, and still building your skill in that area. Many really popular game designers have specialties outside of just "Design". Some are excellent programmers, some are artists, some have excellent business skills (really good at project management), and some are brilliant story-writers. Most game design positions are not entry-level, because you REALLY have to know what you are doing, before someone will trust you enough to let you touch the design. The only real way to prove that you are actually a good game designer is by having games to show off. That proves that you have some idea of the design process and know how to maintain a game from start to finish. This is HARD.

Some like to say that these degree programs for game design help them by giving them the incentive to push through and finish their stuff, otherwise, they might not have the motivation. Well, that's very problematic, because that means that you will not be the type of person who can finish a game. Game development requires you to be highly self-driven.

Most of what "Game Design" programs teach you can be learned by picking up a few game design books and making your own games (alot of them, too). Game design is learned by making games, not by having a professor tell you about it. You have enough mentors in the game development community already. They will always be there to critique what you do and give you tips on how to improve your work. Pick up a couple of books like The Art of Game Design and Designing Games. You can look at other books in whatever other area you want to master and just get started on making games. Turn off your console and just get started. Start small. Make very simple, basic games to start off with (B.A.S.I.C.). It's about learning the process first. Do that while reading a ton of highly-detailed game postmortems online. Just learn the process. THAT will be your real education.

And finally, start working your way up to putting together a portfolio. Portfolios speak much louder than a resume (although, a resume is still important). And that doesn't mean having a bunch of "Game Design docs". Games. Not docs. Games. Then build up your confidence and hook up with a team, so you can fight your way together to the end of making a complete game. (this may be one of the only valuable things that a game design program can provide you out of the box, i.e., a team that you are forced to work on a game with)

The single most important tool you will ever have is discipline. No degree will be able to top that. Give up the idea of being a hardcore gamer, because you are now going to need to become a VERY disciplined person. You're going to need it.

Finally: Don't forget to have fun. Good luck! :)

u/illithoid · 4 pointsr/salesforce

I'll be honest with you, I don't think Head First Java would be a good choice, however DO READ Clean Code. I also suggest Design Patterns: Elements of Reusable Object-Oriented Software and Working Effectively with Legacy Code. The first is a classic MUST READ for anyone in software development. It present numerous challenges that most of us will face when developing solutions, and gives you the design patterns you will need to solve them. The second is great for learning how to fix your predecessors shitty code, you'll need this one. If you haven't already, look up Bob Buzzard and Andy Fawcett. These two guys are my favorite SFDC Dev Bloggers. I also suggest watching any Salesforce Webinar that has anything to do with code, especially security stuff.


Practice makes perfect, except for us there is no perfect, just better. Know your best practices and live by them. With everything you do ask how can I make it better? Faster? More efficient? Do I even need code, or will Workflow/Process Builder/Flow do? How can I write code, so that an Admin can customize it without any code?

&gt; Based on code reviews--my code is pretty good, with good logic and pretty well laid out.

This is actually VERY important, having good logic is obviously crucial, but being well laid out is a kind of hidden requirement with code. You or somebody else will eventually need to maintain your code, if it's laid out well it should hopefully be easy to read and maintain.

When you write code do your best to incorporate declarative features so that further customization can be done without code (I know I said this earlier, but I think it's important). Need to write some code that uses an arbitrary set of fields, consider using Field Sets. An Admin can add/remove them without code. Maybe use a Custom Setting, or Custom Metadata to map fields to values.

Learn how to use Describe calls for everything. Need to write some code that catches dupes and merges them? Don't hard code the values, then nobody will be able to remove or add fields without updating code. Instead use Describe calls, now you get every field on the object forever. Need to remove a field from an object no problem. Need to add a field to an object no problem. Does your losing record have child records that need to be reparented? Don't hard code, use Describe calls to get all sObjects with a Child Relationship. Use Describe to find out if it can be directly reparented or if it needs to be clones (CampaignMembers can't reparent a LeadId to a new Lead. You MUST clone and add the new Lead Id).

How much do you know about HTML? CSS? JavaScript? JQuery? Visualforce? Learn 'em. Lightning is coming, and these are going to be more important than ever (except maybe Jquery).

Practice, practice, practice. One coding assignment per month isn't that bad, but if you get some work done early and you have an hour or two to spare, work on a side project. Can you think of something in your company that could be automated, spin up a Dev Org and give it a shot. Maybe your Sales people could use a new VF page for entering information just a little quicker.

Always seek to improve your code. Always seek new ideas and better ways of doing things.

Trailhead is good, do all the coding ones you can find, it's more practice!

u/MojarraMuncher · 2 pointsr/ccna

Students of networking are often really excited and anxious so they don't notice this as they stumble upon this subreddit, but this question gets asked almost every other day. I will just copypasta and edit a little of what I posted earlier today.

First, don't take the composite. Do you like money? You will probably fail at least once. I failed my first time. Goodbye money. Goooodbye pride. Helloooo shame. Take the ICDN1 and then ICDN2.

Here is the current blueprint for ICDN1 It is meant to be followed from top to bottom as the first topics are fundamentals, working its way down to switching and then routing.


I recommend getting a SafariBooks subscription. It even has a free trial. The Livelessons videos are over $100 retail and the Odom and Lamlee books are another $100. For $39 a month I think SafariBooks is the best value.

Then on SafariBooks, search for CCNA Livelessons videos [specifically "CCENT ICND1 100-105"] on ICDN1. Kevin Wallace goes through the blueprint from top to bottom and I just think he is a very focused and excellent instructor. He has another video series there called "Learning Path: CCNA Routing and Switching" which goes off the blueprint slightly into a deeper understanding of networking fundamentals. Disclosure, I have not watched the new exam videos since the exam was revamped last year, but I did watch his videos from the last exam version.

Supplement your learning by reading the Odom and Lammle books on ICDN1 which are also available on Safaribooks. You can even download the books for offline reading on your phone or tablet. Some like Odom's official cert guide more but it is dry material that follows the blueprint. Lammle is a little more 'colorful' but I don't like his prose and how he gets off topic with real-world scenarios. There are also some cram guides that have quizzes and good commands to know. Again, all of these are available on SafariBooks. ^I ^am ^not ^a ^shill ^for ^SafariBooks ^but ^I ^use ^it ^almost ^everyday.

For additional studying you can get some pre-made Anki or Quizlet decks. They both have mobile apps [Anki is not free. Quizlet is] and are super helpful when you don't have the ability to open a large book or watch videos...or don't have the attention span to re-read a chapter.


When you want to touch 'real' equipment you can download Packet Tracer for free from Cisco Net Academy. Dan's Courses has step-by-step Packet Tracer labs and solutions. Labbing is essential but you definitely don't need a physical lab for CCNA and especially ICDN1. You eventually can graduate to GNS3 but you should only need PT for ICDN1 and probably ICDN2.


Lots of people like CBT Nuggets but I find that since they don't follow the blueprint very well and the presenter Jeremy Cioara gets off topic [I.E. excited] and can throw off focus of the subject matter. Also at something like $100 a month [legally], it is expensive for what you get in return, which is one video series with some large holes in the knowledge you need to pass.

u/Alpaca317 · -1 pointsr/HTML

I learnt from these 2 books
Web Design with HTML, CSS, JavaScript and jQuery Set
https://www.amazon.co.uk/dp/1118907442/ref=cm_sw_r_cp_api_i_Y1MQCbH3QGBW6
I highly recommend them, they aren’t really tutorials on how to code but goes into excellent detail on everything you need to know. They do include code examples and website concepts such as design, how to structure, ease of use etc...

If you want to progress from this, you can start looking at databases and collecting user data etc... the PHP practice is a bit outdated but it is a very good tutorial book to get started
PHP &amp; MySQL In Easy Steps
https://www.amazon.co.uk/dp/1840785373/ref=cm_sw_r_cp_api_i_C7MQCb9JHJP5G

I’m also hoping you’ve came across w3 schools at some point but just incase you might want to have a look at this website as well, it’s great for information all website related
https://www.w3schools.com

This was my path and I’ve done 2 courses of web design at uni and there isn’t much more they were able to teach me that I hadn’t already learnt from those books. Obviously a bit more advanced stuff but tutorials and resources are always available online for that.

If you have anymore questions don’t be afraid to ask! Like I said I’m still a student who self taught all this and it’s not my job but I hope it will be in the future for me too, so hopefully a professional might be able to offer you better advice :)

u/spaghettu · 3 pointsr/gamedev

If you're planning on pursuing this as a career, there are tons of incredible opportunities for people experienced with lower-level 3D APIs. Making your own engine serves as a fantastic learning experience, and would be a huge investment in your future.

Below are some of my favorite books/resources right now that may help you along the way. These might not be immediately useful to you right now, depending on where you're at, but together they have more than enough knowledge for you to go far in 3D Computer Graphics.

  • Game Engine Architecture touches at least a little on all of the knowledge necessary to build a bare-bones 3D engine. It goes over the components of modern 3D engines, and how they work. It even has introductory Linear Algebra and Object-Oriented programming concepts. I think this book is pretty approachable for beginners.
  • The OpenGL SuperBible offers great insight and examples on using OpenGL optimally. Depending on when you start, however, you may want to consider a Vulkan book instead. I think this book is the best way to learn OpenGL as a beginner. There are plenty of free tutorials online on websites like learnopengl.com and open.gl as well.
  • Real-Time Rendering is a fantastic book that dives deep into different algorithms and techniques for modern 3D rendering. It's pretty advanced, but it's a very well-known book and exposes very valuable information on complicated effects found in modern 3D engines.
u/mysticreddit · 6 pointsr/gamedev

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 &amp; 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:

  • do the same thing,
  • be simpler to write, and
  • be simpler to debug, and
  • more importantly solve the problem at hand, not abstracted to the point of being over-engineered.

    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:

  • has better better error-rate detection,
  • less collisions,
  • is multi-core.

    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


  • C++ Pro
  • C++ really is a better C then C in so many ways, too numerous to enumerate
  • In the ways it is worse the smart people / companies use a sub-set of the language: Ubisoft avoid Templates, Exception Handling, and Run-Time Type Identification. When even a C++ committee member admits he writes in a sub-set of C++ himself you know the language is b-l-o-a-t-e-d.
  • You won't have to unlearn certain "bad habits" of C
  • Your skills will up-to-date
  • Your code will be textually smaller (See note about Con)
  • Job Security -- that is half joking, half serious. Seriously.
  • You can enjoy the time exploring the different nooks and crannies of the language. You will see a different way to solve the same old problems. This can be both good and bad.
  • Eventually you'll be able to enjoy deep technical C++ comedy such as Hitler on C++
  • OOP (Object Orientated Programming) makes it almost easy to quickly write bigger scale programs
  • Is multi-paradigm: Procedural, OOP, Functional, Generic. You have the freedom to pick and choose the parts of the language that fits your needs.
  • For every problem you're trying to solve there is probably language support. Threads, and Atomics are finally part of the language.

  • C++ Con
  • You won't understand some of the C idioms used in practice
  • The language is HUGE -- it will take you a decade to properly learn the language
  • Debugging C++ is a PITA
  • While people write crap code in any language, it is harder to read bad C++ code then C code.
  • Compiler Support for the latest standards is a constantly moving target. Translation: Microsoft's Visual C++ has traditionally had crap support for the latest C and C++ standards. The good news is that MSVC 2015 finally supports a nice section of the language.
  • While C++ can be textually smaller, one's code can easily be "bloated" if not careful (such as templates and partial template specialization)
  • You really won't understand the run-time costs, nor be motivated to understand the underlying assembly language generated, by a "simple" C++ expression.
  • Expect L-O-N-G compile times for any significant code base unless you use a "Bulk / Unity" build (you compile one .cpp file that includes EVERYTHING)
  • It will be hard to resist over-engineering, over-complicating even the most basic tasks
  • iostreams is a complete clusterfuck. Even the C++ committee recognizes there are many problems with C++ iostreams but sadly nothing is being done towards performance at the cost of type safety.
  • It is far easier to blow your cache. Even Bjarne Stroustrup, the language designer, until 2012 didn't have a clue in understanding why Doubly Linked Lists were so slow compared to Arrays. HINT: The L1 Cache usage is critical for performance sensitive code.
  • People tend to over-use the OOP paradigm even when they shouldn't. People make dogma and religion of "Design Patterns", failing to think if the model applies or not.
  • The OOP paradigm is slow and bloated compared to Data-Orientated-Design. See Sony's Pitfalls of Object Orientated Programming
  • Reflection STILL isn't standardized -- everyone has their own "home grown" approach. Maybe in C++17 ?


    Learn C first


  • C Pro
  • The language is tiny and easy to learn. Learn C the Hard Way is a great tutorial.
  • No operator overloading
  • No function overloading
  • No lambas
  • Has no reflection
  • Has no exceptions
  • Has no RTTI (Run-Time Type Identification)
  • Has no STL (Standard Template Library)
  • You will have a better understanding of the run-time "cost" or performance of code instead of a single line hiding "hidden" behaviour.
  • You'll be a better programmer for understanding more of the lower-level implementation. If you don't know how to write itoa() or atoi() you're a noob programmer.
  • You'll be forced to keep things simple
  • You'll understand how to implement OOP in a non-OOP-native language, and better appreciate C++'s syntax sugar of OOP.
  • You'll appreciate how C++ templates solve some but not all "textual replacement" problems and why #define macro's suck for debugging.
  • Is ubiquitous, runs everywhere, and easy to get a C compiler for everything under the sun. Matz's Ruby Interpreter (MRI) was written in C, the Java VM was originally implemented in C, Perl is implemented in C, Linux is written in C. Anything popular and older then 10 years was probably written in C.
  • Variables must be placed at top of a brace {

  • C Con
  • Compared to C++, you'll hate how primitive the language is such as typedefs for structs, no local functions, const is only "half" useful in C -- it can't be used in array declarations (See: http://stackoverflow.com/questions/5248571/is-there-const-in-c ), etc.
  • No operator overloading
  • No function overloading
  • No lambas
  • Has no reflection
  • Has no exceptions
  • Has no RTTI (Run-Time Type Identification)
  • Has no STL (Standard Template Library)
  • Simple algorithms can be tedious to write
  • Variables must be placed at top of a brace {

    With that said there are numerous C++ books I would recommend to ALL C++ programmers. They are sorted from beginner to expert:

  • The Design and Evolution of C++, Bjarne Stroustrup -- another ancient but fundamental to understanding all the kludges in C++
  • The C++ Programming Language, 4th Edition &lt;-- "Mandatory"
  • ALL the books by Scott Meyer
  • Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14
  • Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)
  • Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library -- ancient but good
  • Modern C++ Design: Generic Programming and Design Patterns Applied by Andrei Alexandrescu -- another ancient but it blew the doors open for C++ Meta-Programming. IT is interesting that he hates C++ -- he now works on the D language.

    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.

  • Thinking in C++, Bruce Eckel

    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.
u/kindkitsune · 2 pointsr/cpp

I think C++ Primer is nice, and I still keep it around at work as its a useful reference to have. Being able to open up to a section about a topic and know I'll find some reference info, example code, and some good exposition is great. It covers C++11 fairly well, too. Make sure to get the most recent edition. The book does a nice job of providing a decent amount of example code, and the included exercises are very useful.

Effective Modern C++ is great, once you have a bit more experience under your belt. I pull this one out all the time to take a quick look through it when I question how I'm using some feature, and the paradigms of "Modern C++" in general are just great to follow and fun to use.

The C++ Programming Language is a reference guide: its good for more advanced programmers who want a quick reference guide that also has a bit of exposition on various concepts/features (beyond what can be found on cppreference). I still don't think it would be well suited to you- it lacks the example code and useful exercises of the C++ Primer.

As you probably well know though, the best way to learn a programming language is to write in the language. Books are good for making sure you don't do outright "bad" things at first, and in that case I'd definitely recommend the C++ Primer. I had the problem of following online sites for my first C++ experiements, and these sites never used or mentioned any of the wonderful things C++ offers like the algorithm library (learn to love everything that offers!) or even something as basic as std::vector! Instead, I was using lots of raw calls to new and delete and doing other suboptimal things.

So, I'd say go with C++ Primer to start. Follow along like you would with a maths textbook and do the example problems, and transcribe and run much of the example code yourself.

Effective C++ would be next, to help you brush up on using various features of Modern C++ and better understanding small but vital details like constexpr and move semantics.

I started learning C++ in August of this year, so I still remember a lot of what it was like to start. Feel free to ask me more if you have any questions about other materials, websites, or resources.

u/sidewayset · 27 pointsr/HowToHack

In addition to what others have said, you need to learn some programming, web and scripting languages + frameworks:

I would make sure to know/learn following in order:

  1. HTML / CSS : online: https://www.codecademy.com/ OR book: https://www.amazon.com/Web-Design-HTML-JavaScript-jQuery/dp/1118907442/ref=sr_1_3?ie=UTF8&amp;qid=1543201752&amp;sr=8-3&amp;keywords=html
  2. Javascript: same as above, some javascript frameworks would not hurt, Angular, Node, etc..
    Note: while learning web stuff, try to learn as much as you can about how the web works, technologies used, etc. Your networking knowledge should help here
  3. Python: checkout blackhat python book, https://www.codecademy.com/ for basics
  4. SQL: https://www.codecademy.com/ then mini project: Make a small app in python that utilizes SQL database, all running in cloud AWS or similar. Using frameworks and such
  5. C++ or C: If you feel comfortable go to C, otherwise I would start with C++ or even C#/Java first to get a grasp of the these programming languages that IMO are easier to learn at first. Python will help here.
  6. Other things such as bash, Perl, ruby will come in handy, but you can learn them as you go later.

    To practice things security related:

u/fajitaman · 5 pointsr/NoFap

The Shallows: What the Internet is Doing To Our Brains

I think NoFap is really just a niche part of a bigger drive to get away from the internet (or at least use it differently), and I completely agree with all of it. The internet (if used without taking precautions) and porn both change the physical structures of our brains in ways that preclude having a fulfilling life with longterm satisfaction. Fortunately our brains are very plastic and it's not too late to fix them.

I've tried quitting the internet cold turkey, and it's haaaaaard. The problem is that it's a global addiction that's deeply intertwined with our social and work lives. You can't really get away from it without totally alienating yourself, so quitting all of the internet is not viable. It's very difficult to draw the line between useful or necessary internet usage and bad internet usage, so moderating your own internet usage can be tough.

Here's my attempt at drawing that line, though:

  • If you're using the internet for data acquisition or communication, you're using it right.
  • If you're using the internet for education or entertainment, you're using it wrong.

    Obviously education and entertainment are important, but the internet is just not the place to do it. With respect to education, the internet will promote distractedness and a habit of multitasking, and ultimately your learning will suffer (the book I mentioned focuses on this). If you want to learn, try to use the internet to find books, and then use those books to learn (or take a class, etc).

    There are, of course, certain things you can learn only through the internet. Tutorials, for example, are online, as is the vast majority of modern journalism. You need to be careful with either of these. When it comes to reading the news, I like to use my tablet and the Pulse application, and I'm only subscribed to longer-form journalism like the type you'd see in The Atlantic. When it comes to tutorials, do whatever you can to not open additional browser tabs. In either case, you should at the very least read these things like you would read a book. Don't allow yourself to get distracted by hyperlinks, and if some topic confuses you, usually it's okay to just ignore it (or mark it) and press on, rather than try to immediately learn about this other topic through outside sources.

    As for entertainment, that's something you can do in real life with real people (or again, with more reading, which is always healthy). Entertainment online is a process of overstimulation and isolation. Porn falls into this, but so do videogames and even mindlessly clicking pictures on reddit. In general, if you get on the internet without a clear purpose, you will probably be using it for entertainment, so always try to tell yourself why you're getting online before you do it.

    The first good use for the internet is data acquisition, by which I mean it's a good place to go to find a fact or set of facts. For example, if you want to go see a movie it makes perfect sense to get on the internet and look up movie times. In these situations, you'll get online, find the information you want, and then quit.

    Communication is a bit iffier, and maybe it should come with its own set of restrictions. Email and social networking are great, insofar as we don't use them for entertainment. I don't really suffer from this problem, but when I get on facebook it becomes pretty clear that many people are sort of addicted to self-posts and being heard. This might be absolutely fine for all I know (you could liken it to journaling), so for now I'm going to just assume that social networking, love or hate, is something we're going to have to live with if we want to partake in the 21st century.

    This might warrant its own post, since I've got quite a bit to say on it (I've kept most of it inside my head, so it might be totally rubbish for anyone else as far as I know).

u/drakonite · 16 pointsr/gamedev

You may want to narrow that down a bit, but okay, here are some highlights, with amazon links to help disambiguate.

u/nEmoGrinder · 1 pointr/vita

Firstly, don't be confused: PSM is not Vita. It's a separate platform that Vita supports but is also available on tablets and smart phones. Releasing a PSM game means releasing on not just the Vita but also on touch only devices.

Second, you may be best served by first understanding computer graphics at a lower level. 2D and 3D are pretty much the same thing when it comes down to it, the biggest difference is in the projection used by the camera and the pipeline for your assets (as you'll need your models in a format that is supported by the pipeline or write your own pipeline). There are plenty of books out there but I highly recommend Real-Time Rendering.

PSM has support for 3D just like most other frameworks. A quick Google search got me this. Or, you can do everything yourself as you have access to the GPU via a very nice VertexBuffer API in the PSM SDK. While I wouldn't recommend it to get a game out quickly, I would suggest giving it a shot to better understand how a vertex buffer works and renders a model. It's a portable skill: being able to build a vertex buffer and shaders to render your own models is something you can take to and graphics framework.

Last thing is MonoGame, which is an open source and cross platform implementation of Microsoft's XNA. The reason why you see a lot of "how to transfer your project over" is because that was what it was originally meant for: getting your XNA project to use the MonoGame library to bring it over to other platforms. So, realistically, what you want is to look up 3D in XNA. Keep in mind though that PSM support for MonoGame is still under construction. I'd recommend not using the binaries on their site but actually pulling the latest from git and building the project yourself to make sure you have the latest code.

As for gravity/physics, there's nothing built into PSM or MonoGame the way there is in Unity, which uses the PhysX engine. You'll need to find an external library or write your own physics solver. Or, if your game doesn't need realistic physics, try to get away with a simpler model that only uses AABBs or spheres.

u/canadadryistheshit · 28 pointsr/sysadmin

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.

u/EraZ3712 · 12 pointsr/cpp_questions

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!):

  • The Exception Situation for exception handling,
  • rand() Considered Harmful and What C++ Programmers Need to Know about Header &amp;lt;random&amp;gt; for random number generation,
  • Everything You Ever Wanted to Know About Move Semantic (and then some) for move semantics (by one of the authors of the proposal that introduced it!),
  • Modern Template Metaprogramming: A Compendium for template metaprogramming,
  • Lambdas from First Principles: A Whirlwind Tour of C++ for lambda expressions (this one is very good!), and
  • Type Deduction and Why You Care for auto and decltype(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.
u/DucBlangis · 20 pointsr/netsecstudents

Here is a "curriculum" of sorts I would suggest, as it's fairly close to how I learned:

  1. Programming. Definitely learn "C" first as all of the Exploitation and Assembly courses below assume you know C: The bible is pretty much Dennis Richie and Kernighan's "The C Programming Language", and here is the .pdf (this book is from 1988, I don't think anyone would mind). I actually prefer Kochan's book "Programming in C" which is very beginner freindly and was written in 2004 rather than 1988 making the language a little more "up to date" and accessible. There are plenty of "C Programming" tutorials on YouTube that you can use in conjunction with either of the aforementioned books as well. After learning C than you can try out some other languages. I personally suggest Python as it is very beginner friendly and is well documented. Ruby isn't a bad choice either.

  2. Architecture and Computer basics:
    Generally you'll probably want to look into IA-32 and the best starting point is the Intel Architecture manual itself, the .pdf can be found here (pdf link).
    Because of the depth of that .pdf I would suggest using it mainly as a reference guide while studying "Computer Systems: A Programmers Perspective" and "Secrets of Reverse Engineering".

  3. Operating Systems: Choose which you want to dig into: Linux or Windows, and put the effort into one of them, you can come back to the other later. I would probably suggest Linux unless you are planning on specializing in Malware Analysis, in which case I would suggest Windows. Linux: No Starch's "How Linux Works" is a great beginner resource as is their "Linux Command Line" book. I would also check out "Understanding the Linux Kernel" (that's a .pdf link). For Windows you can follow the Windows Programming wiki here or you can buy the book "Windows System Programming". The Windows Internals books are generally highly regarded, I didn't learn from them I use them more as a reference so I an't really speak to how well they would teach a "beginner".

  4. Assembly: You can't do much better than OpenSecurityTraining's "Introductory Intel x86: Architecture, Assembly, Applications, &amp; Alliteration" class lectures from Xeno Kovah, found here. The book "Secrets of Reverse Engineering" has a very beginner friendly introduction to Assembly as does "Hacking: The Art of Exploitation".

  5. Exploitation: OpenSecurityTraining also has a great video series for Introduction to Exploits. "Hacking: The Art of Exploitation" is a really, really good book that is completely self-contained and will walk you through the basics of assembly. The author does introduce you to C and some basic principles of Linux but I would definitely suggest learning the basics of C and Linux command line first as his teaching style is pretty "hard and fast".

  6. Specialized fields such as Cryptology and Malware Analysis.


    Of course if you just want to do "pentesting/vuln assessment" in which you rely more on toolsets (for example, Nmap&gt;Nessus&gt;Metasploit) structured around a methodology/framework than you may want to look into one of the PACKT books on Kali or backtrack, get familiar with the tools you will use such as Nmap and Wireshark, and learn basic Networking (a simple CompTIA Networking+ book will be a good enough start). I personally did not go this route nor would I recommend it as it generally shys away from the foundations and seems to me to be settling for becoming comfortable with tools that abstract you from the real "meat" of exploitation and all the things that make NetSec great, fun and challenging in the first place. But everyone is different and it's really more of a personal choice. (By the way, I'm not suggesting this is "lame" or anything, it was just not for me.)

    *edited a name out





u/HPCer · 1 pointr/cpp

When I started, the most memorable three resources I know I had were the following:

  • Bjarne's book - I don't think any C++ developer can truly call themselves even intermediate until they have absorbed at least half the content in the book. I started off with his 3rd edition, which is way less intimidating and shorter, but I subsequently ran through this entire book after it came out. There are no shortcuts on here - you need to read it.
  • Effective C++ 3rd Edition - I would almost require this one as it prevents any new C++ developer from getting caught in C++ gotchas. You should ideally follow this book up with his 4th edition afterwords. The reason why I recommended the 3rd first is because that book is much more newbie friendly. The 4th edition is targeted towards experienced C++ developers that already have had their feet wet with C++11/14 and want to figure out some best practices. Note the 3rd edition is for C++98 while the 4th is for C++11/14.

    After you're done with the two above required books, here are some useful readings:

  • What Every Programmer Should Know About Memory - This is an absolutely essential reading whether or not you've taken any systems courses. It's the foundation of what you will be programming towards (optimizing CPU cache usage).
  • 1024cores - I believe this guy works/worked at Google at one point, but his site is essential to understanding multi-threaded programming (which is essential in the field). Browse through his site and learn what you can.
  • Linux Kernel Development - Robert Love (who also works at Google) has probably written the most concise and understandable book on the Linux kernel I've ever read, and I've run through the Daniel Bovet's book and Michael Kirrisk's. For one thing, they're 1,000 and 1,500+ pages, respectively. Secondly, all I've found in those two books that I didn't find in Robert Love's is the implementation details in some areas as well as the details on the scheduler. Robert Love's incredible descriptions on the bottom-half/tasklets were already more than effective for normal understanding. I believe the latter books were more detailed in the networking areas as well, but in that case, you're better off with Understanding Linux Network Internals.

    The above readings will probably be a solid 6-12 months to read and absorb assuming you spend a couple hours a day, but I think it'll be well worth it in the long run since this type of stuff sticks with you for a long time. I read the above around 2013, and I can still talk about the CFS/other schedulers, software interrupts, and how the CPU cache works. It'll also make converting to other languages even more of a breeze because you'll know how everything works underneath the hood.
u/moarthenfeeling · 4 pointsr/gamedev

Check out Game Programming Patterns, it contains lots of examples of how to write code with a good structure.

Game Engine Architecture is also very useful, but much more theoretical and heavy, but it explains nicely most of aspects of game engines and gives you a lot of ideas of how to approach different problems.

Don't halt your progress by just reading these books and starting only afterwards: they'll take a long time to finish. Start with basic things, for example Game Loop chapter. Make a simple, but good loop and start building things. Just get something playable on the screen first.

By the time you do it, you'll have some problematic code which you'll need to fix. For example, you may not be satisfied with how closely tied some things are. At that point you'll read about event queues and will find solution to a lot of problems.

And that goes for everything. You don't just start with perfect architecture, but with some experience you'll get an idea about what works and what doesn't. Some people write the same spaghetti for a long time and don't improve, but if you learn some good concepts, it's very unlikely that you'll ever return to worse practices.

And it's also very important to not follow bad coding practices: globals are mostly bad, spaghetti code also should be avoided. Don't write big functions, don't write big classes. Don't just hope that the code will become better just randomly. Having huge functions and lots of global variables everywhere makes it much harder to improve and refactor your code.

Feel free to PM me with questions about how to make your code structure better. I'm very interested in the topic and will be happy to help.

P. S. If you haven't read Effective C++ and Effective Modern C++, you really should. It's a great way to improve your code considerably.

u/xSinxify · 2 pointsr/HowToHack

Both posts here (so far) give good advice in terms of learning assembly. I personally used the OpenSecurityTraining course that was linked by /u/miguelhgn to fill in gaps I had in assembly, and I second his advice to check that one out. If that course proves to be too steep, I'd take a step back and learn a bit of C -- so that you can better understand the context of the assembly you would be reading. For free resources, I generally like to recommend https://publications.gbdirect.co.uk//c_book/ or http://users.cs.cf.ac.uk/Dave.Marshall/C/ as they're iso-9899 recommend free resources that cover a pretty good scope when it comes to C itself.

If you'd prefer a more textbook style of reading, and don't mind shelling out money, I generally recommend C Programming: A Modern Approach above anything else that's out there, but it's far from necessary to get this if you find that you learn from the free resources just fine.

As for recognizing patterns in assembly over time as mentioned by /u/poindexter_one, that would best be implemented by using https://godbolt.org/ imo, and starting with smaller C snippets, trying different compilers and optimization levels, and gradually doing the same with more complex code. A good exercise when you start to get good at that, is to also try to do the same thing in the opposite direction (Seeing assembly, and trying to construct C code from it, AKA a part of reverse engineering)

As for your question "Should I learn Assembly language?" depends on where your interests lie, and what you eventually want to learn / be able to do down the line. It's absolutely a good thing to be able to understand though.

u/jj2parkie · 1 pointr/learnprogramming

I started programming in Java few months ago to develop Android applications. These are the resources I used:

  • Java 8 Pocket Guide: This book is very short in length and paper size. It is great to learn the syntax of Java 8 really fast with a general overview of the core libraries in Java SE 8.
  • Effective Java (2nd Edition): After learning the syntax of Java 8, this classic book discusses the best practices of using the Java language in a list of around 78 items. For example, "Item 1" is "Consider static factory methods instead of constructors", and then it explains why.
  • Java Concurrency in Practice: This book is also another classic which a lot of people use to learn concurrent programming for the Java language. It's a difficult book for me: very technical.
    • Introduction to Rx: Netflix has ported the Reactive Extensions library from the .NET platform to the JVM which you can find here: RxJava. It's Wiki with their marble diagrams are amazing. It allows a lot of the new features of Java 8 such as lambdas to utilize functional reactive programming for the Java language. It's all about Observables, and it's main purpose behind its development was to allow the Netflix team to prevent everyone from reading Java Concurrency in Practice as it trivializes concurrency especially for medium to large systems.
  • Clean Code: A Handbook of Agile Software Craftsmanship: This book is also another classic. It uses Java I believe for the examples. A lot of people love this book as a higher level supplement to Effective Java (I think) because it covers best practices for the Java language in designing code for emerging systems or scale-able systems and other topics like TDD.
  • Design Patterns: Elements of Reusable Object-Oriented Software: This book is the classic book (emphasis on "the"). It lists a lot of design patterns which you can use for languages like Java or others. The samples are written in C++ so since you have an experience with C, it can help. I loved this book for learning about Factories, Singletons, Decorators, Observers, Adapters, and more. Using design patterns really helped me solve design problems in my Android application so that it can be easily refractorable.
  • Introduction to Algorithms: The classic standard algorithms and data structures book I suggest if you are not familiar with them. Knowing the concepts can help fine tune your applications performance wise even if you do not implement any algorithms or data structures yourself.
  • Software Engineering: A Practitioner's Approach: A kind-of classic book about the software engineering profession. Its five parts are the following: "The Software Process", "Modeling", "Quality Management", "Managing Software Projects", and "Advanced Topics". Along the way through the book you gain a general understanding of how to write requirements, UML diagrams, and the like.

    All of these books except for the first are near 400 pages each. However, most of them do not require you to read all of it. It would be great to read them entirely, but you can still make do by reading the sections you need the most. A lot of the books listed as classics are books I found that a lot of universities use as I was browsing some curricula. This list focuses upon general programming as I believe mobile development and web development are just learning how to use frameworks which I consider trivial to learn generally since a lot of people say that if they work a place that uses framework X, their workplace gives them some time to brush up or get up-to-speed with the framework and how to use it over a few days unless you require a niche or complex solution to a problem.

    If you are not a huge fan of books, searching these titles will probably provide online tutorials or videos. The Amazon links can provide great reviews and suggestions. I like the books even if they are a bit long because of their professionalism, review, and rigor associated with the publication process of these textbooks that inhibits the rise of bad habits which might be introduced by online sources.

    I do not know your background with these topics, so you may already know the, but these are the resources I think which really helps people transition from just knowing syntax as "knowing a language" which they translate to "I'm proficient in X because I can write a program which allows you to save text to a file" to knowing a language regarding software engineering concepts which helps you work properly on projects medium to large projects you would find in a workplace as an intern maybe entry-level employee (but more formal education might be required).

    However, I'm pretty much like a high school student (took a year off before starting college to recover from an illness), so take my advice with a lot of salt, but these books which I couldn't apply 100% helped me make a small-medium sized Android application: https://github.com/jparkie/Aizoban which was designed enough to allow me to manage refractoring to introduce new features or fix issues which I believe would have been impossible if I hacked my way through to write around 35,000 lines of code.
u/Adams_Apples · 1 pointr/learnprogramming

My recommendation is that you learn the C programming language well before attempting to learn Objective-C. There are tons of online and text resources for learning, the one most used by university C programming courses is this text:

http://www.amazon.com/Programming-Modern-Approach-2nd-Edition/dp/0393979504/ref=dp_ob_title_bk

Ideally you should get a copy of this or another good learning text, but again, if money is an issue there are resources online for learning.

Here's a good site with lots of videos: http://www.lynda.com/default.aspx
Also this: https://www.udemy.com/c-programming-for-beginners/

And there are resources online that are totally free as well, although they aren't typically as comprehensive and may require a bit more initiative on your part, a quick google search will give you several examples.

With all that said, I'll go ahead and answer your questions, with the understanding that if you just try to dive right into Objective-C it might not work so great for you. This is going to be over your head, so don't get discouraged by it, just remember, we all started somewhere, good luck learning programming!

&gt; 1.) What is a property?

A property is an attribute that the system automatically creates standard accessors (methods to get an attribute) and mutators (methods to change an attribute). Properties also allow you to specify atomicity (a specifier that guarantees thread safety at a small performance cost) as well as reference strength (strong adds 1 to reference count, weak does not). There is more to them than this, this is just a brief overview answer.

&gt; 2.) Why do you need both a public and private API? How do you determine what goes in which?

Public simply means things that you want exposed outside of a class, whereas private are things that only the class should see. By doing this, you can convey to programmers who use your class how the class should be used, as well as restrict access only to attributes that the user of the class needs. This concept is called encapsulation, and is a key concept in object-oriented programming.

&gt; 3.) What is an argument?

An argument is a variable or object that the calling function supplies to the called function. It is the primary means of passing information from one function to another function.

&gt; 4.) What is a heap and a stack? What does it mean when objects "live in the heap"? (Do they live in condos? Is it a quaint suburban community?)

The heap is a block of memory that can be allocated as a program is running. In Objective-C, all objects reside on the heap, because of the way the Objective-C runtime works. In contrast, the stack is statically (compile-time) allocated memory. Primitive types such as int or char are statically allocated.

&gt; 5.) So classes are the .h and .m files in Xcode?

The files with the .h extension contain the interface of a class, which is the file that other classes using this class import. The files with the .m extension contain the implementation of a class, which is where the details of how a class's methods are outlined. This separation exists to simplify linking of files when a program is compiled, as well as to facilitate precompiled libraries (where only the header is visible as source, the implementation is provided as a binary).

&gt; 6.) What do all the differet colored text in Xcode mean?

In Xcode, go to Xcode &gt; Preferences &gt; Fonts &amp; Colors

&gt; 7.) Why are some things capitalized and others are not in Objective C code?

As you learn programming, you'll learn that good programmers adhere to conventions when writing code. The specific reasons why things are named the way they are will come to you as you learn, just bear in mind that good code that follows recommended guidelines is easier for other programmers to work with, your colleagues will thank you for doing it right!

u/ooa3603 · 2 pointsr/cscareerquestions

I agree, I think software development skills are going to only further bleed into other stem disciplines in the future. Plus it can be a back up skill if traditional engineering ever gets tiring. That way you're not tied to only one employment source.

I'd also steer away from VBA or .NET and get better at python (for the data analytics in research) and learn C (for potential robotics applications). I normally wouldn't recommend C as a first language since it doesn't do as much for you as other languages, but this FREE edx Course does such a great job of teaching it interactively that I think it's worth it in your case: https://courses.edx.org/courses/course-v1:Dartmouth_IMTx+DART.IMT.C.01+1T2018/course/. I like this course because they have a in built C compiler and a visualizer that shows you what each command you type would do to the program.

CS definitely bleeds over into some disciplines. Especially since you have an interest in research and robotics. I think a combination of ME + a CS minor can get you a foot into some research and/or robotics internships.

As for books, I think a combination of Think like a Programmer and Head First C and Head Start Python would be great "beginner books"


Then if you find out you really like programming you can get into best practices and how to build bigger complex programs with a book like Code Complete.

But before all of that just get the basics with python, then move to C if you ever decide to move into robotics.

u/virtualmilkshake · 2 pointsr/ITCareerQuestions

"IT skills" is pretty broad. What is your IT degree- MIS, Cyber Security, Information Sciences, etc? The answer will really depend on what your degree is in and what your interests are. For example, I could tell you to study programming, but if your degree and interests align more with Cyber Security policy implementation, that might not be the best recommendation for you.

As somebody who has been on a few hiring committees, I'd say to work on your soft skills. In many cases, these are more important than technical capabilities. Specific soft skills I look for in new hires: organization, attention to detail, solid time management, communication, and self-sufficiency yet a team player. For us, we will take the candidate who doesn't know everything but has a good attitude and willingness to learn over the person who thinks they know everything and has a horrible attitude.

General technical skills you should toy around with: know your way around Active Directory in Windows, learn how to view event logs on a system (for Windows, hit your Start key and type in Computer Management), NIST Risk Management Framework, learn the parts of a computer and how to set them up and tear them apart. Learning Linux is also good- what I did to understand Linux better was purchase a Raspberry Pi and set it up to run Raspbian OS and RetroPie (to turn the Pi into a retro gaming machine). I also purchased The Linux Command Line and practice the commands from the book in the Raspbian terminal.

Also, before graduation, try to get some kind of internship, even if your major doesn't require one for graduation. It's a great opportunity for you to build hands-on experience and work in an IT environment doing real work. Oftentimes, you will learn something new in your internship that is not taught in school, and the experience might broaden your interests a bit (not to mention you may get a job offer or at least great references because of your internship!). If you need assistance in trying to figure out how to land a good internship, just let me know.

u/JacboUphill · 3 pointsr/UCI

You don't have to know anything about programming going in, as aixelsdi mentions. If you want to get ahead, here's some information which may help you do so. The rest is up to your own initiative. It can never hurt to know more about CS or more languages, as long as you don't waste time complaining about what's better in [insert language of choice].

I wouldn't recommend learning data structures and algorithm analysis before coming to UCI. Not because they aren't fundamental, they are. But because most people find it harder to learn those abstractions before learning the tools that utilize them (Python, C++, etc), which is why ICS 46 and CS 161 aren't the first classes taught. If you like math proofs more than math problems then maybe go that route, it could be helpful as iLoveCalculus314 mentions.

Languages: The CS introductory series (31-32-33) which you'll be taking first year is taught in Python. It switched to this because it's a good first language as a teaching tool. Right after you're done with Python, 45C will teach you C++ and 46 will use C++. The lower division systems core (51-53) generally use C or C++ but it differs by professor. Knowledge of Python will be useful in making your first year easier. Knowledge of the other two will make your next three years easier because they're common mediums for upper division courses. But you should be able to pick up a new language for a specific problem domain by the time you reach upper division.

Courses: If you want to get a head start on planning your courses, check the UCI Catalogue - Computer Science page. At the bottom it lists a sample of what your schedule over the 4 years might look like. That page is for the "Computer Science" major, for other majors in ICS see here.

Course Resources: You can actually view the Schedule of Classes without being a UCI student. Select a term (like Fall 2014) and a department (like I&amp;C SCI) and it will list what classes were offered that term. Most lower div will be I&amp;C SCI, most upper div will be COMPSCI. From the results you can go to the websites for those courses to see a syllabus, books used, etc. For example, here are the current websites for the introductory series ( ICS 31, ICS 32, ICS 33 ).

Your course professors and books and assignments will NOT be identical to those, but looking at what's currently taught will give you a pretty good idea of what the course entails so you can pre-learn anything that sounds difficult.

Books: If you have to pick one book to learn before coming to UCI, I would highly recommend C++ Primer, 5th Edition. It's very well structured as a self-teaching tool AND as a reference manual. You won't come away with any Python knowledge, but picking up Python as someone versed in C++ is easier than the other way around, and you'll find 45C much easier as well since you can focus on language quirks rather than fundamentals.

If you choose to learn Python first, Introduction to Computing Using Python: An Application Development Focus is the book currently suggested for ICS 31/32, and Learning Python (5th Edition) is suggested for ICS 33.

Another solid circlejerk book in the CS community is Code Complete, but I wouldn't recommend reading that until later on since it's more of a "best practices" book.

u/xnoise · 1 pointr/PHP

There are a ton of books, but i guess the main question is: what are you interested in? Concepts or examples? Because many strong conceptual books are using examples from java, c++ and other languages, very few of them use php as example. If you have the ability to comprehend other languages, then:

http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&amp;amp;qid=1322476598&amp;amp;sr=8-1 definetly a must read. Beware not to memorize it, it is more like a dictionary. It should be pretty easy to read, a little harder to comprehend and you need to work with the patterns presented in that book.

http://www.amazon.com/PHP-5-Objects-Patterns-Practice/dp/1590593804 - has already been mentioned, is related directly to the above mentioned one, so should be easier to grasp.

http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420/ref=sr_1_1?ie=UTF8&amp;amp;qid=1322476712&amp;amp;sr=8-1 - one of the most amazing books i have read some time ago. Needs alot of time and good prior knowledge.

http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_4?ie=UTF8&amp;amp;qid=1322476712&amp;amp;sr=8-4 - another interesting read, unfortunatelly i cannot give details because i haven't had the time to read it all.

u/1nf · 1 pointr/cscareerquestions

CompTIA content is too much theory imho and having to renew them every 3 years now seems less appealing to me.

I'd say you head for the CCNA directly. While studying CCNA, you can use the Network+ study materials for any theoretical aspects you don't understand. N+ covers these better than most CCNA study materials.

Security+ is very nice but again, renewing every 3 years is not appealing. However, it does teach you a lot about security processes and a bit of law, compliance and standards.

There are other security certifications, some vendor dependent like the CCNA Security or the Juniper ones. If you're using these products, they are worth having otherwise, there are not many vendor-neutral ones as good as Security+. Careful with some of the vendor-specific ones, they tend to be more like adverts for products instead of certifications, basically "my product can do that!"

For Python, you are right. It's an excellent language for writing quick scripts for automating things. I personally liked Learning Python as reference, but if you're a beginner then Dive into Python3 might be appealing. Head First Python is also good but a new edition is due in 2015 I think.

You might have to choose between Python2 and Python3. Yes there are incompatibilities and not all libraries are available for Python3 yet but if you're starting from scratch, start with Python3 directly.

u/10_6 · 19 pointsr/learnprogramming

Nice curated list, but I'd recommend adding a few more interview prep sites from this list:

The 10 most popular coding challenge websites for 2017

Because I would definitely recommend someone to check out TopCoder, Coderbyte, and Codewars if they are preparing for an interview.

Here are a few resources I've also used when preparing for interviews (taken from previous comments of mine):


  • Read the Algorithm Design Manual.

  • Go through some of the challenges on this interactive python algorithms website.

  • Practice coding simple and then more advanced algorithms on sites like Coderbyte (my site) and HackerRank which provide good explanations and solutions as well. Here's a list of popular coding challenge websites in 2017.

  • Read as many algorithm explanations and code examples as you can on GeeksforGeeks.

  • Try and implement basic algorithms yourself like: shortest path, minimum spanning tree, DFS + BFS, tree traversals, different sorting algs, min/max heap, etc. and learn about their running times (big-o).

  • Look at some interview questions posted on careercup and try and understand how other users solved the questions. Like this example.

  • Aside from coding challenge sites, try and solve common coding interview questions you find online such as this list.
u/Shogil · 1 pointr/StopGaming

"I craved for games that had easy achievements so I could feel good again."

+1

The industry gamifies games to make you want to play them regardless of their quality. It's not even a "I want to finish a hard game" or "I want to complete a hard game". You just want the 100% completion/platinum trophy and we will be inclined to choose the easy way to the reward.

I've been reading about dopamine and its behavioral effects. Apparently it doesn't only moderate reward but also motivation. Check my comment posted today for explanatory links.

You essentially opted in for easy reward over hard, it's like opting to avoid going to the gym or improve your social skills in favor of playing video games and indulge to pornography. Another good book is the shallows: what the internet is doing to our brains where the author argues that the medium (how we choose to convey a message) can affect us more than the information.

Because another thing that gives us quick fixes is the novelty of browsing Reddit for funny things, and the warmth of social approval that we get from getting one of our comments/posts upvoted.

u/k_Reign · 1 pointr/gamedev

Thanks a lot! I actually have that first book bookmarked but I forgot to put it on the list.

I'm leaning closer and closer to purchasing a copy of The Art of Game Design: A Book of Lenses and it's one I'm actually really curious about.

On Game Physics Pearls - I peeked into the first few pages and it looks like something that I will pick up once I have a bit of experience in that area...does that sound about right or would you say it could cater to beginners fairly well?

Game Physics seems like it may be a bit more beginner-friendly but you are right about it not being a tutorial, which is kind of important for me at this step. I'm definitely bookmarking this until I know a bit more on the subject, though. I'll be taking a Physics course next September so it may be a good time to look at it after that!

Real-Time Shadows looks very interesting but I'm unsure to the difficulty level of it to a beginner. It sounds like I need to brush up on my math after three years of not using it very often at all.

Thanks a lot for the suggestions!

*I'll be taking a course on Linear Algebra here in the coming semesters, but that book does sound like a good introduction along with how it works within 3D programming. I'll keep a look-out on that for a while; do you think it would be very worthwhile to read that before something like Real-Time Rendering?

u/valbaca · 2 pointsr/cscareerquestions

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 &lt;language&gt;" 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 &amp; 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 :)

u/Aazadan · 1 pointr/cscareerquestions

So basically, what I do is I work for a large company that has almost no understanding of software.

Said company makes a lot of equipment that for various reasons is hard to provide hands on training for (sorry if I'm being a bit vague here, but I rant about work a lot on Reddit to blow off steam so I don't want to identify myself too much) so what I do is I recreate those things in VR (or sometimes AR depending on what better meets the needs).

By doing this, we have products that can be pulled up on demand, configured however we need, processes can be done in a way that mimics a hands on experience, and a lot of the logistical problems get removed. The end result is better quality training for workers, and a massively reduced cost as we eliminate time delays and travel overhead.

What we primarily work in is Unity. You do not need a game dev specific education to do game dev, but there are a few concepts that are used heavily in game dev that aren't used nearly as much in other areas.

Naturally, algorithms and data structures are still king. Efficiency is everything in game dev because you often can't just throw more servers at something to scale. You have to take your clients hardware into account as well. Poorer performance means your customers need better hardware, and that starts to limit your market. In my case, since I build everything for internal use, I get to basically specify the hardware they use, which makes this a lot more pleasant, it's analogous to making something for a console that's going to be exclusive to just one platform.

The most used data structures are often different as well. I would say that what I use is probably 90% lists, 5% dictionaries, 5% graphs, though the graph portion tends to make up the backbone of everything so it's extremely important.

Other than that, runtimes of algorithms are very important. For the stuff I do, we try to maintain 120fps for our headsets. So that means we need to handle all of the processing and rendering in each frame in 8.33ms.

Even mediocre code can typically execute in that time, and the real bottlenecks are on the CPU load side of things like lighting calculations and collisions, which more often than not fall on the artists unless you're doing graphics programming.

Math wise, there's typically a small amount of linear algebra if you have to deal with 4x4 matrices, but otherwise most of what you deal with tends to be things like vectors, normalization, dot product, and so on. If your university offers a class on 3d math it would be worth taking. If they don't, memorize this book and you're set https://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

Unity and Unreal are the two biggest game engines, both of them use a component based system. So reading up a bit on good component based design patterns is a good idea as well. There are other game engines out there, and those may or may not use components. But, component design is going to be the future.

If you want to know anything else, just ask.

u/joeswindell · 5 pointsr/gamedev

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.

u/kalas_malarious · 7 pointsr/gamedev

Are you looking for how to make games? Not just programming, but actually make them? I have some suggestions, but they often aren't about programming. There is a million books about programming, but finding those that talk about the ideas and ways to successively improve is a better point to start from.

  • The Art of Game Design: A Book of Lenses
  • Game Design Workshop: A Playcentric Approach to Creating Innovative Games
  • Kobold Guide to Board Game Design

    Making video games is easy. Put the pitchfork down and let me explain. Anyone can open unity and load some assets and call it a game. Making good games is difficult, and even if you are not looking at card/board games, you should be prepared to test your game on paper. It is easier to make iterative improvement if you can look for mechanical and mathematical issues by scrawling some notes on paper cards.

    For a book that covers both programming and game design, I also suggest this one.

    These books will cover the psychology, the pitfalls, etc that come with making a game. You do not need a class to make a game portfolio. You can often get things done faster by a book, because it's goal is to teach as you read, not set a timer for 15 weeks. It can assume you will do it over 26 weeks or more if the book is huge.

    Anyway, this is a much larger reply than I intended. Hopefully these are informative. If nothing else, they are significantly cheaper than a class.
u/KagakuNinja · 2 pointsr/learnprogramming

I personally always use an IDE, because you will soon discover that there are dozens of libraries used by real world projects, and you cannot possibly know everything about them. However, IDEs have options to turn off autocomplete, incremental compilation and syntax highlighting, if you are a masochist... Google is your friend.

I read Algorithims in C++ by Sedgewick, and it was great, but not important for learning to code. You need to know the basic concepts of: the Java standard library, especially collections, looping constructs, etc. Any good tutorial should cover these. General CS knowledge is great and you will be quizzed about it in interviews. However, not necessary when starting out.

Eventually you will need to know about the Java memory model, concurrency and thread safety this was the Bible back in the day, maybe there more up-to-date options.

Math is an interesting topic; in college, you have to learn calculus, which is where many of us decide that we don't like math. This is a pity, since programming is applied math. Also, math gets more interesting, but often weird, when you start studying upper division topics.

Most data structures are based on set theory and relations, which are taught in Discrete Math. To understand what a function is, you need to know about Set Theory and/or Category Theory. Category Theory is fascinating, and particularly important for understanding functional programming. This is a great resource. To understand graphics, you need to know about Geometry and Linear Algebra.

It also helps to understand the basics of Probability, Combinatorics and Abstract Algebra. All of this math is advanced stuff however, most programmers don't need to know any of that...

u/tyroneslothtrop · 1 pointr/learnpython

Really, that's not even something I would consider all that important to know off-hand. I actually had to go to the REPL and the docs to verify how the int function behaved with alpha-numeric strings. This is the sort of thing that people might pick up with experience, but I wouldn't say it's such a commonly used feature of the language that not knowing it reflects poorly on your abilities.

If you don't know something like this, you can just say that and use the question to demonstrate your reasoning skills and your general knowledge of the language. E.g. "I don't know how that would work off hand. But I know that python is a strongly typed language, so it doesn't do implicit casting. But where this would be an explicit casting, maybe it interprets the string as a number if a high enough radix is specified. Or maybe it behaves like ord and returns the ASCII value of the character. If I was in the python REPL, I would type help(int) to see how it works, or I would go to python.org and look at the docs."

Actually, having mentioned that last part, it strikes me that it sounds like they might have actually been talking about ord, not int.

Anyway, if, on the other hand, they're only looking for the technically correct answer to questions about obscure, unimportant, or easily googleable aspects of the language, then they're probably not very good at interviewing, or aren't all that knowledgeable themselves. I don't know if there's much you can do about that, unless you're willing to pursue an encyclopedic knowledge of the language. While it's good to be more familiar with a language, I don't think it's generally worth anyone's time to try to memorize every single aspect of it. Who cares if you don't know the exact signature for the range function, or the exact string formatting syntax to left-align text and specify a 79 character width, or whatever? That's what the docs are for.

Having said all that, the int casting question sounds like it was kind of stupid, and if you're conveying it correctly, it sounds like maybe they don't even know what they're talking about there. The dictionary question, though, doesn't sound like a trick question at all. First-class functions, and the 'everything is an object' philosophy are pretty core features of python. If that's new to you, maybe bone-up with Dive Into Python, or Think Python, or Learning Python, or similar.

Good luck!

u/George3d6 · 2 pointsr/cpp

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:

-&gt; so documentation

-&gt; [Programming: Principles and Practice Using C++](https://www.amazon.com/dp/0321992784/?tag=stackoverfl08-20](https://www.amazon.com/dp/0321992784/?tag=stackoverfl08-20)

-&gt; 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.

u/lazyAgnostic · 1 pointr/santashelpers

For programming, what kind of programming is he into? Here are some cool programming books and things:

  • Automate the Boring Stuff with Python This book has a lot of beginner projects that are actually useful.

  • Arduino A little microprocessor that he can use to make cool projects. I'm a software engineer and I had fun playing aroung with this. Plus, you can use it for actual useful things (I'm planning on making an automatic plant waterer, but you can look online for all the awesome stuff people have made).

  • Raspberry Pi Similar to the arduino but it's a full computer. For more software-heavy projects than the arduino. I'd probably recommend starting with the arduino.

  • Great book about how code and computers actually work that's geared towards the "intelligent layperson" link.

  • If he's already programming and wants to create games I can recommend this one.. Not good for beginners though.

  • If you want to give him a well written tome about game programming here it is. Again, not really for beginners but really good for someone wanting to learn about game programming
u/JonKalb · 28 pointsr/cpp

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!

u/gavinb · 1 pointr/opengl

Well if you want to be the next Carmack, get cracking! :) You have a lot of ground to cover, such as: mathematics (matrices, linear algebra, etc), physics, artificial intelligence, real-time processing, multithreading, architecture, networking and protocols, rendering, sound, and much more!

It is certainly possible with enough time and dedication to develop your own engine. It's just that there are so many excellent engines already out there, that you would be competing with projects that have already invested many thousands of hours and have loads of titles already developed for them. Why not get involved with an existing project to start?

BTW I really like your idea of creating a FPS with one room and focusing on making that environment the richest possible, exploiting a wide variety of techniques. Do it!!

Is your ultimate goal to create an engine? Or to create a game? Remember, the engine is in many ways a means to an end - it's not much use without a game that uses it!

Either way, I think you would be well advised to get involved with one of the open source game engine projects, and start contributing. Once you've learned how they work, you will be in a much better position to design your own. And realistically, you can't really just design an engine without a game - you need to know how games work in the first place, and what features and architectural decisions and designs make for a good engine.

Consider joining:

u/mdaffin · 10 pointsr/webdev

&gt;Is there something wrong with me? Or is this a normal thing?

No, programming challenges are more about general problem solving via coding than the ability to write functioning apps. You have experience in the latter and not the former so will not be as good at coding challenges.

But like everything else practice is what makes you good at something so if you keep trying them you will be able to learn to solve them. And I think it is worth doing so, they teach you to techniques to solve some harder problems you can face in real world applications, though you might not see them as often. Overall they can make you a better programmer.

But there is a limit to their usefulness, like if you master app dev you don't master coding challenges, if you master coding challenges you won't master app development.

Solving the problems of coding challenges is a skill. It can be learnt like any other skill. I think it is worth learning how to solve them, but there is no need to become the best at solving them. If you are having trouble with all of them I highly recommend reading Think like a programmer which teaches how to better tackle problems you face and break them down into easier to solve chunks.

---

Some interviewers will ask you to solve a coding challenge. Through not always and the ones that do often use the same challenges (fizzbuzz is a classic one). Not being able to solve them will hamper some of your attempts to get a job, but won't stop you from getting any job. It won't even stop you from getting a good job as better places often ask better problems that are more relevant to the job rather than some random challenge they found on the web.

u/jephthai · 1 pointr/AskProgramming

This is very much like saying, "I've learned how to write letters, and copied lots of sentences, paragraphs, and poems, and understand what they mean. How do I start writing my own text?" Programming as a creative art is a different thing from understanding the lexical structure of a language, or how to understand data organization, etc. It's as different as reading is from writing.

What you need is not directly connected to C# -- you need to develop a mindset and problem solving skills that let you turn a problem into a solution (which happens to involve programming). Relatively few courses or tutorials teach this, and I'd even say that many people who work in industry don't really have it either, unfortunately.

There are some resources out there along these lines. One interesting one is Think Like a Programmer, a book about analyzing problems and ways to come up with ideas to solve them.

Another great way is to learn from people who know how to do it. It's difficult if you don't know anyone. But one of the best things I've run across are conference presentations from people who've written amazing programs. A neat example (though maybe lower-level and geekier than you're looking for right now) is a talk by Eric Chahi, where he describes the genesis, design, and labor that went into creating the famous video game Another World.

One of the best things I learned in college was in an AI class. My professor taught a certain thought process that became an outline for many of my projects. Start with your data, determine how to represent it effectively, write code that does things with your data as you learn to manipulate it, and start putting the pieces together to do bigger and bigger things until it starts to look like a solution to your problem.

Good luck!

u/SunyiNyufi · 2 pointsr/GirlGamers

So as some of the others: I'm not from the gaming industry either (though I plan to make games on the side). And an other disclaimer: I'm over 30.

Let me just say most people in their 20s don't know what they would like to do, and even if they do, your interest will change over time, so just try to say flexible and don't fear making a switch if you are unhappy, of course within reason and financial security.

I recently switched from my regular office job to a less regular one in software development. My official background in software dev before was: none. I picked up coding like a year ago or so, because a C# course for game development was super cheap on Udemy (and by super cheap I mean like 10 or 15 USD), and continued learning coding ever since. Though I was a privileged candidate for my current job, because it was an internal hire, I basically got it by showing them what I can do. And we don't even code in C# in my new role lol

So my point is: learning doesn't have to be expensive, while some jobs require a specialized college degree a lot companies nowadays are more interested in whether or not you can do the job.

Also there are some Game Music courses on Udemy as well, though they might be too basic for you, still worth to check out imho :)

If you are interested in game design I would recommend this book too The Art of Game Design: A Book of Lenses https://www.amazon.de/dp/1466598646/ref=cm_sw_r_cp_apa_i_nay4AbC7P2BFB

u/sweetyi · 1 pointr/gaming

ALL technology? As in you're not even allowed to listen to music? Because that's what I'd recommend if you can get away with it; a lot of people listen to music while they do other things but very few people sit down and relax and focus on listening to their favorite music without multitasking, it's a great way to pass time.

Failing that, taking up drawing or writing are economical options considering you're tight on cash. A loaner guitar or cheapo from a pawn shop could be healthy hobbies, but they're tough to learn without your computer to access resources.

You said you don't like reading but I'd suggest you try to learn to love it, because it's going to be one of the cheapest and most fulfilling ways to pass time given your constraints. I think as you spend time away from technology you'll find reading more enjoyable as your mind recovers some of it's ability to focus. Just going out on a limb here (and projecting a bit), but do you often feel unable to focus on tasks like reading long passages or say sitting back to watch a movie without interruption? I know at least one author who's written a book suggesting that the way we're presented with rapid-fire and incredibly diverse information/entertainment on the internet has left our ability for deep focus impaired, while our ability to multi-task has improved.

Another option that occurred to me mid-post is that you might try to find some cheap model airplane kits or something like that, they're quite time consuming if you can be meticulous.

u/shizzy0 · 1 pointr/gamedev

There are lots of books that purport to do something like this, but the field is so varied in terms of tools and styles, it's kind of a fool's errand. One merely ends up writing a, Here's How I Did-It/Would-Have-Done It.

One book I like that is very comprehensive when it comes to game design is The Art of Game Design. It does try to address the practical matters of making a game, but that's not its primary focus.

One book I would recommend for finishing is The Game Jam Survival Guide and just doing a game jam like ludum dare. A game jam is a great way to get experience finishing a game, and time is so tightly constrained that it forces a very different, scope-limited mindset. The ideal is never, ever attainable and yet some really creative, amazing games do come out of these jams.

u/CannibalAngel · 6 pointsr/ccna

The CCNA can be taken a few different ways. As 2 exams (ICND1 and ICND2) or 1 exam (CCNAX). The combined exam is mostly for re-certification and for people that have been in a Cisco networking role for a while. Beginners should take the 2 test route. It is only $5 more expensive and will be much easier than the 1 test path.



Taking an instructor-lead class is going to be a crap-shoot. How good it is and how well it prepares you for the exam are ENTIRELY dependant on the instructor. Plus in-person classes are usually expensive. Self-study, in my opinion, is the way to go for almost every certification.


You should always use multiple resources to prepare for any exam. I recommend the following for the CCNA:



Pick up the Wendel Odom OCG (Official Certifiaction Guide). You can get it on Amazon for around $40 for both the INCD1 and INCD2 books. You can also get the /u/lammle book for around $30 on Amazon. The Odom book is considered very dry and hard to read, but has more information and goes deeper into the subjects than the Lammle book does. I personally do not have a problem with the Odom book and have readt it all the way through.



You should also get a video course. There are tons out there (CBT Nuggets, ITPro.TV, INE, Kevin Wallace, etc.). I recommend Chris Bryant's course on Udemy. It usually costs around $12 and is extremely good for the price.



You also need a lab of some kind. The most recommended would be a Hardware lab (with real Cisco routers and switches), GNS3, or Packet Tracer. Obviously a hardware lab is going to be expensive (probably around $300 for a basic one). I use Packet Tracer and while it has it's flaws and limitations it seems to be good enough for the CCNA. On top of that it is FREE. GNS3 is also free but requires that you have your own IOS images to run in it (which are not free unless you go a less-than-legal route to aquire them). There is also INE's lab and Cisco's VIRL but they are very expensive and VIRL requires a pretty beefey machine to run.



Read a book, watch a video course, and lab EVERY concet you can. If you really get stuck and can't figure something out or don't understand something after researching it yourself, come post here and ask. We are always willing to help.

u/dmazzoni · 2 pointsr/learnprogramming

&gt; I learned in android studio and got to a level where I could create an app. Little did I know, it was just a giant main activity with 100s f methods. My friend looked at the code and told me I needed to learn polymorphism. Now I've redone the code so it's all inclasses.

Yep. This is a really common stage in learning. It sounds like you maybe went overboard and created way more classes than you needed.

Next time I might suggest starting with your working program with just one big activity, then splitting things into separate classes one at a time.

&gt; Well, I have to keep updating a bunch of list sizes to the main activity, but the problem is that the polymorphism has the list sizes passing through 4 classes to get to the main activity. So, I set up a bunch of interfaces that react when things are done within the classes all encapsuled in one overreaching class. I don't know.

I think you're blaming "polymorphism", but polymorphism is just a tool. You can use it to make good designs or bad designs. It's quite easy to use it to design something that's cumbersome and less effective than if you had no classes at all, and it sounds like that may have happened here. It doesn't mean there's something wrong with polymorphism.

I think you're conflating two separate things here: (1) what's a good design, and (2) how do you make your code work.

(2) is easy. If you post a small, complete program that doesn't work, we can help you understand why. We can't do that if you just post vague questions and snippets of code.

(1) is hard. This takes years to get the hang of, and a lifetime to master. At a good software company you'd learn this slowly by mentorship - you'd have a senior programmer reviewing every change you make and guiding you through the design one feature at a time. You'd get help organizing your code long before it got to hundreds of functions.

If you don't have that option, or even if you do, I'd recommend the book Design Patterns as a way to better understand how to use polymorphism effectively.

You're also welcome to post such questions here, but they have to be very specific. You have to tell us what your app does, in a lot of detail, and how you've organized it into methods. I can't give you advice on something vague like "passing list sizes to the main activity" because I don't understand the purpose of the lists, the purpose of the sizes, or the purpose of passing them to the main activity.

u/soundslikeponies · 4 pointsr/programming

You can always read books. Textbooks are much better to read when you're free to browse and pick out whichever ones you like. You can get a surprising amount of reading done just by reading on the bus, on the can, and whenever you've got nothing better to do.

A popular stack overflow answer has a pretty good list. You can preview the introduction of most books on amazon.

People like to champion the internet as "oh, you can learn anything on the internet!" Which is true. But you can learn it much faster and better from a book (generally speaking).

Books provide a long format which has a chance to build upon itself. Also, everything is collected in one place for easy access. More developers ought to sit down and read good books.

u/dohpaz42 · 3 pointsr/PHP

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.

u/greyaxe90 · 1 pointr/computertechs

Oh you're very welcome!

For resumes, the cleaner the better. You want it to stand out, but, please, do not make it flashy. When I was a technical support supervisor, I was able to assist with the hiring and interview of techs. First we'd run through the resumes and throw out the ones that were covered in glitter, fancy paper, bright paper, and this one was covered in Windows logos... the paper was watermarked with a Windows logo and even the bullet points were Windows logos (we were a Windows-based web hosting company). These kind of resumes leave a bad taste in your prospective employer's mouth. Here's a great template that is similar to how I have my professional resume setup. Minus the sidebar and the header (this stuff I just placed at the top of the page formatted like all the other sections with the exception of my name and contact info), this pretty much lines up how you should have a professional resume. This one is probably a better example. I'd also suggest getting a LinkedIn profile if you don't already and mirror your professional resume on there. Head hunters do frequent LinkedIn and you could get a future job offer from there as well.

I would focus on getting your A+ and Network+ upfront because they substitute some experience. Just take note that CompTIA has changed the tests so that re-certification every 3 years (I think) is required to keep your cert(s) in good standing. This book is shipping in August, and should be considered the Holy A+ Bible. It is pricy ($60), but worth it. Before I get too further along, it's worth mentioning that the A+ is 2 parts. Part 1: Hardware, Part 2: Software (Windows). I heard rumors that CompTIA was supposed to finally axe Windows 9X from the exam (yes, I know... you have/had to know Windows 95 for the exam...) but no idea if they actually did or not. This guide seems like a great starting ground.

I used the "Exam Cram" series which include several practice tests along with lesson reviews and chapter tests. But there are a wide variety. I'd really suggest going to your local Barnes &amp; Nobel and browsing the selection of A+ and Network+ books they have and find one you feel will help you learn the most out of.

Let me know if you have any questions!

u/doss_ · 7 pointsr/linux4noobs

the easiest way is to strictly identify which part is really the variable:

foo=test

cp $foofile testdir/. # cp: missing destination file operand after 'testdir/.' ($foofile doesn't exist and expanded to null, not enough required params for cp)

cp "$foofile" testdir/. # cp: cannot stat '': No such file or directory ($foofile still doesn't exist, but expanded to '' due to double quotes usage - good practice)

cp ${foo}file testdir/. # will compy 'testfile' if exists

Also it is usefull to access command line params from inside the script if there are more than 9 params, to access 10th param use ${10}

and here is some list i noticed for myself of how to use this braces, while reading this book - would recommend:

Sorry for formating issues, reddit treats spaces and new lines in special way..


variable substitution:
substitution:

Bash supports various variables substitutions:

$a - will be substituted with 'a' value

${a} - same as $a but could be concatenated w/ string w/o spaces:

${a}.txt - will be expanded in a_value.txt

${11} - 11th positional parameter given to script from shell

${var:-word} - if 'variable' is set, the result will be its value

if 'variable' is unset - the result will be 'word'

$(var:=word} - if variable is set results in its value substituted

if variable is unset, it will be assigned to 'word'

such assignment will not work for positinal params(see 'shift')

and other special variables

${var:?word} - if variable is unset error with reason 'word' will be

generated, exit code of such construct will be 1

${var:+word} - if 'variable' is set, the result will be 'word',

(but variable's value will not be changed)

otherwise result will be EMPTY string

Example:

$ echo ${variable:-ls} - variable unset - ls used

&gt; ls

$ export variable=1

$ echo ${variable:-ls} - variable is set- its value used

&gt; 1

$ echo ${variable:+ls} - variable is set - ls used

&gt; ls

$ echo ${variable1:+ls} - variable unset - empty line used

&gt;

${!prefix} or ${!prefix@} - returns NAMES of existing variables

that starts from 'prefix.

Example:

$ echo ${!BASH
}

&gt; BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS

string variables substitution:

${#var} - returns length of string in variable's value

Example:

$ var=123456789 #this could be interpreted as a string too now

&gt; 9 #string length is 9

${#} or $# or ${#@} or ${#} - returns number of positional parameters

of the script being executed

${var:number} - return string from number to the end, spaces trimmed

variable is unchanged.

Example:

$ var="This string is to long."

$ echo ${var:5} #returns string from 5th symbol

&gt; string is to long.

Example: spaces are trimmed:

$ echo ${var:5} | wc -c #count chars

$ 19

$ echo ${var:4} | wc -c #return starts from space

$ 19 #space is trimmed so same number of chars

${var: -number} - return string from end to number, spaces trimmed

NOTE - space between ':' and '-' signs

Example:

$ echo ${var: -5}

&gt; long.

${var:number:length} - return string from number till end of lenth

Example:

$ echo ${var:5:6}

&gt; string


${var: -number: -length} - return string number between number(from the

end) and length (also from the end)

NOTE: number must be &gt; than length

Example:

$ echo ${var: -18: -2} #var is This string is to long.

&gt; string is to lon

${@} - return all values of positional params

leaving spaces inside strings (like "$@" ) - bcs it know how

many arguments script has

${
} is the same form, it seems

${@:num} - displays values of positional params but from num

$(@:1) - works same as ${@}

${@: -2} works , but starts from the end

${@:num:length} - same as with strings but with positional params

${@: -num: -length} - same as with strings but with positional params

${param#pattern} - finds shortest match and deletes it (lazy match)

Example:

foo="file.txt.gz"

${foo#.}

&gt;txt.gz

${param##pattern} - finds longest match and deletes it (greedy match)

Example

${foo##
.}

&gt;.gz

${param%pattern} - same as # but deletes from the end of the file

Example:

foo=file.txt.gz

${foo%.} - note . instead of . in # example

&gt;file.txt

${param%%pattern} - same as ##

${foo%%.
}

&gt;file

Search and replace:

${param/pattern/string} - replaces first occurance of pattern with string

${param//pattern/string} - replaces all occurances of pattern with string

${param/#pattern/string} - replaces only if at the beginning of the line

${param/%pattern/string} - replacesonly if at the end of the line

u/sbsmith · 12 pointsr/gamedev

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:

  1. If you're already familiar with C++, I would highly recommend reading Effective C++ by Scott Meyers (http://www.amazon.ca/Effective-Specific-Improve-Programs-Designs/dp/0321334876). Every C++ developer should read this.

    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.

  2. I worked with Unity only briefly to prototype a game, so I can't really comment here.

  3. This is tricky. I think you will need to find a passion project in C++ so that you will just naturally learn more about the language. And speaking of passion: you need to really want the job you are applying for. I have seen qualified developers miss out on jobs because you could tell they were just looking for anything (rather than really being enthusiastic about the position).

    I hope that helps.
u/knucles668 · 1 pointr/networking

/r/learnprogramming has a lot of great articles pinned. Python is a easy language to learn to start off. But if you want to hit the ground running, either learn web development languages or C++. From what I know though, when people refer to IT, they are referring those working in Networking or Help desk. With Networking, you learn a lot about computer/router hardware in the beginning, and then move onto learning protocols and best practices. Granted that second part is massively understating what there is out there to learn. But the sky is the limit when it comes that field. Help desk is the entry level for IT personnel. You help people over the phone or in-person with their computer related problems. Lots of networking guys don't like this because you loose whatever faith in humanity you have left, some like myself, really enjoy it. I like helping people either in a jam, or just generally better understand how to do their job with the aid of technology.

Sorry for the length.

TL;DR

Grab a A+ certification and then try for a Help Desk position. Here is a good book to get your education started, [Comptia A+ from Amazon].(http://www.amazon.com/CompTIA-Certification-Edition-220-801-220-802/dp/007179512X/ref=sr_1_1?ie=UTF8&amp;amp;qid=1382805315&amp;amp;sr=8-1&amp;amp;keywords=comptia+a%2B+certification+all-in-one+exam+guide+eighth+edition+exams+220-801+%26+220-802)

u/Azhain · 7 pointsr/roguelikedev

People talk about prototyping games a lot. Like, you have an idea so you build out a simple example so you can play it and see if it's fun on a basic level.

But what they don't really talk about, is prototyping code. It's hard to figure out how things fit together in a meaningful way if you don't already know the coding conventions or patterns that can help you build them.

As a self taught programmer whose work includes a good deal of coding now, I've gotten a lot of use out of building out small 'hello world' type examples of more complicated code structures.

Imagine you're trying to build a skyscraper, you wouldn't just try and build it straight out of your head, you'd follow a kind of miniaturized version of it, a blueprint. So that's what you should do as a programmer, make blueprints. Don't just make blueprints for your whole game, make blueprints for even the smallest sections of it if you don't feel like you completely understand it.

My wife is a senior-level project manager for a really large construction firm and her projects typically cost somewhere in the range of $500 million. When she's on the job-site supervising a part of the build, she doesn't refer to the blueprint for the whole project, she uses the blueprint for that specific part of the job. So if you're having trouble figuring out how to properly break a python game out into modules, don't look at coding examples of full games because you'll just find it overwhelming. Look for simple examples of python imports and module structure. But more importantly, build small examples of how that works using those examples to make sure it works how you're expecting.

Think of the game you want to make, and form some basic ideas about how it should fit together. Read up on programming patterns, game engine architecture, or artificial intelligence for games and whatever other topics interest you about game design. Make small code projects prototyping concepts that are interesting. I have a project folder on my computer that is filled with small examples of programming patterns, complicated data structures, skeletal game structures, and anything else that can serve as a blueprint for building something else.

So if you're reading and come across Entity Component Systems (ECS), and you think that theoretically sounds like a good way to build your game, don't start by trying to build a game using ECS. Build a prototype of an ECS pattern. Something really simple and instructive of how you would do it for a larger project, a blueprint.

For example, this is the actual code I wrote when I was prototyping one of my favorite patterns, the Service Locator.

class Service:
_audio = None
_graphics = None

@staticmethod
def playermoved():
if Service._audio:
Service._audio.play_footsteps()
if Service._graphics:
Service._graphics.animate_player()

class Audio:
def play_footsteps(self):
print("Pitter Patter")

class Graphics:
def animate_player(self):
print("Look at the player move")

audio_system = Audio()
graphics_system = Graphics()

Service._audio = audio_system
Service._graphics = graphics_system

Service.playermoved()

And if you read the description, you'll see that this example doesn't really fully articulate the pattern as described. But that's okay, because the point of the code blueprint is to experiment with implementing concepts in a way that works for you.

u/TurkishSquirrel · 3 pointsr/learnprogramming

It depends a bit on what areas you're interested in. For interactive graphics you'll likely do OpenGL or DirectX or such.
Non real-time graphics usually means ray tracing or some variant like photon mapping where you want to produce physically correct images, with flexibility depending on your art direction e.g. Big Hero 6. With ray tracing you're essentially simulating how light interacts in the scene.

Here's some useful books/links for real time graphics:

  • Real-Time Rendering this is a great book covering a lot of theory/math topics behind real time graphics techniques, so it's agnostic to whatever rendering API you use. The book's website lists more graphics related resources and is quite good.
  • OpenGL Superbible good book focusing on OpenGL, written for beginners with the API.
  • open.gl very good introductory tutorials for OpenGL, I just wish it covered some more content. Should give you a solid start though.

    Here's some for ray tracing:

  • Physically Based Rendering this is basically the book for ray tracing, the 3rd edition should be coming out this spring though so if you want to save some money you could wait a bit. There's also a website for this book.

    For general math topics I also recently picked up Mathematics for 3D Game Programming and Computer Graphics which looks very good, though I haven't gone through it as thoroughly.

    As mentioned already /r/GraphicsProgramming is a good subreddit, there's also /r/opengl for OpenGL questions.
u/I_Generally_Lurk · 3 pointsr/raspberry_pi

First of all I should say that I'm no expert in these things, but I'm sure other people will be able to make other suggestions.

&gt;I plan on installing Linux as my OS (technically my first time)

If you're more used to Windows then the UI will be fairly easy to get used to, but the biggest change will be the command line. This is a really powerful but complex tool and I think the best way to get used to it is really just to dive in and use it as often as possible. MagPi have a book for it (Conquer the Command Line) to get you started, but if you wanted something more comprehensive I've spent some time reading The Linux Command Line and found it really helpful.

For Python I think I started out with Code Academy, but mostly picked it up as I went along. I'm currently reading Python Crash Course and I think it is pretty decent, although most people seem to recommend Learn Python the Hard Way (note the tiny link near the bottom of the page to read the book for free).

At the end of the day the most important thing is to take baby steps and take them often: when you've kept at it regularly for a few weeks it becomes a lot more easy.

u/supra621 · 1 pointr/django

For HTML/CSS/JavaScript/jQuery, Jon Duckett's books are pretty good. I linked the set because individually they're about $23, and together it's $28. His is the only JavaScript book in my library. I found his books to be well-ordered, and he describes things in really simple ways, though the book layout feels like reading House of Leaves until you get used to it. Both books have made for great references, though free HTML/CSS tutorials are quite abundant, and I leaned on Google more than the book for learning those.

I can't recommend the Django book that I started with, "Mastering Django: Core" by Nigel George, as much of the advanced topics were no better explained than the official documentation. If you're using Django 2.0, forget it. This, and other Django books I've looked at, don't go into any front-end details, seemingly from a belief that "writing Python code and designing HTML are two different disciplines" (quoted straight from the book I linked). The official docs and web tutorials have served me better for bringing Django to the browser.

Aside from d3.js, I'm only using basic JS and jQuery. d3.js was a very specific use-case for the data I'm working with, as it excels at making graphs and charts using SVG. If that sounds like something you're doing, Interactive Data Visualization for the Web was pretty clear for d3.js. Note that d3.js only uses a minimal amount of traditional JavaScript, so do consider your project needs before dropping $40 on it.

The basics of JS and jQuery will go a long way, even without react/angular/vue.js. Just like my first statement about HTML/CSS, I'd say learn the other frameworks when you can no longer do what you want with JS/jQuery, or when a framework is going to save you time.

Sorry for the wall of text - hope that helps!

u/jago81 · 1 pointr/techsupport

For A+, try Professor Messer's site. His videos are an amazing resource. I do a chapter in book study then watch the corresponding video on Messer's site. Works pretty well.

Also try Coursera, they have a lot of classes you can take for FREE from major universities. I am currently waiting on a networking class that starts June 24th. It's a high level class that offers a good amount of knowledge. No degree, but the knowledge is what you will need during interviews. And like u/esmith3498 said, F.R.E.E.!

Professor Messer - This is for 800 exams for a+, he also has training for net + and linux and the like.

Coursera - Use it!

A+ book - I love this book, very thorough.

GOOD LUCK!!! I am in the same boat as you. I am currently trying to get into the field too.

u/ShadowWebDeveloper · 3 pointsr/ExperiencedDevs

Yes, working at a big N now after several years of working for startups. You'll need to study up on how to do successful coding interviews (which at large companies are very different than the startup interviews you've probably experienced). Cracking the Coding Interview is a good start. Leetcode is also good practice but make sure you do some whiteboard practice as well since you won't have the advantage of a compiler when doing the actual interviews. If, like me, you didn't have a formal CS background, consider watching the MIT 6.006 Introduction to Algorithms videos and possibly doing the exercises before any of that. They were really helpful when textbooks like the oft-recommended The Algorithm Design Manual came across as super-heavy (but still useful as a reference).

Good luck!

^(Disclaimer: Opinions are my own, not necessarily my employer's.)

u/jmiqui · 3 pointsr/ccna

Thanks for the feedback.

On my first pass to the CCNA Exam, I used the following approach:

  1. Attend to the Todd's CCNA 200-120 class in Dallas.
  2. Read his book provided in the class. See URL below.

    http://www.amazon.com/CCNA-Routing-Switching-Study-Guide/dp/1118749618/ref=cm_cr_arp_d_product_top?ie=UTF8

  3. Completed the 14 videos training modules available on lammle.com as prerequisite to attend to the live class in Dallas.

    Note: If you buy the book then you get free access to the first 7 video training modules. You can buy a subscription on the web site to get access to the other 7 modules. Or you get it for free when you register to the live or online class.

  4. In the class every day, we had the opportunity to get the lecture from Todd, hands on labs, written exercises and online sample tests.

    The three big lessons learned from the class were:

  5. Every question is a subnet question. As a result, we must learn to subnet any class in less than 10 seconds.
  6. The block size is your friend.
  7. Cisco likes to use words that look the same and have opposite meaning. As a result, one must read the questions and select answer with accuracy.

    I failed the first time that I took the test. I ran out of time with 5 questions not answered. I invested a lot of time on the sim's and test-lets. I was lost in the test platform with many windows opened learning to navigate to the proper pannel to answer the questions.

    On my second pass to the CCNA Exam, I used the following approach:

  8. Todd invited me to attend to the next CCNA class using the Webx online option. I accepted the invitation.

  9. Complete all the exercises.

  10. Invest a lot of time doing the online sample test from lammlee.com.

  11. Repeat step 3 and master every question asked until I got 100% every time that I took a sample test.

  12. Master the top 5 Sim's provided in the class for OSPF, EIGRP, NAT, ACL, etc.

  13. Pay attention to all the tips provided by Todd when doing the Sims.

    I took the test and got a perfect score. I also had 25 minutes left on the clock.

    Summary:
    One needs to use the right tools, resources and approach to study very hard. The number one key is to focus on the test objectives and practice doing many sample tests.

    This approach helped me pass the CCNA 200-120 test. Anything else is just busy work and nice to know for the real world application and not to pass the test.

    Please note that each person learns in a different way or may have special networking skills and may not need to use the same approach.

    I hope this information is of value to help you get the CCNA certification.

    May you all have an awesome future in the Data Networking industry.

    JM
u/jbabrams2 · 37 pointsr/UXDesign

Sure!

&amp;#x200B;

I think two classic books to start with is

  1. Design of Everyday Things (https://www.amazon.com/Design-Everyday-Things-Revised-Expanded-ebook/dp/B00E257T6C/) and
  2. Don't Make Me Think (https://www.amazon.com/Dont-Make-Think-Revisited-Usability-ebook/dp/B00HJUBRPG).

    &amp;#x200B;

    Then I would move onto IDEO's Creative Confidence (https://www.amazon.com/Creative-Confidence-Unleashing-Potential-Within-ebook/dp/B00CGI3DWQ), which documents tons of different UX methods. Also, I haven't read it, but I've heard that Lean UX is a great book (https://www.amazon.com/Lean-UX-Designing-Great-Products-ebook/dp/B01LYGQ6CH).

    &amp;#x200B;

    Oh and to learn HTML, CSS, and JS (if you don't know them already), these are AMAZING reads: https://www.amazon.com/Web-Design-HTML-JavaScript-jQuery/dp/1118907442/ref=sr_1_3?crid=1QXNLBZ2V6GL8&amp;keywords=learn+html+css+javascript&amp;qid=1558328362&amp;s=gateway&amp;sprefix=learn+html+css+ja%2Caps%2C-1&amp;sr=8-3

    &amp;#x200B;

    With that said, I know books are a big commitment so here's a random assortment of UX articles I've bookmarked over the years to get you started (some may be a little old but should still hold up from a process standpoint):

  3. https://uxplanet.org/user-experience-design-process-d91df1a45916
  4. https://uxplanet.org/ux-is-process-actionable-user-insight-9c17107887bd
  5. https://uxplanet.org/ux-is-process-designing-from-a-creative-brief-62f8588cb6f2
  6. https://www.interaction-design.org/literature/article/task-analysis-a-ux-designer-s-best-friend
  7. https://uxmastery.com/how-to-write-screeners-for-better-ux-research-results/
  8. https://library.gv.com/get-better-data-from-user-studies-16-interviewing-tips-328d305c3e37?gi=82762a521a6
  9. https://www.nngroup.com/articles/diary-studies/
  10. https://uxdesign.cc/6-storytelling-principles-to-improve-your-ux-737f0fc34261
  11. https://www.usertesting.com/blog/storytelling-in-ux/
  12. https://www.nngroup.com/articles/interviewing-users/
  13. https://medium.com/user-research/never-ask-what-they-want-3-better-questions-to-ask-in-user-interviews-aeddd2a2101e
  14. https://www.smashingmagazine.com/2010/01/better-user-experience-using-storytelling-part-one/
  15. https://www.bitovi.com/blog/10-best-practices-usability-testing-within-agile-teams
  16. https://www.nngroup.com/articles/microsoft-desirability-toolkit/
  17. https://www.nngroup.com/articles/desirability-reaction-words/
  18. https://lean-product-design.18f.gov/3-identify-assumptions/
  19. https://lean-product-design.18f.gov/index.html
  20. https://www.justinmind.com/blog/interaction-design-frameworks-do-you-need-one/
  21. https://medium.com/ruxers/building-block-design-a-modular-design-strategy-for-uxers-927f63eec90c

    &amp;#x200B;

    There's a lot more where that came from, so let me know if you get through that and are craving more material.

    &amp;#x200B;

    Here are a couple videos as well:

  22. https://vimeo.com/7099570?utm_source=gdev-yt&amp;utm_medium=video&amp;utm_term=&amp;utm_content=conductingresearch&amp;utm_campaign=firstthingsfirst
  23. This is a youtuber I follow who can teach you everything you need to know to get started in the design space (though she heavily focuses on digital design): https://www.youtube.com/user/charlimarieTV

    &amp;#x200B;

    Finally, here's a very very short article I wrote myself that provides a quick intro into human centered design: http://www.jdktech.com/human-centered-design/

    &amp;#x200B;

    As you dive into this, note that user interface design and user experience design are different things--although they overlap and rely on each other in various ways. You can be a user interface designer (in which case I would recommend different reads), a user experience designer, or both. I'm a full stack designer, which means I specialize in all sides of the product life cycle, including research, validation, design, product management and development.

    &amp;#x200B;

    Hope this helps! Let me know if you have any other questions!
u/OSUTechie · 26 pointsr/ITCareerQuestions

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:

u/OvertechB · 2 pointsr/Unity2D

A lot of the balancing comes from play testing with actual players and a basic understanding of probability math.

Randomness in games can often be a fun addition because it leads to surprises and can make a boring game more interesting. But you also want to use with caution because you want your players to still feel like they are in control. Too much RNG can make people feel that the game is unfair.

Pre-built maps are good if you want people to be able to master them, and generated maps are good if you want people to think on their feet every time. Pre-built can make things predictable, whereas generated can add replayability.

As for symmetrical maps, do you mean both players start with an even playing field? If so, that's ideal for balance. If you do intend to give one player a map advantage, you'd have to properly balance the other player to have some other advantage. Imagine playing golf. The player at a disadvantage might be granted a handicap. The important thing is that both players must feel like they are treated fairly.

Edit: If you're really interested, I'd recommend The Art of Game Design by Jesse Schell. There's 2 excellent chapters in there about game balance that details probability math, good design, and player psychology when dealing with balancing.

u/LuminousP · 6 pointsr/gaming

I kind of sounds like you're whining.

go to /r/gamedev

If you know how to program effectively and you want to do something solo. Learn how to Art. If you know how to Art, learn better programming skills.

here's some of my favorite book recommendations

Programming:

Game Coding Complete

The fucking bible as far as books on game development goes. Made by one of the senior developers on the Ultima series. Seriously. Good book.


Game Engine Architecture

Also a really good book, teaches you more about usability beyond yourself if you ever find time or reason to expand your team.

Art:

Drawing on the Right side of the brain This is a very good text for getting you out of your comfort zone and into the mindset you need to have to do good art. This book won't teach you how to make good art, practice will, but its a good first step.

I'd also start looking around, take a look at Blender, we have a great community at /r/Blender and start learning how to do modelling, theres some great tutorials on the gamedev subreddit, as well as a number of classes on Programming and one on Game Concept art at University of Reddit.

Now get up off your ass and start building a game. Pixel. By. Pixel.

and if you have any questions, shoot me a pm, I'd be glad to help!

u/sirfitchalot · 3 pointsr/sysadmin

Since you've dipped your toes in the M$ stream, I would suggest working towards the 2012 MCSA. It's 3 exams and is the go to 'asked for' cert on sys admin jobs. Each exam is $150 and it will require you to lab on your own, among other things.

You mentioned Linux...the CompTIA Linux+ is comprised of two exams but you end up getting 4 or 5 certs altogether (but only 2 [L+ and LPIC-1] are worth a shit). If you've never worked with *nix before this one will be a challenge. Interesting fact: this cert never expires.

And then...the easiest of the beginner certs--CompTIA's Security+. This is also a standard for many junior security positions and is required for many federal government contracting gigs. Just buy Darril Gibson's book and watch Professor Messer's videos and you'll be good to go. This is only one exam.

The CCENT is the entry-level Cisco networking exam. I recommend Todd Lamle's book for that. Some might suggest getting CompTIA's Network+ first but I would recommend going straight for the CCENT, then CCNA if you like the material and want to get deeper into networking.

For all of these...yes, you will have to study. The MCSA 2012 will take the longest and the Security+ should be the shortest. Use your downtime wisely.

Edit: unless you're in a dire financial situation, certs are by far the easiest and most economical form of resume boosting...invest in yourself.

u/Letmefixthatforyouyo · 3 pointsr/sysadmin

I wouldnt look down on you for it, but I would expect you to sell me. I've never personally used Blackboard so Im not sure where the skillsets overlap. You should be sure, and you should be able to talk about how that helps you transition. Write and practice your pitch.

The most important thing for a junior position is passion for the field. No expects you to be talk about POSIX and why you would use egrep over grep. They just want to see someone that is hungry and wants to learn.

Also, go buy the The linux command line. Its the best intro Linux manual I've ever read, and its intended for people with zero Linux experience to get up to speed. Its the second best value you will get for money spent on a book. The first best is Interviews for dummies. Im not joking when I say that I payed $1 for it at a used book store and its made me at least 15k dollars back. If you sit down and really learn both of these, you will be able to transition to a jr linxu admin role.

u/Pogotross · 3 pointsr/gamegrumps

I think Arin likes The Art of Game Design: A Book of Lenses, Second Edition and either he or Jon liked Game Feel: A Game Designer's Guide to Virtual Sensation.

Personally my favorite game design resource is either Mark Rosewater's design articles or his podcast. I prefer his podcast but both covers most of the same information. MaRo is the lead designer for Magic: The Gathering so a lot of the articles are about MtG specifically or about tabletop games but nearly all the general design podcasts are worthwhile. Most importantly, he has around twenty years of successful (and unsuccessful) design under his belt, so he isn't just talking in vague generalities or theories. He has examples backing up pretty much everything he talks about including, and maybe most importantly, times he thought he was doing the right then and messed up. I think anyone interested in game design should listen to the "Ten Things Every Game Needs" and "20 Lessons" series. You can hear his GDC version of the 20 Lessons here.

*: But the absolute best thing you can read on game design is a gamemaker tutorial. Theory is useless without execution.

u/spilled_water · 6 pointsr/C_Programming

You would love C Programming: A Modern Approach.

The book gets into some pretty advanced stuff. From MAKE files, to programming idioms, to how to organize your code.

It's a really dense book, but super well organized, super clear for almost all topics (only two or three topics I needed to google), and most importantly very thorough.

I was reading the book to refreshen my C. Out of curiosity, I looked up common or important interview questions on embedded C, and pretty much the book nailed it down.

u/Lhopital_rules · 2 pointsr/IWantToLearn

Only about half of the programming industry has a degree directly related to IT or programming. Most have college degrees in something, but in the end the most valuable thing to someone hiring in IT is skills. Once you have the skills, you just need to get noticed.

I would recommend you learn Linux administration and web development. (Or you could learn Windows too - I don't know Windows well so I can't comment on it. Linux and Mac OS X are somewhat more popular in the programming world, but if you're looking to get into IT, not programming, then Windows administration might be more common.)

A good book to learn Linux is "The Linux Command Line".

https://www.amazon.com/Linux-Command-Line-Complete-Introduction/dp/1593273894/

For learning web development, you could read "
Learning PHP, MySQL &amp; JavaScript: With jQuery, CSS &amp; HTML5"

https://www.amazon.com/Learning-PHP-MySQL-JavaScript-jQuery/dp/1491978910/

Codecademy would also really help you in here:

https://www.codecademy.com/

If you have any questions, feel free to PM me and I'll do my best to respond.

u/-jp- · 2 pointsr/computerscience

In my experience, languages are pretty easy to pick up once you know one. I think you'd be better off sticking with Java and exploring concepts, algorithms, data structures and certain frameworks.

When I was starting I got a lot out of the GoF Book. It's a C++ book but they don't really use any C++ features that are hard to translate to Java. I've heard good things about Head First Design Patterns too but haven't read it.

As far as Java goes Spring and Hibernate are two great libraries to be familiar with, since you'll encounter them in the wild pretty regularly.

If I were to suggest something you might not have learned, consider installing VirtualBox and using it to run Ubuntu. Familiarity with Linux will give you a big leg up and Ubuntu is a pretty good way to ease into it. Plus it has packages for a ton of different programming languages so you can experiment with any that catch your fancy.

u/ZioYuri78 · 4 pointsr/unrealengine

I have the first edition and yes, it worth a read, keep in mind that it explain how game engines works and not how to make a game engine.

After reading it you will not be a master with UE4 but you will undertstand why UE4 do things in a certain way.

Another book you have to read (and is mentioned in your link) is the Game Programming Patterns book, i have the physical copy and it is awesome, read it after the GoF Design Patterns book, is a masterpiece combo.

EDIT:

Also two sites i want to suggest:

Learning Modern 3D Graphics Programming, is a great tutorial about OpenGL basics.

The Book of Shaders, great to learn how shaders works.

u/haxifix · 2 pointsr/learnprogramming

I completely agree with your observation that programming is more of a way of thinking than it is about knowing the syntax of a specific language. Yes, we may all have our preference or most used language, however; any programmer is going to have multiple languages that they know and it also is usually not difficult to pick up a new language once you're a programmer for that exact reason.

That aside, a quick google search brought this book up. I do not have this book nor have I read it, but it seems like a decent book for $15. Remember, there is no substitute for solving problems on your own though. The book may give you insight and hints and may give you a list of challenges with solutions, but you can also improve your problem solving skills by just googling "beginner programming challenges" and attempting to solve some of them.

Hope this post helped you, if you have any more questions feel free to ask or PM me :)

Best Regards,

Kevin

u/lifechanger88 · 1 pointr/depression

I hear ya man. I guess I'll vent with ya sorry for the long post.

I'm in the same boat 25 and don't know where to fully go career wise with a shitty job. I work in a call center scheduling boiler inspections, while dispatching for inspectors who also do an insane amount of driving at ridiculous times. But god damn 130 miles fuck that, and I thought my 40-45 min commute was bad! My hat is off to you guys for putting up with that amount of driving.

So after graduating college with a BA degree telecommunications thinking that I would get a job in that field such as network engineer/technician, line installer, PBX tech doing MACs (term for moves, adds and changes when programming telephones and other equipment) within the first 6 months of graduation. Yep that was a naive rookie mistake to when I found out all about CCNA certifications and all that other shit where you have to spend around $120 to take an exam after studying this book or you could spend another $3000 for that education. I wasn't ready for that after graduating in 2013. I was exhausted learning after 5 years of college (it was a 4 year program but I took it easy my sophomore year in college trying to figure what I wanted to do along with what would most likely get me a job that I could live off of while working part time).

All I can say is this after 2 years from graduating find what you can to get by, if you can't tolerate that job anymore find something else. It's really fucking hard I know I've been trying to get out of this call center position for nearly 7 months now. Before that call center position I was delivering pizzas for 8 months. Then when you can find a position that you can live off of and tolerate for a while then pursue that in your free time what you need to do for the career you want. Lately I've been getting into the crazy wonderful world of coding and web development. It's hard of course which means it's worth something, but I learn most of the material for free. If I told my 20 year old self that he would've said "Yea right grizzly adams had a beard." (feel free to end the joke). However, I haven't been learning that much code since I can't take this call center position anymore so I'm focusing on finding a new job away from this shitty boring area I'm in (King of Prussia, PA area it's boring suburbia). When I find a new position that I can tolerate where I'm not on the phone all day, then I'll pursue and develop skills on being a web developer and build a portfolio of a couple websites showing exquisite HTML, CSS, JavaScript, PHP, Python and jQuery skills then I'll start applying to web developer jobs.

So build my friend, it takes time but build there is still time.

Even though I wish colleges could help us out more career networking wise they just throw us out on the fucking street and ask oh do you want football season tickets? Then I say sure how about you get me a job you pricks and I may be entitled but when I pay $86,000 I expect results. I remember going to a college savings plan meeting and hearing the presenter saying "Colleges are first and foremost a business". Yea well I'm the customer, I went to college to get a career in telecommunications not to deliver pizzas and work in a call center.



u/[deleted] · 4 pointsr/gamedev

If your goal is to practice code and just have fun, slinging low level game logic is really satisfying. (obviously if your goal was to actually make a game, or to make an actual usable/popular engine, you'd want to heed all the usual warnings)

Have you made a game at all before? I think a big part of making an engine is knowing a lot about what NOT to do. Especially early on (e.g. the first few YEARS of gamedev) there's a lot of learning the hard way. Make the core gameplay for some game, get frustrated because it's becoming a pile of spaghetti code, have a moment of enlightenment about better design, then start over from scratch. You'd probably be able to follow a "build your own game engine" book, but the lessons and reasons wouldn't really sink in without that personal experience.

Probably because of the above, many successful game engines simply start as a regular game. Good code gets reused, bad code gets refactored to make a second game. Repeat this often enough and you have sturdy, proven code that's evolved into an engine. Instead of trying to plan for infinite possibilities in the future, create what's actually needed for the next game (while attempting to not break the previous games). This has been working well for me so far.

But, feel free to jump directly into engine-making if it sounds awesome to you. It's still on my to-read list, but this book has pretty good reviews and might be up your alley.

u/PWill21 · 1 pointr/ITCareerQuestions

Professor Messer for the best free online resource and videos.

Mike Meyers' Exam Guide for the best print resource. It's a book. Whatever price you decide to pay for it, or not, is up to you.

Of course there are other options and resources, but these were great for me. And there could be something else out there that works better for you. Either way, hope this helps and good luck!

u/Danwarr · 2 pointsr/BoardgameDesign

Ok, but why should somebody work with you if you've barely done any work on your own idea? Like /u/Bastiaan-Squared mentioned, most people are more excited to work on their own ideas, which they are constantly prototyping, refining, reworking etc, than to help you sit down and decide what mechanisms might work well in whatever setting you think is cool. You're better off spending your own time hammering out some potential mechanisms you might find interesting then approaching somebody and refining what you've done.


Here are a couple books that might help you out:

u/rylandgold · 6 pointsr/programming

/u/rampion already made a great recommendation of Charles Petzold's Code that I highly recommend. Another great one is Tao Te Programming which is barely a book (in terms of length), but is available for free online.

I also really loved Game Engine Architecture but obviously that's pretty niche. I have more and will do my best to add them later

u/csp256 · 2 pointsr/cscareerquestions

You need to learn architecture. For this do NAND2Tetris and get some used architecture textbooks from the computer engineering department.

Caches are a big deal. People forget they exist, but you're going to need that knowledge in embedded. DMA's, or even normal memory reads, might only be coherant with some cache levels. That sentence should make you gag.

It gets worse when you start to think about concurrency; which you should, frequently, because it isn't the 90s anymore.

Get used to debugging. A lot. Learn practices that make that easier. I mean both learning archaic shit like ddd and writing unit tests, following best practices, etc. In embedded you're going to be violating best practices often, but it is important that this teaches you "... so the rest of my code is as clean as possible" than "... what's one more sin next to so many?".

Most architectures are the same nowadays but the GPU is a notable exception (though less and less each generation). Learn CUDA - use Udacity's course on the subject.

What every programmer should know about memory.

Start writing projects in C++. Go ahead and become a real C++ nerd. constexpr everything you can. You don't need other languages except maybe barebones Python, Bash, and the Turing complete language known as the Preprocessor. You'll learn ~what you really need to know of C from C++.

Get very familiar with 'Godbolt'.

Write for maximal performance. This is a dying art. You'll have a competitive advantage if you're good at it. If you don't become filled with rage by the word "premature" you're not optimizing enough.

Profile your damn code!

Profile your damn code, but with a different link this time!

Know your latency numbers.

Make SIMD a part of your daily life. You might not always have vectorization, but this is the easiest way to show you're capable of exploiting hardware features.

Computer graphics people are relatively well-respected by the embedded software community, and there is a lot of overlap as they use similar skills. Taking a detour through graphics is a good idea even if you don't plan to work in graphics. It's fun, too!

One way or the other you have to find a relevant application domain and solve problems in it... if not graphics try: video game programming, GPGPU, robotics, control systems, computer vision, animation, networking, VR/AR, and a bunch more.

Do not put VHDL or Verilog on your resume without first being sure you're masochistic enough.

Learn to start being very choosy in what advice you listen to. Most people solve problems under a totally different set of constraints, and what they'll preach until the sun burns out might be pants-on-head stupid for you.

You might already have picked up some of those funny ideas from being a web dev, so be on the watch for that.

The book Game Engine Architecture has a lot of real world wisdom from a much more relevant view, so read it.

Also, most people are taught in a way that is not really beneficial to an aspiring embedded SWE (e.g. Java schools). Most people have to learn that type of stuff as they mature as a programmer... hence the requirements. You can be hired into these types of positions right out of university, but you have to show a knack or focused interest in it.

And to be frank, it is just plain harder than web dev or slapping CRUD apps together, so fewer fresh grads would be able to do the work well even if they followed the 'right' path in university.

You can get some experience by writing on an embedded platform, but unless you want to probably shouldn't. The principles I am describing are more important.

Do one or two solid projects. Not dozens. Not perfect. Not amazing. Just one or two simple-but-pretty-good things in your portfolio, that show that you are not just a web dev or Java School Student.

Get relevant work experience as early as possible. Relevant means same skills, not same application domain.

Remember, it being hard isn't a bad thing. It is a barrier to entry that once you cross becomes a competitive advantage. The harder it is, the greater the advantage. Always double down on the hard technical skills.

u/Serious_Casual · 3 pointsr/gamedev

Writing an engine isn't a trivial task. I don't mean to put you down or make you feel bad but it kind of sounds like you don't totally understand what a game engine does.

If you do want to write an engine, I would suggest starting with the renderer and expanding your understanding from there. The features of your engine depend upon what kind of game features you want to support. Particles? Visual effects? 3D sounds? Dynamic Resource management? and all of that behind the gameplay code.

Just get a square to show up on the screen. While you're working on that, check out a few books on game engine programming. There are a ton on amazon. This one is really good:

http://www.amazon.com/Engine-Architecture-Second-Jason-Gregory/dp/1466560010/ref=sr_1_1?ie=UTF8&amp;amp;qid=1453134607&amp;amp;sr=8-1&amp;amp;keywords=game+engine+architecture

If you need some more help getting started let me know! Engine programming is fun and rewarding but building one from scratch can be a monumental task.

u/guifroes · 2 pointsr/learnprogramming

Interesting!

Looks to me that you can "feel" what good code looks like but you're not able to rationalise it enough for you to write it on your own.

Couple of suggestions:

When you see elegant code, ask yourself: why is it elegant? Is it because is simple? Easy to understand? Try to recognise the desired attributes so you can try to reproduce on your code.

Try to write really short classes/methods that have only one responsibility. For more about this, search for Single Responsibility Principle.

How familiar are you with unit testing and TDD? It should help you a lot to write better designed code.

Some other resources:

u/nutrecht · 3 pointsr/java

Although I admire the optimism for a lot of people here I feel they are not being very realistic. Like the mention of using sales experience to 'sell' yourself to employers: it's fine and dandy if you can bullshit your way into a job but if you can't actually deliver you'd be 'let go' within a month.

Learning a language is just one aspect. What's most important is doing actually a ton of programming. So make sure you have at least 3 moderately big projects with good code quality that follow best practices that you can show to employers.

Feel free to hop over onto /r/javahelp to have us review your code and suggest improvements. Being a developer isn't really about languages: it's about turning a customer's problem into a working solution. That's the hard part.

One last tip: for someone without any CS education but who is going into an area where OO skills are a must this book is a must read: http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented-ebook/dp/B000SEIBB8

Heck. Showing an employer that you read and understand it and apply it in your projects would give you a huge head up.

u/naevorc · 2 pointsr/gamedev

To get you acquainted with some of the basics, I recommend starting out with Codecademy's Python course.

Then perhaps move on to auditing this Intro to Computer Science 6.00 from MIT. It's completely free, has all the lectures as video, assignments and quizzes as PDFs.

Check out this playlist from a separate MIT course for the Recitations. Since this is also a 6.00 class the recitations are still relevant for you, and I recommend going over them as well once you've covered the appropriate material. (Or you could simply take that class)

Both codecademy and that class use Python 2.x, which is a bit different from today's 3.x, but honestly not so different that you can't learn from them (it seems basically the same to me except for a few expressions).

If you like books, I picked this one up after some research. Learning Python by Mat Lutz 5th ed. Pretty big textbook, about 1600 pages, but it's pretty clearly written and has a lot of exercises. It's also only $40 bucks so that's a plus.

A lot of people also recommend "Learn Python the Hard Way", but I haven't been using it.

u/JonnYellowSnow · 1 pointr/StopGaming

There are not enough research papers specifically on gaming addiction because gaming addiction together with social media and pornography falls under the umbrella of internet addiction - Like you said a rather new field. Some breakthroughs are being made in the last years to have it recognized as an addiction per se (at least in Europe) the problem with conducting enough research is that there are no funds and insurance companies have no wish having another area of responsibility to potentially give away money to people suffering from it. If gaming addiction become completely recognized by international bodies of medicine then insurance companies might have to pay preexisting clients for passed and current treatments ---&gt; something they definitely do not want to do.
Nonetheless here are some videos of legit men of science (not some random ex gamer) that research the field.

"Here is a short interview with Dr. David Greenfield talking about some of the mental and physical applications of gaming and internet addiction"


There are also longer talks on his channel like this one.
Dr. Greenfield has been researching Internet addiction since the 90's.


"Dr. Klaus Woelfling, from the University of Mainz. Germany is taking steps in treating Internet addiction and especially gaming addiction" - this one is a difficult watch primarily because the speaker is very uncharismatic (try watching with the speed setting on 1.5).

Last but definitely not least is "Your Brain on Porn"
Yes, yes I know, you might not want to hear that another of your favorite pastimes is bad for you, but this video covers on a very scientific basis the damages that watching excessive pornography causes to the brain, and no this is not some kind of NoFap cult propaganda, it speaks only on the subject of internet porn. Like I said before, porn together with gaming fall under the umbrella of internet addiction because the reaction we receive from these negative habits has the same structure. If you actually watch the Your Brain on Porn video you will hear him mention numerous times that the damages caused to dopamine receptors is similar to the ones cause from gaming and extensive internet use.

This is just some of the evidence done by men of medicine and science from the top of my head. If you want to go deeper I'd recommend The Shallows: What the Internet Is Doing to Our Brains By Nicholas Carr an American author and Pulitzer Prize winner (for that book), witch contains truly numerous examples of scientific studies and references you might want in the bibliography.


Also The Brain That Changes Itself by Norman Doidge M.D that talks mainly about brain plasticity and how different behaviors and habits cause the brain to form new cells , create new neural pathways etc etc . He also gives lots of examples how positive and negative behaviors causes various changes IN THE BRAIN, Internet addiction stuff included.

If you really want proof and not just searching for a reason to dismiss things you dont like the sound of then I hope this comment will serve you. If you do nothing less at least watch the first interview with Dr. David Greenfield. It is only 6 minutes long.

Hope this post that took me 50 minutes to put together and find all the links, will be of service to somebody.
Peace.

Edit: Grammar and formatting

u/SofaAssassin · 1 pointr/cscareerquestions

Thanks for the additional information - I didn't know what language OP would be working in, but I imagine it would be probably at least predominantly Java.

/u/amazon_newgrad - to add to my suggestions, if you want to get better at the ins-and-outs of Java, I would recommend the following books:

  • Effective Java - I'm not kidding when I say this book transformed the way I viewed (and write) Java. It's a little old today since it was written when Java 6 was new, so it doesn't cover anything like lambda expressions, type annotations, or the new java.util.stream package, but it covers a lot of good practices that are still relevant.

  • Java Concurrency in Practice - Again, a little old comparatively, but still very relevant. Covers a lot of the more modern concurrency mechanisms in Java 5 onward, from one of the designers of the java.util.concurrent package.

  • Java SE8 for the Really Impatient - I have not read this book (mostly picked up Java 8 stuff from online resources), but people praise it, and it's a rather short book. Cay Horstmann is a pretty accessible writer too, so if you want to learn about all the new Java 8 features, this seems to be one of the better books around.
u/samort7 · 257 pointsr/learnprogramming

Here's my list of the classics:

General Computing

u/Xand0r · 1 pointr/IndieDev

Glad my feedback was useful.

Thinking in terms of simplicity doesn't necessarily make for a better game. Fun should probably be more of a focus.

I definitely wouldn't say that I had "fun" or was hooked by your prototype. Creating fun in game design can often mean designing a good game loop. You game loop right now is 5 seconds long, consisting of "press a button for 4 seconds". Not very interesting or rewarding as it stands.

Here's a book I highly recommend:
https://www.amazon.com/Art-Game-Design-Lenses-Second/dp/1466598646/ref=sr_1_3?ie=UTF8&amp;amp;qid=1537819025&amp;amp;sr=8-3&amp;amp;keywords=game+design

It's all about game design, independent of coding or anything else.

u/malikmudit · 1 pointr/ccna

If you study for it seriously, it's very doable. I'd also suggest CBT nuggets (though it is a bit on the expensive side, but Jeremy Cioara is an excellent teacher). Also, I consulted Todd Lammle (http://www.amazon.com/CCNA-Routing-Switching-Study-Guide/dp/1118749618) book for my CCNA and I personally think it's the best book that I came across for the exam. You should consult a few books and see which one works best for you. I'd highly suggest GNS3 or packet trace for lab-experience at CCNA level. Good luck with your plans.

u/kangasking · 2 pointsr/programming

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?

u/Darkness12 · 4 pointsr/hardware

It may not be a source as simple as just a link, but I have been studying for the CompTIA A+ exam and they go over a lot of this stuff pretty well. If you get any of the textbooks or look up some of the online study guides, they will have a decent amount of information on these topics.

This is the textbook I have been reading recently. It has a ton of information about the different technologies and standards involved in each component, and can really make those specifications you see on your hardware make sense.

I have been really happy with my new-found ability to look up something complex, like a motherboard, and understand the advantages and disadvantages almost immediately.

Professor Messer also has a popular guide for the A+ in a pdf format, but I have not used it and cannot vouch for it being what you seek.

Good luck!

u/polycarpgyarados · 8 pointsr/ITCareerQuestions

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;amp;qid=1512041042&amp;amp;sr=8-1&amp;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;amp;qid=1512041042&amp;amp;sr=8-3&amp;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.

u/ketura · 1 pointr/gamedev

Since some other people are trying to be cute, start with this wikipedia page here: https://en.wikipedia.org/wiki/Software_design .

I don't know of any online tutorials for the process of game development, but I am aware of a book named Software Engineering for Game Developers which goes over the process, step-by-step, of designing, outlining, and implementing the software part of a game. Note that this is one of the most dry, boring books on games I have ever read, but it's not about game design, it's about game development, and outlining software requirements is not a topic many people get excited about.

Basically, they go through the process of creating a requirements document which is a glorified to-do list of everything that the game needs to do, dividing those specific requirements into "stripes" which are different levels of completeness of your game, and then from there deciding on the best way to chop up the concepts into objects. The book is a monster 1000 page beast, but if you're serious about needing a step-by-step process, you won't get better than this.

My suggestion (if you don't purchase or, ah, otherwise obtain a pdf of the book) would be to simply start with this glorified To-do list that lists every feature your program should have in version 1. Then write up all the subfeatures that those features will require. Then divide all these items into groups where it makes sense and make each group an object (or object hierarchy). Do some research and see what parts might already exist, such as rendering, graphing, input, GUI, or serialization libraries, and incorporate them into the design. If you don't know what, exactly, goes into a game, try looking up a book such as Game Engine Architecture which will outline all the different parts that a game engine needs.

Then write the program.

Note where your design was insufficient or flawed, and don't worry about keeping the list intact--add or remove items as needed. Wash, rinse, repeat: the more you practice this on new programs, the easier it will be as you gain experience with what needs to be written out and what can be ad-libbed. The more advanced tools (such as UML et al) will be useful later, when you have more complex projects with more moving parts, that need to be explained to other programmers.

Until then just stick with lists.

u/TwinfoxDev · 14 pointsr/gamedesign

There are quite a few good book on this topic, that I would recommend, like Jesse Schell's The Art of Game Design, or Justin Gary's Think like a Game Designer. These books describe the process way better than I ever could, but I'll try anyway.From my personal experience I always start from an idea (hey, wouldn't moving fortresses be awesome?), then I start to think about what exactly fascinates me about that idea. Then I try to capture the awsomeness in game mechanics. From there I create a list of what has to be done to test the mechanics, do that (plus some eye-candy because I'm a visual person) so I have something to test. When I have something to test, I try to analyze what doesn't work and fix that (not in code, but in paper). And start the process again.

So basically once I have an idea, it's this loop of creating/refining mechanics, implementing them, then testing and analyzing them. Then I go back to refining.

If you often suffer from scope creep, there are several methods to battle that. Like setting yourself a deadline, always cutting a mechanic when you add a new one, etc. Don't be afraid to throw something out (it's not lost you can use the idea/mechanic in another project). A game is way better when it knows what it wants to be and throws away everything that doesn't contribute to that core experience (I mean they could add RPG elements to Call Of Duty Campaigns, but they don't because that's not what the game is about).

Also if you don't like your code, that's 100% normal. when you look back at something you've made, you'll always be able to spot something that you would do differently now. That's because you've learned new things since you started . I'm programming for nearly a decade now, and when I look back at code that I've written a few months ago I'm always like "Eww, why would anyone write code like that?". So don't be afraid to make mistakes and don't continuously refactor code. Make something, learn from it and do it better next time.

I hope that helps!

&amp;#x200B;

EDIT: spelling

u/TheStudyOf_Wumbo · 2 pointsr/UofT

I type too much so I needed a second post

---

&gt; And lastly, do you have any sources that you used to read up on multithreading?

I recommend doing the following:

If you know Java and want to see all the ways you can strangle yourself, this book has a lot of great things in it. It's quite readable and will likely scare you (for good reason...) into how dangerous multithreading can be. The book is hefty and requires Java, but the information is very practical.

If you want CSC369 notes from a really good textbook, the following chapters are relevant:

http://pages.cs.wisc.edu/~remzi/OSTEP/threads-intro.pdf

http://pages.cs.wisc.edu/~remzi/OSTEP/threads-api.pdf

http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks.pdf

http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks-usage.pdf

http://pages.cs.wisc.edu/~remzi/OSTEP/threads-sema.pdf

http://pages.cs.wisc.edu/~remzi/OSTEP/threads-cv.pdf

http://pages.cs.wisc.edu/~remzi/OSTEP/threads-bugs.pdf

http://pages.cs.wisc.edu/~remzi/OSTEP/threads-events.pdf

You can casually read the above. You don't need to actively code or anything... and the style is very laid back and enjoyable to consume. Each chapter should take you ~40-60 minutes to do, so you can do one a day over the summer and be done in a week.

If you want the 369 notes, these are relevant lectures which cover the above chapters:

http://www.teach.cs.toronto.edu/~csc369h/winter/lectures/w3/L3-Synch.pdf

http://www.teach.cs.toronto.edu/~csc369h/winter/lectures/w4/L4-Synch.pdf

The above may be a good refresher after you've done the textbook spam I posted above.

All of these links are from the CSC369 webpage here: http://www.teach.cs.toronto.edu/~csc369h/winter/lectures.html

LASTLY make sure to read up on the language you plan to use and explore its concurrency library.

Now that you have the knowledge, go write something that does this. Find a cool topic where you have tasks that could use multiple threads to go faster and make some cool stuff.

=============================================

Some final notes because this took a while to type up and I have to go have lunch:

  • Don't throw your health away over stuff (start exercising and eating healthy)

  • Do not mentally burn out over the summer while doing this

  • You will find you will only succeed at projects you are excited for, if you choose to make a project without really high enthusiasm you will burn out and hate yourself... so find something really interesting

  • Talk to other programmers if you can, become friends with lead devs in projects if possible

  • I'll say it again because it's very important, avoid burnout... don't do more than 8-9 hours of hard work per day, you probably won't absorb the rest anyways

    I didn't proof read anything so enjoy the typos, spent too much time writing posts

    EDIT (I lied): Don't forget that luck plays a large factor in the interview, you can have everything and you could be asked some stupid question. Therefore it's not worth killing yourself over since you could grind like mad and have luck just not be on your side (and this is why you should apply to as many companies with interesting jobs as possible)
u/GlitteringSkeleton · 4 pointsr/javahelp

I'd start with this article. Finding newer versions of the books mentioned here is going to get you going on the right path. Here's a few I've picked out that I've personally read over the years.

Java: A Beginners Guide - Doesn't really get much better than this as far as an introduction into Java. Clean examples, pretty easy to follow. Would be a great place to start

Effective Java - This has historically been an excellent reference for Java. It's not entirely beginner friendly, but if you have at least a working knowledge of Java it's an excellent book to have around. Note: The link is for the 3rd edition which is coming out soon, I assume it will be as good as the previous editions, but in any case the information from the previous editions is still worthwhile even if there are newer features in Java 7/8/9 which is covered by the 3rd edition

Java Concurrency in Practice - As you become more advanced this book can help guide you along the ways of concurrent operations in Java and pitfalls/issues you'll run into (and how to avoid them)

u/JoeyDeVries · 3 pointsr/opengl

I'm working on a large OpenGL tutorial site that is specifically aimed at beginners trying to learn modern OpenGL with clear samples and easy-to-understand sections. It's not finished yet but should provide a good resource for getting started and getting a hang of shaders. Take a look at www.learnopengl.com and see if it's something that suits your needs :)

Also, take a look at:
Real-Time Rendering: great book on modern OpenGL with a focus on shaders (although not specifically aimed at complete beginners).
Open.gl: good resource for starting modern OpenGL. Easy-to-understand.
Arcsynthesis tuts: very extensive OpenGL tutorial that goes into much more detail, making it more rewarding, but also more complicated for beginners.

u/Mekire · 2 pointsr/pygame

Well, I pretty much hate it, but if you really wanted to you could pre-plan your projects using UML. You can find some free UML editors online if you look. ArgoUML is okay, but definitely needs improvement (like an undo feature).

Also if you are interested in programming patterns, the canonical text is the GoF book. If you search I'm sure you will be able to find a PDF version of it. There is also a website dedicated to talking about the same book in terms of the application to games:
http://gameprogrammingpatterns.com/contents.html

u/dominusludi · 22 pointsr/gamedev

I find tutorials to be decent for learning how to perform simple tasks which don't require much variation or novel problem solving. As it turns out, making games is pretty much the exact opposite of that. I know from experience that it can be frustrating to find information on stuff like architecture and system design for games, but a lot of that is pretty much tribal knowledge, learned by professionals on the job or by hobbyists as they make projects.

I recommend reading articles on Gamasutra for more advanced topics, and I also recommend the book Game Engine Architecture by Jason Gregory. I think really the best thing you can do is try to do a more complicated project and as you run into problems you have trouble solving on your own, then research that specific topic. It's worth trying to solve the problem on your own first though, as while it may involve reinventing the wheel somewhat, it's also the best way to learn.

u/johnboy77 · 3 pointsr/Cplusplus

Scott Meyers is good -- check out Effective Modern C++. He has a training course, Overview of the New C++ -- I haven't taken it, but I've seen enough of his stuff to recommend him.

If you want more introductory C++ stuff, look at some of the online courses by Kate Gregory (some free trials available -- which might be good to assess if it's what you're looking for).

Once you get going, I'd recommend Sutter's Mill. In particular, check out his "Elements of Modern C++ style". There are also loads of videos online from CppCon (just google it).

But keep in mind that one limiting factor in your request is the "for C programmers" part. A big part of recent evolution of C++ has been getting rid of the need for core C features like pointers. By keeping the C angle, you may be anchoring yourself to the past.

And if you want to go that route anyway (ie keep the C angle), then there is less harm including some older stuff too. I really liked Bruce Eckel's Thinking in C++, which you can find online for free (it isn't quite ancient or modern).

u/sonay · 1 pointr/linux

If you want to program in Java, I would also suggest IntelliJ Idea. Community edition^[1] is free. Oracle docs are fine^[2], javadocs^[3] are great and the source is free for OpenJDK and if you want to go pro I highly recommend Effective Java^[4] by Joshua Bloch. There is also Findbugs^[5] which is cool for static analysis and most of the popular IDEs have plugins for it. You should also check Concurrency In Practice^[6] for multithreaded programming. If you are into web programming, I highly suggest Head First Servlets and JSP^[7]. There are also very good libraries such as Google Guava, Apache Commons etc.

  1. http://www.jetbrains.com/idea/features/editions_comparison_matrix.html
  2. http://docs.oracle.com/javase/tutorial/
  3. http://docs.oracle.com/javase/7/docs/api/
  4. http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
  5. http://findbugs.sourceforge.net/
  6. http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
  7. http://www.amazon.com/Head-First-Servlets-JSP-Certified/dp/0596516681

u/blexim · 5 pointsr/REMath

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:

  • Bounded model checking
  • Abstract interpretation
  • Predicate abstraction
  • Interpolation based methods

    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 &amp; would be happy to answer any questions you have.
u/elperroborrachotoo · 3 pointsr/cpp

Effective C++ / Effective STL by Scott Myers are a good starting point. They can be hard - if they are not, come back in a few months.

Marshal Cline's C++ FAQ is an assorted collection of everything in small bites. The book makes excellent toilet table material, though you have to piece together yourself the deeper insights that Effective X aims for.

Guru of the Week is a sometimes-dated but very well presented series of questions and answers, aiming at a wide range from beginner to, well, guru. The only drawback is that in C++11 and beyond, it's a bit different, or there are other / easier solutions.
Herb Sutter has started reviving the series

Code Complete gets half-a-recommendation. It is important material about programming in general, but for most people it's just too big. Anyway, the first edition can be acquired for pennies and is "good enough", so in case it doesn't work for you it could keep you warm for half an hour or so (lighter not included).

---

Other than that: I repeat the recommendation by /u/Heiroglyph to read and try to make sense of other people's code.

---

Side Note: My recommendations are intentionally non-game-programming related. Reason is^* I had quite a few run-ins with game programmers on Q&amp;A sites and the like, and I'm left with the impression that they have a culture of sticking to their own puddle, but thinking it's the ocean. Certainly, game programming has some very particular problem that need very specific and sometimes awkward solutions, but that's no reason for isolaitonism.

^^*) ^^besides ^^the ^^obvious ^^"I ^^am ^^doing ^^too ^^little ^^game ^^programming ^^to ^^be ^^of ^^use ^^for ^^that"

u/alttoafault · 2 pointsr/gamedev

Well it sounds like its time to start prototyping and analyzing what does and doesn't meet your documents/requirements. Getting these out should motivate your team and make you feel a bit more confident in what to do next.

As far as looking for resources, there are quite a few out there. I really recommend checking out The Art of Game Design by Jesse Schell, it's one of the most practical books on game design (a lot like Raph Koster's are way more theoretical). I'd also check out gamasutra for a great design-focused community, there's a lot of resources there that can help you out.

Also, don't worry if everything falls apart. Game design is a lot of work and people can tend to be pretty flaky about it. That's why I've tried to learn every aspect of development so I don't have to depend on others.

u/alterkait · 1 pointr/Kuwait

Start off with Codecademy. It gives a basic overview on various languages used in Web Development, Web Design, Site Building, Basic Console Applications and a few languages used for various things. It's free and gives a very basic standpoint on Programming. It should take you 2-3 months to finish all the courses and by that time, you should be ready to start your own small projects.

---------------------------------------------------

Next, you should look onto buying books. It really depends what you want to get into. For making websites, you should learn HTML, CSS, JavaScript since they give most functionality and are very easy to remember (all of which are curses on codecademy). If you want a challenge, you should consider Computer applications that use C, C++ or C#. However, That is not recommended for a person with no experience. iOS development is a great way to pick up new skills. Should you want that, you're limited to using an Apple computer, Apple-dev software and development licenses (which can all be costly).

--------------------------------------------------------

Use the list below for sources on the stuff I mentioned:

Codecademy [https://www.codecademy.com/learn/all]

Learning Web Development with this great book [https://www.amazon.com/Web-Design-HTML-JavaScript-jQuery/dp/1118907442/ref=zg_bs_3600_3]

Lastly, I'm uncertain you can pull off a great software with only online courses and reading a few books. Programming is a very complex process, that requires money, energy, and a whole lot of time. But if you stay consistent and practice every single day, I'm confident you can do this.

Contact me privately for any questions. Good Luck!

u/pickaxeprogrammer · 1 pointr/web_design

I know books seem out of style, but a thick book on front end web development is worth a thousand crappy blog posts. If you think HTML and CSS are fun wait until you see what JavaScript can do. THEN see what backend code and databases can do.. truly fun.

Here is a nice set of books. I have these. They are pretty basic, which is perfect for where you are right now. They are also really visual. I'm a visual person, so I appreciated the diagrams and such.

HTML, CSS, JavaScript with Jquery

u/b4ux1t3 · 1 pointr/talesfromtechsupport

Yeah man, no problem.

Before I find some specific books, I wanna mention one series that you've definitely heard of: Blank for Dummies. From my experience, if you want to start from no knowledge and work up to an intermediate level of understanding, For Dummies books are great. A lot of experts beg to differ.

But, to be frank, people who are experts in their field are just that: experts in their field. I have friends who are excellent in their fields, but they are terrible teachers. They expect people to pick things up as quicky as they did. We're not all wired that way, and For Dummies books get that.

So, for my first two recommendations, here ya go:

Networking for Dummies

Building Your Own PC for Dummies

Both of those are less than 20 bucks on Amazon, and I'm sure you can find them at a library.

Now, if you really want to get into networking, and you want to get in to the IT field, you should read the A+ and Network+ certification books from Comptia. These will be harder to find in a library, but there will probably be some older editions lying around somewhere. If you know someone who works in the field, they probably have a copy, or can get you a copy, for free or cheap.

These books are more expensive, and more difficult, but they are peerless if you want to jumpstart a career in IT. I'm not going to claim that getting an A+ and/or a Network+ (or a Security+) certification is going to guarantee you a job. However it will definitely help you get your foot in the door.

Other books that you'll want to eventually check out if you want to check out things from O'Reilly. Most of their books are not meant for beginners, but they are the quintessential reference books in the IT field, including computer science, networking, and security. To give you an idea of just how many books they have, check out this picture of the programming section at the Noisebridge Hackerspace in San Francisco.

That band of colorful books in the middle? Those are (some of) the programming books they have available. They have just as many on every topic of IT. Here's their networking section. 19 pages. Of just networking books.

I hope that gives you a good idea of where to start.

u/yberreby · 4 pointsr/programming

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:

  • This list of talks about compilers in general.
  • The LLVM Kaleidoscope tutorial, which walks you through the creation of a compiler for a simple language, written in C++.
  • The Super Tiny Compiler. A really, really simple compiler, written in Go. It helps with understanding how a compilation pipeline can be structured and what it roughly looks like.
  • Anders Hejlsberg's talk on Modern Compiler Construction. Helps you understand the difference between the traditional approach to compilation and new approaches, with regards to incremental recompilation, analysis of incomplete code, etc. It's a bit more advanced, but very interesting nevertheless.

    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
u/Bizkitgto · 13 pointsr/learnprogramming

I'd start with Harvard's CS50 on edx, it's the best course you'll find anywhere bar none. The instructor, Dave Malan is world class. The first half of the CS50 lectures are on C and on youtube. There's also r/cs50.

Also, the Richard Buckland lectures are all up in youtube as well, really good intro to C programming. People love this guy!

Here is the Aalto C Programming MOOC based on K&amp;R.

You can learn C, all you need is a text editor (like notepad or sublime), and the terminal/command line. You don't need any internet connection whatsoever.

I recommend getting this book C Programming: A Modern Approach, it's great for beginner's, and you can try going though the examples. You can also try going through all the problem's in K&amp;R's C Programming (what many refer to as 'The C Bible') book if you want to be a C Ninja.

Here is a guide on how to compile C programs on a Linux system.

You can find used copies or PDF's of these books online if you don't want to pay full price. I like having a hard copy in front of me when learning as I can flip back and fourth quickly.
Since you want to learn C - you should read K&amp;R's The C Programming Language (the bible for C) at some point.

u/Osempu · 1 pointr/learnprogramming

Hi i personally loved Web Design with HTML, CSS, JavaScript and jQuery Set. Have really good examples and easily explained concepts which i think is cornerstone for programming itself. Also don't get discouraged if you don't remember things, is totally normal that you have to go and look for definitions, code snippets, etc . The more you code the more you learn, as easy as that, remember that and your life will be a lot easier. Happy coding!!!

Edit: Also practice, practice and practice more. Here's a link to my favorite coding challenges page.

u/Madsy9 · 1 pointr/opengl

You didn't post a question, so it's difficult to know what exactly you want. If you just need to implement space partitioning with a BSP tree, read the good old BSP FAQ

If you need more general graphics background, check out:

  • Websites like Flipcode and GameDev.net

  • Buy some books. GraphicsGems and Michael Abrash's Graphics Programming Black Book are maybe old, and the code examples are certainly outdated (They are from the old MS-DOS mode 13h VGA days), but they are excellent in teaching you the fundamentals of computer graphics theory that never gets old. Like how polygon rasterizers work, space partitioning, polygon clipping, etc. When you want to learn more about more advanced effects, look into the Real-Time Rendering series. For a slightly more updated book on the same topic, check out 3D Math Primer for Graphics and Game Development, but I think it's a bit thin for the price (I have the 1st edition myself).

  • Forums with people who actually specializes in computer graphics, like Ompf2 and DevMaster

    If you have more questions, please be more specific. I might help you with more resources.
u/SamHennessy · 1 pointr/PHP

When I said "I can see how maybe they could be useless to you.", that's because I instantly know what kind of programmer you were. You're a low level guy.

I have a copy of "Algorithms in a Nutshell" (http://www.amazon.com/Algorithms-Nutshell-In-OReilly/dp/059651624X) but I never finished it. My favorit programming book may be "Patterns of Enterprise Application Architecture" (http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420). Neither of these books are language specific, but I don't think they could be further apart in every way. Both are very valuable and I appreciate that they both exist.

There is a good number of reasons that you should maximize your use of the built-in PHP functions (http://webandphp.com/5reasonstomaximizeyouruseofPHP%E2%80%99sbuiltinfeatures). My book is an attempt to come up with a system that will help you learn all of the built-in PHP functions by giving a realistic use case that could be applied in your everyday work.

Being a PHP programmer, it is much more useful to know what functions PHP has for array sorting, than it is to know how to implement array sorting in PHP code.

u/thebigleboggski · 9 pointsr/networking

The CCNA curriculum is a great way to get a solid networking foundation. Many will recommend the Network+, but I certainly think the CCNA is a better certification track. I recently went through Todd Lammle's CCNA Study Guide in less than two months and passed the CCNA Composite.

http://www.amazon.com/CCNA-Routing-Switching-Study-Guide/dp/1118749618/ref=sr_1_1?ie=UTF8&amp;amp;qid=1413474786&amp;amp;sr=8-1&amp;amp;keywords=ccna+study+guide

The great thing about this book is you can opt to go the ICND1 and ICND2 route, or just go for the composite exam. It's up to you.

GNS3 is excellent for practicing in a lab environment if you do not have your own equipment.

u/billygoatfrontflip · 3 pointsr/ccna

Andrew Crouthamel has a good series on youtube for videos.
https://www.youtube.com/channel/UCQZc6wrc__wo9oYOqvi9N_Q

They are a little dry, but free.

Install Gns3 (with some IOS images if you can get some) or packet tracer you can find a copy here http://getintopc.com/softwares/network/cisco-packet-tracer-6-1-free-download/.

There are some practice labs here http://www.packettracernetwork.com/labs/packettracerlabs.html.

You can get Todd Lamel book for self study as well.
http://www.amazon.com/CCNA-Routing-Switching-Study-Guide/dp/1118749618/ref=asap_bc?ie=UTF8

Hope this is helpful. Best of luck.

u/kharashubham · 4 pointsr/compsci

It's a great course, doing well in it would definitely give you more confidence in taking up more challenging problems in the CS or Software Engineering domain in general. I would recommend you to go through Data Structures chapter in the The Algorithm Design Manual by Steven S. Skiena, also a great book to study about Algorithms. This book is an amazing read and I recommend it to all CS majors.

u/cjsenecal · 2 pointsr/TheRedPill

STEM jobs are highly sought after nowadays and will continue to grow in the future. If you have a degree in computer science or medicine you're golden.

I'm 25 now and I work in the architecture field. I'm not an architect but simply a CAD operator, so I'm basically at the bottom of the barrel as far as pay. One of the things my ex told me when she broke up with me (the reason I came to TRP in the first place, surprise surprise.) was that she didn't think I wanted more in my life. That really set me off and stuck with me because at the time she was right.

Now I'm applying to schools. When I was 18 I originally majored in CSCI but didn't apply myself and dropped out. Now I've made it full circle and would really like to get back into it. I've only completed a couple basic lessons through Codecademy learning HTML and walking through how to make a website. I just need to keep building and learning.

I love tech stuff myself. Always like to have the latest and greatest and I built my own computer so I know how they work, I just need to learn how to communicate with them.

Do you recommend any physical books? I have this one ready to buy already.

u/jimmy0x52 · 9 pointsr/TrueReddit

This was an extremely fascinating read. I've felt this way for a while about social networks and it was part of the reason I finally got off Facebook after so many years.

One clear indication of this I saw frequently was the fact that no one called someone on their birthday any more (or even texted). I was seeing parents even wishing their children Happy Birthday or family members just liking another Happy Birthday post. This kind of impersonal interaction always bugged me.

This article has some great points in it and I hope there is a lot further research put into it. There are a few books cited, and a few others I found related. I've ordered ALL of them and plan to read them all as this is a really fascinating subject for me (a person who was born at the beginning of this era and has become an adult in it with two children who are going to grow up and have to adapt to this).

Books referenced:

You Are Not a Gadget - a Manifesto

Alone Together: Why We Expect More From Technology and Less From Eachother

And one related:

The Shallows: What the Internet is Doing to Our Brains

u/invictus08 · 5 pointsr/cscareerquestions

I will suggest start with Head first design pattern. That will gradually build your intuition about good software design. And it’s more fun to read compared to GoF imo. On top of that, there are Youtube videos by a guy named Christopher Okhravi on design patterns. Since I understand much better with videos (along with text book) because of my attention deficiency, they really helped me.

Apart from that, follow tech blogs of Netflix, Google, AWS, Uber etc. They are treasure troves.

Also, as /u/ibsulon mentined, Clean Code for writing good quality code, Programming Pearls and Pragmatic Programmer etc. Effective java and Doug Lea's book on concurrent programming - really helpful.

u/elurian · 3 pointsr/graphic_design

these books are great if you dont know much html and css
http://www.amazon.com/Web-Design-HTML-JavaScript-jQuery/dp/1118907442/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1456957990&amp;amp;sr=1-1&amp;amp;keywords=jon+duckett+html+and+css

and do a great job explaining the relationship between css and html in my opinion

id also super recommend if you're a beginner using bootstrap, you can read more about it here http://getbootstrap.com/ (its not integrated with dreamweaver too!) and there are plenty of youtube videos on it for creating simple but really great sites, its fully customizable and based off a grid structure which if you're a print designer you will love i think.

u/Ringo48 · 2 pointsr/programming

I can't tell exactly what you want to improve upon. If you just want better intersection algorithms/code, look at:
http://www.amazon.com/Introduction-tracing-Kaufmann-Computer-Graphics/dp/0122861604

http://www.amazon.com/Real-Time-Rendering-Third-Tomas-Akenine-Moller/dp/1568814240

The real performance gains in ray tracing, though, are parallelization and reducing the number of intersections tests that need to be done at all.

Parallelization is trivial.

For reducing intersection tests, you're best bet is some kind of space partitioning algorithm, like an octtree, k-d tree, or grid. It's not very hard either. The main idea is to pre-process the input into a grid-like data structure and do intersection testing by "walking" along the ray, through the cells. In each cell, do an intersection test with each object in that cell. Find the closest hit, and bail out. Traversing the grid is super easy and a lot faster than intersection testing. And (ideally) grid cells have very few objects, so the number of intersection tests is cut down a bunch, too.

The original paper for that technique, if you can find it, is this: http://portal.acm.org/citation.cfm?id=95111

u/mogwai512 · 3 pointsr/PHPhelp

&gt; I want to return response in real time to javascript

I'm about to get really thorough with my response so, "hold on to your butts"

&amp;nbsp;

As /u/Mike312 hinted at, this is not how PHP and vanilla Javascript works, and as such you would have to seek alternative frameworks or languages(like Websockets, NodeJS) or you can keep reading for an alternate solution.
&amp;nbsp;

What you must understand is that PHP is code that lives on and is rendered on the back-end (server). That means that by the time the front-end (browser) has access to the page, the PHP code on the server has already executed.

&amp;nbsp;

Now that you better understand relationship between PHP &amp; Javascript means you have two options, a simple one and a more complex one:

&amp;nbsp;

Simple Option: Abandon real-time
&amp;nbsp;

Since you seem to be a beginner when it comes to PHP, this is the option I recommend as it is the simplest and fastest. In this case, you would have something on the front-end, like a button, that would call a new page. This page will render the results of the function I provided you.
&amp;nbsp;

To break it down:
&amp;nbsp;

  1. You press a button in the browser.
    &amp;nbsp;
  2. The button redirects you to a new page.
    &amp;nbsp;
  3. The new page has the PHP function I provided you above, and runs it.
    &amp;nbsp;
  4. A page is the rendered to the user saying something like "After X attempts, here are the results: "
    &amp;nbsp;
    &amp;nbsp;

    &amp;nbsp;

    Complex Option: Explore AJAX
    &amp;nbsp;

    AJAX or Asynchronous JavaScript and XML allows your browser(front-end) to make calls to your server (back-end) without reloading the page. This means that, as an example, you can create a button on the front-end that executes a javascript function. The javascript function would then make an AJAX call to your server, and you could return that server data WITHOUT having to reload your page. Please see the link I provided above for a very good example.

    I won't write up full on code for you that shows you how the HTML/JS/AJAX/PHP all interact but, here is an outline of how I would do it:
    &amp;nbsp;

  5. Modify the fgcContents function I gave you above to only take in a URL, and only return results and data. Since you are using AJAX, your front-end should manage and return the number of attempts. This will be explained in more depth later

  6. Create an HTML page with a button.
    &amp;nbsp;

  7. Have the button trigger a Javascript function
    &amp;nbsp;

  8. Have the JS function define two variables, the number of attempts and the URL to hit (the url is where your PHP code will reside).
    &amp;nbsp;

  9. With those variables defined, build out your AJAX request using the url variable, but do NOT call it yet. Instead, define a loop that will repeat X times, with X representing the variable you defined above as the "number of attempts".
    &amp;nbsp;

  10. Inside the loop, make the AJAX call, but also add checks for whether or not the AJAX call failed or succeeded.
    &amp;nbsp;

  • If the AJAX call succeeded: This means that the AJAX call was successful, it does NOT mean that your fgcContents function was successful, so you need to examine the results of the call (which should be the results of the "fgcContents" function) and use javascript to update your HMTL. For example, if "fgcContents" returns an array where "results" is TRUE, then you can update or add some HTML on your page that says "Attempts: 1 and Data: your_data_here". If results is "false" ("fgcContents" returns an array where "results" is FALSE), then you can update your HTML to list out the number of failed attempts, and with each failed attempt, the users page will update, thus providing you real-time results.

  • If the AJAX call failed: Again, this does NOT mean the fgcContents function failed, it just means the AJAX call did not go through. This can happen due to errors in your code, network issues, etc. Either way you will need to capture this and report it to the user somehow.

    &amp;nbsp;

    I know this is a lot of info to take in, but it should help implement a simple solution, then as your knowledge grows you can implement the complex solution.
    &amp;nbsp;

    As a side note, if you are really looking into learning front-end/back-end development, I recommend the following books:

    Web Design with HTML, CSS, JavaScript and jQuery Set

    PHP &amp; MySQL Development
u/delarhi · 20 pointsr/cpp

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:

u/againey · 1 pointr/gamedev

If you're willing to plunk down a bit of cash (or get a relative to help out), I'd recommend getting a game design book or two. I'd recommend The Art of Game Design by Jesse Schell and Game Design Workshop by Tracy Fullerton. Either one would serve as a good guide and overview of what a game designer does, what skills a good designer will need, and also, indirectly, what a designer is not.

There are a lot of different roles within game development, and although a moderate understanding of design principles and skills can be useful for many of those roles, most are still quite different from actually being some form of explicit game designer. Learning more about what a designer needs to think about and do might help you determine if that's the area where you actually wish to focus, or if perhaps you'd rather look into other roles such as software engineering, art, audio, quality assurance (which isn't actually very comparable to just playing and being good at games), project management, and more; and each of those have sub-disciplines (examples: gameplay scripting versus graphics engine development; 2D, 3D, concept, and technical artists; composer versus sound effects).

But at least I'd say that, if you don't know where to start, game design is a good place. This is because a game designer needs to be involved with essentially all other roles in game development, and so learning about the game design process can be a great way to catch glimpses of all the other roles, and see how those other roles relate back to the overall process of game development. From there, you can choose whether to stick with the design (and maybe pick an area of design to focus on, like mechanics, level design, story/character design, aesthetic design), or instead shift your focus onto one of the other areas.

If you do stick with design itself, I'd recommend for an educational path to not look for anything too focused or specific. Game design skill, in my humble opinion, comes largely from a lot of practice and from a broad knowledge or at least awareness of many subjects. Some subjects are likely to be better than others as the center of your education, but don't let the center dominate too strongly.