Reddit mentions: The best linux operating system books

We found 497 Reddit comments discussing the best linux operating system books. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 117 products and ranked them based on the amount of positive reactions they received. Here are the top 20.

1. The Linux Programming Interface: A Linux and UNIX System Programming Handbook

    Features:
  • No Starch Press
The Linux Programming Interface: A Linux and UNIX System Programming Handbook
Specs:
ColorWhite
Height9.56 Inches
Length7.25 Inches
Number of items1
Release dateOctober 2010
Weight5.05 Pounds
Width2.29 Inches
▼ Read Reddit mentions

3. Python Essential Reference

    Features:
  • Addison-Wesley Professional
Python Essential Reference
Specs:
Height8.9 Inches
Length5.9 Inches
Number of items1
Release dateJuly 2009
Weight1.72621951146 Pounds
Width1.1 Inches
▼ Read Reddit mentions

4. A Practical Guide to Linux Commands, Editors, and Shell Programming (3rd Edition)

    Features:
  • No Starch Press
A Practical Guide to Linux Commands, Editors, and Shell Programming (3rd Edition)
Specs:
Height6.75 Inches
Length7.75 Inches
Number of items1
Weight3.33338940144 Pounds
Width1.5 Inches
▼ Read Reddit mentions

5. Understanding the Linux Kernel, Third Edition

    Features:
  • O Reilly Media
Understanding the Linux Kernel, Third Edition
Specs:
Height9.19 Inches
Length7 Inches
Number of items1
Weight3.24740911926 Pounds
Width1.8 Inches
▼ Read Reddit mentions

6. Assembly Language Step-by-Step: Programming with Linux

    Features:
  • John Wiley Sons
Assembly Language Step-by-Step: Programming with Linux
Specs:
Height8.901557 Inches
Length7.299198 Inches
Number of items1
Release dateOctober 2009
Weight2.58381771064 Pounds
Width1.598422 Inches
▼ Read Reddit mentions

7. Practical Vim: Edit Text at the Speed of Thought (Pragmatic Programmers)

    Features:
  • Used Book in Good Condition
Practical Vim: Edit Text at the Speed of Thought (Pragmatic Programmers)
Specs:
Height9.25 Inches
Length7.5 Inches
Number of items1
Weight1.15 Pounds
Width0.7 Inches
▼ Read Reddit mentions

8. Linux Command Line and Shell Scripting Bible

    Features:
  • Wiley
Linux Command Line and Shell Scripting Bible
Specs:
Height9.200769 Inches
Length7.40156 Inches
Number of items1
Release dateJanuary 2015
Weight2.3589462034 Pounds
Width1.598422 Inches
▼ Read Reddit mentions

9. Programming in C (4th Edition) (Developer's Library)

Programming in C (4th Edition) (Developer's Library)
Specs:
Height9 Inches
Length7.05 Inches
Number of items1
Weight1.9400679056 Pounds
Width1.5 Inches
▼ Read Reddit mentions

10. Linux Pocket Guide: Essential Commands

Oreilly Associates Inc
Linux Pocket Guide: Essential Commands
Specs:
Height7 Inches
Length4.5 Inches
Number of items1
Weight0.4629707502 pounds
Width0.75 Inches
▼ Read Reddit mentions

12. Linux Administration Handbook (2nd Edition)

    Features:
  • It is an machette
  • It is two handed
  • Made of carbon steel
  • High quality is the best feature
Linux Administration Handbook (2nd Edition)
Specs:
Height9 Inches
Length6.5 Inches
Number of items1
Weight2.97183129176 Pounds
Width1.25 Inches
▼ Read Reddit mentions

13. Python in a Nutshell, Second Edition (In a Nutshell)

Used Book in Good Condition
Python in a Nutshell, Second Edition (In a Nutshell)
Specs:
Height9 Inches
Length6 Inches
Number of items1
Release dateJuly 2006
Weight2.14068856402 Pounds
Width1.6 Inches
▼ Read Reddit mentions

14. Linux Command Line and Shell Scripting Bible, Second Edition

Linux Command Line and Shell Scripting Bible, Second Edition
Specs:
Height9.25195 Inches
Length7.350379 Inches
Number of items1
Weight2.7 Pounds
Width1.799209 Inches
▼ Read Reddit mentions

15. Producing Open Source Software: How To Run A Successful Free Software Project

    Features:
  • Used Book in Good Condition
Producing Open Source Software: How To Run A Successful Free Software Project
Specs:
Height9.19 Inches
Length7 Inches
Number of items1
Release dateOctober 2005
Weight1.07585583856 Pounds
Width0.74 Inches
▼ Read Reddit mentions

16. How Linux Works: What Every Superuser Should Know

    Features:
  • Used Book in Good Condition
How Linux Works: What Every Superuser Should Know
Specs:
Height9.25 Inches
Length7 Inches
Number of items1
Release dateMay 2004
Weight1.33 Pounds
Width0.94 Inches
▼ Read Reddit mentions

18. A Practical Guide to Linux(R) Commands, Editors, and Shell Programming

A Practical Guide to Linux(R) Commands, Editors, and Shell Programming
Specs:
Height9 Inches
Length7.5 Inches
Number of items1
Weight3.26725072284 Pounds
Width2.25 Inches
▼ Read Reddit mentions

19. Shell Scripting: Expert Recipes for Linux, Bash, and more

Shell Scripting: Expert Recipes for Linux, Bash, and more
Specs:
Height9.25 Inches
Length7.375 Inches
Number of items1
Release dateAugust 2011
Weight2.28398903432 Pounds
Width1.36 Inches
▼ Read Reddit mentions

🎓 Reddit experts on linux operating system 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 linux operating system 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: 25
Number of comments: 7
Relevant subreddits: 1
Total score: 23
Number of comments: 6
Relevant subreddits: 5
Total score: 11
Number of comments: 4
Relevant subreddits: 1
Total score: 10
Number of comments: 4
Relevant subreddits: 2
Total score: 10
Number of comments: 4
Relevant subreddits: 1
Total score: 8
Number of comments: 4
Relevant subreddits: 2
Total score: 8
Number of comments: 4
Relevant subreddits: 2
Total score: 8
Number of comments: 3
Relevant subreddits: 1
Total score: -6
Number of comments: 7
Relevant subreddits: 2
Total score: -7
Number of comments: 4
Relevant subreddits: 3

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

Shuffle: random products popular on Reddit

Top Reddit comments about Linux Operating System:

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/Mr_Bennigans · 2 pointsr/gamedev

> I think if I learn how to program with an aim to work as a software developer and make games on the side, is this viable after just turning 20?


There's nothing wrong with the age of 20. I started school at 20, graduated in four years, and found work as a software engineer right out school.


What you have to figure out is how to make the best of your time left in school: should you take a class or two on programming and graduate on time, or (more dramatically) change your field of study to computer science and spend a few more years in school? That's something only you can decide. If you want to finish your architecture program and graduate in a reasonable amount of time, I can assure you that your math and physics background will be enough to get you work as a software engineer, but only if you can actually program.


Part of working as a software engineer means being able to program in multiple languages. That's because it's not really about the language, it's about the logic. All languages follow certain patterns and while syntax or wording may change, they all share ways to implement the same logic.


It also means knowing what data structures to use for what scenarios. The phrase "There's no such thing as a free lunch" comes to mind. All data structures have advantages and weaknesses and no data structure is perfect for every occasion. Know the differences, know the performance impact, and be able to speak to them. This won't just help you write better code, it will help you land a job. Interviewers love to ask questions about data structures.


As a corollary to data structures, you also need to know your algorithms. You need to know the performance impact of different ways to search and sort, traverse graphs, and find the shortest path (particularly relevant for game programming).


You said you're learning Python and that's great. Python is a great way to learn how to program. It's dynamic, it's friendly, and it has a rich library. Learn Python inside and out, then pick another language and figure out how to do the same things. C++, Java, and C# are all pretty popular in the industry, pick one of those. Once you know how to program in a few languages, you focus less on minute implementation details specific to one language and more on high level abstraction shared across multiple languages. By that point, you'll no longer be speaking in code, you'll be speaking in plain English, and that's the goal.


I don't know many good free online resources for learning languages, I learned mostly out of textbooks and lecture slides (along with lots of practice). There are some links in the sidebar to some tutorials that are worth checking out. Beyond that, I can recommend some books you may want to read.


  • Algorithms in a Nutshell - one of the best quick references on algorithms you can read
  • C# 5.0 in a Nutshell - excellent language reference, aimed more at advanced programmers, though it's comprehensive in scope, covering everything from language syntax and structure of a program to more complex tasks like threading, multiprocessing, and networking
  • Learning XNA 4.0 - a great game programming book, teaches 2D and 3D game development using Microsoft's C# and XNA framework
  • Java in a Nutshell - another great language reference
  • Starting Out with Java - introductory programming text, has end-of-chapter problems for reinforcement, a little pricey so see if you can find a used older edition
  • Starting Out with C++ - another good introductory programming text from Tony Gaddis
  • Python in a Nutshell - I can't speak to this one as I haven't read it, but I have been extremely happy with O'Reilly's "... in a Nutshell" series so I suspect it's as good as the others
  • Learn Python the Hard Way - free online book about learning Python, begins with simple examples then teaches you how to break it so you know both sides of the story, wasn't as comprehensive as I'd hoped but it taught me the basics of Python
  • Programming Interviews Exposed - sort an all-in-one book covering lots of different topics and giving an insight into what to expect for that first interview

    EDIT: I added Programming Interviews Exposed because it's a good reference for data structures, algorithms, and interview questions
u/DavidRD · 4 pointsr/learnprogramming

> I have been using sublime for a while now. And I love it, it's intuitive and beautiful. But I feel like I should really vi or vim, for ssh sessions and so on. I know that there are ways to use sublime to edit codes over ssh, but I feel like I am not a real programmer if I don't know vi.

I'm pretty sure there are a lot of excellent programmers who don't know vim. Furthermore sublime is an excellent editor, if you like it there's no need to change.

BUT:

  • Even if you stick with Sublime or use an IDE I would still highly recommend you learn vim. Sublime as well as many IDEs have plugins with which you can use the vim modal-editing commands. Starting out this will be a bit of a pain to use. But after a relatively short amount of time you will be editing faster than you ever did, and the speed only increases with time/learning. This is a huge benefit, even if you never use vim itself but only editors that support its commands.

  • Just spoonfeed yourself the commands over time and really use them instead of trying to memorize heaps of them in a short timeframe. Start with the basics and add to that step by step. Make sure you continue to correct yourself and keep being aware of more efficient ways of doing things. It's about slowly/progressively building better habits.

  • Text editing in 'modeless' editors will start to feel extremely frustrating once you get used to the ease and speed of vim. Not having to reach for the mouse, the modifier keys or the arrow keys all the time is an enormous advantage both on the speed of your coding as well as your hand health.

  • Make sure you remap the capslock key to either 'esc' or 'control'. Better yet, map both to capslock at the same time ;) (xcape)

  • You need to be able to touch type in order to benefit from vim, so if you can't already I suggest you learn to touch type before you start with vim. I found this to be a very good course.

    > Do any of you have resources that explain the why the keystrokes of vi the way they are so I can understand them? For example, why the hell "y" for copy. And any webpages that i can just ctrl-F to search for a command I want? I am planning to have this webpage open up on the side as I do my coding.

  1. Vim doesn't use the 'normal' key commands because it works with different modes, most of the time you want to be in 'normal mode' to navigate and edit your text efficiently. Only enter insertion mode if you need to. Because there are different modes vim allows you to edit text with as little effort as possible because you don't have to use modifier keys all the time and text navigation becomes a breeze. ('y' is much easier on the hands than 'ctr-f') furthermore vim allows most of the commands to work together with other commands. This would be far more difficult if the modifiers had to be used all the time. For example: 'w' means navigate to the beginning of the next word' and 'd' means delete. Both can be used together so you get 'dw' wich means 'delete until the beginning of the next word. The way vim allows you to combine commands is a really powerful feature.
  2. Begin by typing 'vimtutor' in the terminal and complete that tutorial.
  3. There are many online resources, but I highly recommend the book Practical Vim both for the quality information it contains as well as how the book is layed out. Each chapter covers an important topic, starts with the basics and delves further and further into the material. So if you're starting out you can just read the start of each chapter, then as you progress you can "go deeper" and pick up more useful commands and tricks as you grow.
  4. It's been mentioned already but I also quite liked Vim Adventures!

u/LinuxStreetFighter · 11 pointsr/sysadmin

Yes, there is a lot of growth for Linux administrators.

I can't speak for the LPIC but you should get The Linux Bible and The Linux Command Line and Shell Scripting Bible and work through those. Then take the RHCSA and RHCE.

The Linux Bible

Linux Command Line and Shell Scripting

I don't know where you're located where junior administration can't lead into auditing or information security but you should build a lab and start building that knowledge and gaining experience. Chris Sanders has great books on the subject and an amazing website.

http://chrissanders.org/

He uses Linux for network monitoring and analysis.

There are also a slew of magazines and podcasts out there to keep you motivated, entertained, and educated. Jupiter Broadcasting is something I really enjoy. They took me from a Linux fan into an enthusiast into a professional. Linux Unplugged, Linux Action Show, TechSnap... Even the quirky BSD guys are awesome.

Linux Format is a great magazine, Admin is good, Linux Journal is hit or miss for me but it hits the spot when I'm looking for something off the wall or a project.

There are also subs on this site that are helpful and fun. /r/linuxadmin is interesting, /r/linuxmasterrace is GOAT, /r/linux is... Linux... /r/gentoo is beardly, /r/archlinux is -- READ THE WIKI.

If you get those books, which I can't recommend enough, start playing with Python too. Don't get Learn Python the Hard Way, get something like Python Crash Course which is significantly better. Your mileage may vary, this is just my opinion.


Good luck! Best thing to do is get a distro and start learning. Read the man pages/wikis, and then post a question. That will help you a lot in the coming days ;)

u/the_omega99 · 18 pointsr/learnprogramming

>I do have a textbook called "C: A modern approach" by King, but like I said before, I think it focuses more on the coding aspect.

Most books that focus on C are going to be about learning the language. If you want to learn low level stuff, you need to find books that focus on them (and they'll usually incidentally use C). The language itself is quite small and minimalistic in what it can do. Most heavy handed things like networking and GUIs require interaction with the OS.

Eg, if you wanted to do networking, you could use the Windows API or the POSIX socket API (POSIX being the standards that *nix systems follow -- and certain versions of Windows). Or you could use a higher level library like curl for cross platform support (and a wealth of nicer features).

>Can somebody please guide me on where to start?

Firstly, as much of a linux fanboy I am, I do want to make sure you know that you don't need to use Linux for any of the other things you wanted to learn (low-level programming, command lines, networking, etc). In fact, my OS class mostly used Linux, but we started out with a project using Windows threads (I guess the prof wanted us to see the difference from POSIX threading).

All that said, I do think Linux is something you'd want to learn and that a lot of low level things just seem more natural in Linux. But I'm biased. Linux fanboy, remember?

I'd start with downloading a Linux OS. Doesn't really matter which. I'd recommend going with Ubuntu. It's the most popular, easiest to find help with, and seems to be what most web servers are running, to boot. You can play around with the GUI for a bit if you want. It won't feel that different. Modern OSes sort of converged into the same high level ideas.

My favourite book for getting into the command line ever so slightly touching the low level aspects of OSes is Mark Sobel's A Practical Guide to Linux Commands, Editors, and Shell Programming. It will include some basic knowledge of Linux, but mostly focuses on the command line. But this is very useful because not only is the command line very practical to learn, but you'll end up learning a lot about Linux in the process (eg, by learning how everything is a file, how pipes work, etc). And arguably the command line a super big part of Linux, anyway. It makes sense as the first step.

Now, for the next step, you need to know C very well. So finish with your class, first. Read ahead if you have to. Yes, you already know if statements and functions and all, but do you understand pointers well? How about function pointers and void pointers? Do you understand how C's arrays work and the usage of pointer arithmetic? How about how arguments are passed to functions and when you'd want to pass a pointer to a function instead? As a rough skill testing question, you should implement a linked list for arbitrary data types with functions such as prepending, appending, concatenating lists, searching, removing, and iterating through the list. Make sure that your list can be allocated and freed correctly (no memory leaks).

Anyway, the next step is to learn OSes. Now, I said OSes and not Linux, because the Linux OS is a bit constrained if you want to learn low level programming (which would include a knowledge of what OSes in general do, and alternatives to OSes like Linux). But never fear, pretty much any OS book will heavily use Linux as an example of how things work and consequently explain a great deal of Linux internals. I can't recommend a class because mine was a regular university class, but Tanenbaum's Modern Operating Systems is a good book on the subject.

In particular, you can expect an OS class to not merely be focused on building an OS yourself (my class worked on aspects of OS101 to implement portions of our own OS), but also on utilizing low level aspects of existing OSes. Eg, as mentioned, my class involved working with Linux threading, as well as processes. We later implemented the syscalls for fork, join, etc ourselves, which was a fascinating exercise. Nothing gets you to understand how Linux creates processes like doing it yourself.

Do note, however, that I had taken a class on computer architecture (I found Computer Organization and Design a good book there, although note that I never did any of the excerises in the book, which seem to be heavily criticized in the reviews). It certainly helps in understand OSes. It's basically as low as you can go with programming (and a bit lower, entering the domain of computer engineering). I cannot say for sure if it's absolutely necessary. I would recommend it first, but it's probably skippable if you're not interested (personally, I found it phenomenally interesting).

For learning networking, Beej's book is well written. You don't need to know OSes before this or anything.

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/ezrock · 2 pointsr/IAmA

> Should I avoid the Microsoft world if I am certain on focusing in the direction of linux?

Assuming you are considering systems administration... In short, yes, avoid MS, and get to know Linux (when I say linux, I usually mean all of the Unix-like OSes). Most of the great sysadmins I know have OSX or Linux on their workstation, and work administering Linux systems. I can't think of anyone that knows both MS and Linux and prefers working with MS - although I am sure they exist. At the end of the day, it comes down to what you prefer, but there are a lot of arguments to be made for getting to know linux. #1 is the server market share, and #2, the F/OSS philosophy.

> What is the lowest "entry-level" job that I can get my feet wet while I study?

With linux, hmmm, good question... there are a couple of entry points. I'd start by teaching yourself. Again, it depends on what you are into. One entry level position would be tech support at a hosting company that hosts linux servers for their clients. The guys that you get on the phone/email when you have this service for example. Their tech support is usually tiered, so tier 1 is doing easy stuff and tier 3 is doing the hardcore stuff. I even poked around a found a listing. That's a great way to get your feet wet. That, or a linux-based startup that has a team and needs more hands.

> I know this is pretty far out, but how's the hiring like for linux positions? When the time comes, should I work with a recruiter, or sell myself to a start-up or company directly?

I wouldn't think it is so far out. If you are a "computer-person" smart and you got yourself a book like this and practiced a bit until you were good enough, you could get an entry-level job pretty damned quickly, I think. The market is quite hot in big cities. For proof, pick a big city, go to craigslist and type in linux under jobs. I picked LA In my opinion, there is nothing wrong with recruiters, it's nice having someone whose job is to get you a job. I've used them to hire and to be hired in my past. Just remember, they're salespeople, and they're selling you, so they are often put in a position where they are trying to persuade you.

>What should I get started on reading? What books would you recommend for a beginner? (I'll take "advance" ones too, I'll save them for the future). Also, if you know of any online communities or websites, I appreciate those as well.

As far as resources... That book above is great. It depends on what you want to know. The RHCT/E course material is great for practical sysadmining:
This is old, but I used it. Almost all of this stuff is good.
This is a classic, but it's quite old.

Online, no better place to start than:
http://www.reddit.com/r/sysadmin/top/

/r/linux

http://code.reddit.com/wiki/help/faqs/sysadmin

u/chekt · 3 pointsr/learnprogramming

No matter where you start, make sure you get a reference book. If you start to branch out on your own, without the internet you're going to have a hard time figuring out how things work and how to do things that aren't spelled out in any beginner resources. If you're going to start with python, the in a nutshell books by OReilly are usually pretty good. If you going to start with C, The C Programming Language doubles as a reference and a tutorial, but if you want to do any game programming, you'll want to look into getting a book on SDL (simple, what I recommend), DirectX or OpenGL (these are both more powerful than SDL, but more complicated.). Make sure to download as many libraries and resources as possible before you deploy, even if you think you won't need them. You may want to get a book on Ubuntu if you're going to use linux so you can troubleshoot things.You can buy the books or download the pdfs, I recommend you download the pdfs to anything you don't buy, if you end up using it a lot you can buy the book when you get home.

If you want to follow a course, which I think you should, I recommend the stanford one. Downloading the lectures is a bit of a pain; you have to click on each youtube video, click on "show more", and download the MP4 file. It teaches the course in Java, which some people frown upon, but I part of the camp that believes that the programming language you start out with hardly matters, as you'll learning more soon enough, and what matters most that you just start programming. The stanford course is extremely good, and I recommend you download it and watch all of them, as they'll take you through the fundamentals. Make sure you download all the course materials as well. They use the acm graphics libraries, so download the jars and as much documentation as you can.

Things I recommend you download as well (after you set up linux):

  • VIM (type: "sudo apt-get install vim" into the terminal)
  • Emacs ("sudo apt-get install emacs23")

    Emacs and VIM are two text editors that people some people love. They're probably a bit advanced for a beginner, but they're fun to learn if you're brainfried from all the programming you'll be doing.

    To enter the vim tutorial, run the command "vimtutor" from the terminal.

    To enter the emacs tutorial, open emacs and do the command Ctrl-h t (hold down control and press h, then let go of control and press t)

  • Pygame ("sudo apt-get install python-pygame")
  • SDL ("sudo apt-get install libsdl1.2-dev")
  • C compiler ("sudo apt-get install build-essential")
  • Java compiler ("sudo apt-get install openjdk-7-jdk openjdk-7-doc")
  • Eclipse ("sudo apt-get install eclipse")
  • Gnome Media Player ("sudo apt-get install gnome-mplayer")

    Some people prefer VLC to Gnome-Mplayer, so you might as well get both.

  • VLC ("sudo apt-get install vlc")

    Tips for linux: Keep the CD which you installed it from, because if/when you mess up your linux side, you'll need a way to reinstall it. If you get stuck, you can type "man <whatever>", e.g. "man python" to get some info. The "man" command opens up the manual-page for whatever command, if it has one. Learn to use the command line, because it's extremely powerful.

    Good luck! I found programming to be extremely difficult when I started out, but it eventually becomes a lot of fun! Building something or figuring out an algorithm is incredibly rewarding. Don't give up, and have fun!
u/name_censored_ · 2 pointsr/Python

>Is there any books you would recommend as a reference not a guide? I have a few bookmarks that have really helped but i'd love a hard copy on hand.

I personally cut my teeth on a borrowed copy of Python Essential Reference - it's basically just a rehash of the standard library (though it's fantastic to have a hard copy, and it sounds like what you want). You can also try this book by Alex Martelli - I have never read it, but Alex Martelli is practically a god in the Python world (as someone who read GoF's Design Patterns, I loved his Python design patterns talk). Reddit also raves about Learn Python The Hard Way, though I have never read it because I erm... "disagree" with how Zed Shaw tends to approach things (to put it mildly), and I think it's a guide as opposed to a reference.

>Oh, and i've been having difficulty using the built in help function and such, is there a guide on how to use it effectively? I seem to struggle finding examples of the code too and how to use the functions and what i believe are called attributes ( the sub functions, e.g. datetime.datetime()),

I assume that the inbuild help you're talking about is the code documentation? This documentation is intentionally brief, so it's not particularly useful as anything but a reminder. You can create your own simply creating a string after you open a function or class;

def foo(etc):
""" This is the documentation for foo().

Triple quoted so that it can safely run over multiple lines"""

blah


As for the terminology; you are correct that they're called attributes. There are two sorts of attributes - methods (functions) and properties (values). It can get very messy/fun when you use the @property decorator or toy with __getattr__/__getattribute__/__setattr__, but let's not go there (let's just say that Python can be no-holds-barred).

>but i came from PHP where the PHP manual is amazing for a novice/new coder.

Python's online docs are absolutely fantastic. They are a comprehensive reference of not only the builtins and standard library, but also the object model, features, a rather good tutorial, the C API reference, and even heavy stuff like metaprogramming. The only things it's really missing is the really hardcore stuff like __code__ and __mro__, and to be honest, that's probably a good thing.

>And what is the difference between import datetime and from datetime inport datetime. Does it just allow me to call the attribute as datetime() and not datetime.datetime()?

That's exactly correct.

Just to add another complication, you can also from datetime import datetime as tell_me_the_time_please, and then instead of datetime() you can use tell_me_the_time_please(). The reason this is useful is that sometimes things in modules are named too generically (maybe it's main() or something), so you can import part of the module as a different name.

u/ryankask · 1 pointr/programming

I recommend you jump on to the Python bandwagon and start learning Django. The main site is http://www.djangoproject.com/. It has nice documentation http://docs.djangoproject.com/en/dev/ but the code is also very helpful to read. I would wager that if you could learn Python quickly by reading the Django code and learning some of the more advanced topics (https://code.djangoproject.com). There are two very helpful Groups on Google: Django-users (http://groups.google.com/group/django-users) and Django-developers (http://groups.google.com/group/django-developers -- think of this as read-only).

You've said you've dabbled in Python so I assume you know the resources there but two of my favorite books are Python in a Nutshell (http://oreilly.com/catalog/9780596001889) by Alex Martelli who is a genius and very involved with the online community. Despite the book's age, Mr. Martelli's experience with Python will quickly inform you of the nuances and pleasures of working with the language. Finally, I just picked up a copy (4th edition) of David Beazley's (http://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786/ref=dp_cp_ob_b_title_1) Python Essential Reference. A lot of it overlaps the Martelli book but it is updated for the most recent Python versions 2.6/3.X. I would buy both books and jump in. Note that they are reference books but since you have programming experience, I find them to be excellent "jump in" tutorials and of course essential references when coding.

Finally, to get a feel for best practices, see Dive into Python by Mark Pilgrim -- another great Pythonista the Python community values as he is very smart and can communicate well to the readers (plus he likes open source and his universal feed parser is great! and the book is free) -- http://www.diveintopython.org .

Contact me by using http://www.ryankaskel.com/contact-me/ if you find yourself strapped of cash and I would be happy to help you become a Pythonista.

u/7sins · 2 pointsr/vim

I'm doing almost no web stuff, but it always feels like a lot of people use vim for html/css/js, so I guess it can be a good fit. Since a compiled language like java/c++ usually requires ide features to use or debug(debugger, auto completion, type hierarchy, go to definition, refactor, etc.), it can be a bit of a ride to configure vim to be up to the task(usually a lot of plugins). Not the same for something like html/css, which is usually debugged/developed through the browser anyways.

Also, when I code in vim, its usually more of a mix of vim and commandline: ctrl+z out to do some grepping/git stuff, fg back to vim, close vim and open in a different directory, etc. Since you said you are working under windows, your workflow will probably differ a lot.

My suggestion would be: See how far you can get with vim. If it feels uncomfortable compared to your usual IDE, try pushing it a little further, and see if you can't find a solution. But, in the end, be honest with yourself: If the IDE feels better and lets you work faster and more comfortable, you have to accept that. Maybe vim is not the right tool for this task, doesn't mean you have to forsake it completely or anything. In case you find yourself in vim-wonderland and every other IDE/Texteditor can't stand up to vim anymore, then thats fine too. Or it might be a combination of the two. But you won't know that until you try. Just go for it and be honest with the result.

Also, as a side note, always remember your employer is the one paying you. So if you are being payed per hour(instead of per-project for example), he or she will probably expect you to work at an acceptable speed, and not for you to spend your time configuring vim, if you could be using something "proven" and mainstream just as well. But that completely depends or your employer. For the same reason, consider buying http://www.amazon.com/Practical-Vim-Thought-Pragmatic-Programmers/dp/1934356980/ if you haven't already. I used to own a copy(until I lost it), and it helped me a lot. Especially if you are already familiar with vim, it has huge potential.

Recapture: just try it out and be honest with the result; remember that your workflow might consist of other tools as well(not just editor/ide); don't waste your employer's money; consider buying practical vim(really!)

Since I don't really do web stuff, I can't say which plugins are really useful, so maybe somebody else will be able to help you out there.

Good luck! ;)

u/greengobblin911 · 1 pointr/linuxquestions

Many people may disagree with me, but as a Linux user on the younger side of the spectrum, I have to say there was one thing that really worked for me to finally switch for good- books.

There's tons of wikis and forums and of course Reddit to ask questions, but it is hard to get good answers. You may end up paying for books (unless you look on the internet for books) but it doesn't beat having a hard copy in front of you. It boils down to a time vs money trade off. The only wiki I would follow is one directly from the developers that act as documentation, not a community wiki. Also worth nothing certain wikis are more tied to linux and the kernel than others, meaning some are comparable/interchangable with the distro you may be using. Still, a novice would not easily put this together.

Forums are also useless unless you have the configuration mentioned in the post or that forum curates tutorials from a specific build they showcase and you as a user decided to build your system to their specifications. There's way too many variables trying to follow online guides, some of which may be out of date.

This i've realized is very true with things like Iommu grouping and PCI Passthrough for kernel based virtual machines. At that point you start modifying in your root directory, things like your kernel booting parameters and what drivers or hardware you're gonna bind or unbind from your system. While that does boil down to having the right hardware, you have to know what you're digging into your kernel for if you dont follow a guide with the same exact parts that are being passthrough or the cpus or chipsets are different.

Books are especially handy when you have a borked system, like you're in a bash prompt or an initramfs prompt or grub and need to get into a bootable part of the system. Linux takes practice. Sometimes its easier to page through a book than to search through forums.

Another thing about being an intermediate or expert Linux user is that you don't care much about distros or what other users or communities do. It wont matter as under the hood it's all the same, spare the desktop and the package managers. Once you're out of that mentality you just care about getting whatever you want done. I'm not one of those guys that's super gung-ho FOSS and open source. I just use what gets the job done. Also from a security perspective, yes Linux is in theory MORE secure but anything can be hardened or left vulnerable. It's more configuration tied than many uses and forums or threads lead it on to be.

My workload involves talking to servers and quite a bit of programming and scripting, in a variety of capacities. That's what led me to linux over the competitors, but I'm not so prudent to never ever want to use the competitor again or have a computer with it. With understanding Linux more, I use it more as a tool than to be part of the philosophy or community, though that enthusiasm pushes for new developments in the kernel.

I'm assuming you're a novice but comfortable enough in linux to get through certain things:

In any computer related thing, always TEST a deployment or feature first- From your linux system, use KVM or Virtualbox/vmware to spin up a few linux VMs, could even be a copy of your current image. This way any tweaks or things you want to test or try out is in an environment you can start over in.

The quickest way to "intermediate-expert" Linux IMO is learning system administration.

My go to book for this is "The Unix and Linux System Administration Handbook 5th edition"

https://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0134277554/ref=sr_1_1?keywords=The+Unix+and+Linux+System+Administration+Handbook+5th+edition&qid=1564448656&s=books&sr=1-1

This edition is updated recently to cover newer kernel features such as could environments and virtualization. This book also helps when learning BSD based stuff such as MacOS or FreeBSD.

Another good read for a "quick and dirty" understanding of Linux is "Linux Basics for Hackers" It does focus on a very niche distro and talks about tools that are not on all Linux systems BUT it does a good concise overview of intermediate things related to Linux (despite being called a beginners book).

https://www.amazon.com/Linux-Basics-Hackers-Networking-Scripting/dp/1593278551/ref=sr_1_3?crid=396AV036T1Y0Q&keywords=linux+basics+for+hackers&qid=1564448845&s=books&sprefix=linux+bas%2Cstripbooks%2C119&sr=1-3

There's also "How Linux works" but I cannot vouch for this book from personal use, I see it posted across various threads often. Never read this particular one myself.

https://www.amazon.com/How-Linux-Works-2nd-Superuser/dp/1593275676/ref=pd_bxgy_14_img_2/137-6604082-4373447?_encoding=UTF8&pd_rd_i=1593275676&pd_rd_r=feffef24-d3c3-400d-a807-24d8fa39cd1e&pd_rd_w=8GX0o&pd_rd_wg=3AMRB&pf_rd_p=a2006322-0bc0-4db9-a08e-d168c18ce6f0&pf_rd_r=WBQKPADCVSABMCMSRRA1&psc=1&refRID=WBQKPADCVSABMCMSRRA1

​

If you want a more programming oriented approach, if you're confortable with the C language, then you can always look at these books:

The Linux Programming Interface

https://www.amazon.com/Linux-Programming-Interface-System-Handbook/dp/1593272200/ref=zg_bs_3866_1?_encoding=UTF8&psc=1&refRID=5YN3316W22YQ4TSMM967

Unix Network Programming VOL 1.

https://www.amazon.com/Unix-Network-Programming-Sockets-Networking/dp/0131411551/ref=sr_1_1?keywords=Unix+Network+Programming+VOL+1.&qid=1564448362&s=books&sr=1-1

Advanced Programming in the Unix Environment

https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739/ref=zg_bs_3866_2?_encoding=UTF8&psc=1&refRID=5YN3316W22YQ4TSMM967

These books would take you to understanding the kernel level processes and make your own and modify your own system.

As many have mentioned, you can go into these things with "Linux from scratch" but it's also feasible to do Linux from scratch by copy/pasting commands. Unless you tinker and fail at certain things (hence do it on a vm before doing it to the main system) you won't learn properly. I think the sysadmin approach is "safer" of the two options but to each their own.

u/lycoloco · 3 pointsr/linux4noobs

Sure thing! I completely understand the frustration. Setting up config files seems antiquated...but there are a few very nice things about them.

  1. You can reconfigure the files from any computer with ssh or putty available, and don't have to configure VNC or another screen sharing program to do it

  2. Configuration files are simply text files, so if you need to do a reinstall you can simply back up the necessary files, reload the OS, and reload the configuration files. The more convoluted your setup, the more files you'll need to back up, but at least you know when you reload them your configuration is saved. While this is true of the %appdata% folder on Windows as well, it's still a nice perk I feel.

    The more time you spend with Linux, the more familiar the language will become. Remember that you didn't always speak English (or whatever your native tongue is), but now you can typically do it without thinking. Linux is very similar in that once you learn the words and flags you want to use, it will seem simple.

    If you're looking for a good book to get you started, I can't recommend this one enough: A Practical Guide to Linux: Commands, Editors, and Shell Programming. Here's my description of it from another l4n post:

    It's a great book for a beginner who doesn't want to get a Dummies book that is mostly concerned with the GUI and doing all the same things that you would on Windows or Mac OS, but instead wants to learn about what you can do without a GUI. It's a great reference book as well, containing the man pages for many commonly used and built-in commands. If you're not sure what the man(ual) pages are, they're one of your best resources for information about (most) any command on your system. "man man", in addition to being a great band, is a command that you can run to find out more about the man pages. For a good example that shouldn't overwhelm you, run the command "man cp" and see what all the options for the copy command are. A good way I've heard the man pages explained is that it will not tell you how to use a command, but it tells you the things a command can do. How you use it is up to you!

    Also, I (shamefully) have not done this completely, but if you want to learn about how the core of most any Linux system works, install Arch using their fabulously laid out Beginners Guide
u/arusso23 · 5 pointsr/sysadmin

IMO, you should be familiar with 3 things: Virtualization, Linux and Networking. If you want to be a Windows Admin, definitely look into getting your MCITP too.

For virtualization, I would start with VirtualBox. It's not an enterprise solution by any means, but you'll understand the basic idea and it will allow you to run Linux/Windows/etc... without needing a separate box. And snapshots are great for when you want to try something new. Once you move along, you can try installing VMware server 2.0 (I think it's still free and available). If you find you like virtualization, take a look at VMware vSphere.

For linux, I recommend this book. Personally, I like Debian and Fedora Core, but you should at least know one Red Hat based distro (like Fedora). The book is well written, and has some good examples to get you started.

If you aren't very familiar with networking, you should get your CCNA. It probably wont help you pull much of a bigger salary in it of itself, but it will definitely get your feet wet in the world of networking -- but dont be fooled, it only scratches the surface of networking.

If you're looking to be more windows-centric, you should look at getting your MCITP. Personally, I haven't been able to get through the certification process, but I have skimmed through the topics, and it's definitely worth your time if you're serious about being a Windows admin.

I haven't had any experience with Network+ and Security+ certs, but from the comments I have read on the sysadmin reddit over the past few months, I get the impression they aren't worth the time. YMMV on that one though, and if anyone who has them thinks they are worth it, let me know why I am wrong.

When I was getting my feet wet, I picked up small business clients who were willing to tolerate my growing pains since I came cheap and worked nights/weekends for them. Although it only gave me a limited amount of experience, it allows you to put into practice what you are learning, be it linux or windows. Just be sure and always CYA and backup data/configurations before you do anything you're not familiar with.

Sorry, this may be a little bit more long term than you were hoping for, but hopefully you will find something valuable in it.

u/gawdnfreeman · 2 pointsr/sysadmin

Three esxi servers, each with more than one NIC, and one separate vcenter server is a great starting point. This allows you to tune DRS, HA, and even fault tolerance. Once you get that down, you'll want to be able to tune VMs properly to run most effectively in a virtual environment.

I enjoyed reading these books, though some are "dated" now, the contents are still very relevant. They won't get you anywhere in particular by themselves, but when you combine them with the self-teaching nature of sysadmins I've previously described, these will generously add to your toolset.

HA and DRS deepdive
Sed & Awk

Mastering Regular Expressions. I use rubular.com often.

Pro Puppet

Anything by Bruce Schneier is usually worth your time.

Though I no longer administer a large number of Windows machines, I am a huge fan of Mark Minasi. The Server 2003 book was super helpful in building and maintaining Windows Domains.

I have an old edition of the DNS and Bind book kicking around somewhere.

Understanding the Linux Kernel has largely been useful to me when doing anything "close to the kernel". Not a good beginner's book.

I've never used an apache book, but I enjoyed the Varnish book. This definitely helped me.

Of course, these books don't cover everything, and those listed are relevant to my interests so your mileage may vary. You'll never go wrong teaching yourself new skills though!

EDIT: I forgot about the latest book I've read. I used tmux for a little over a year before purchasing a book on it, and it has improved my use of the program.

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/ccjitters · 2 pointsr/linuxquestions

There are a couple things i'd recommend to start with. First, figure out how you learn best. For me it's physical books. I get bored and distracted with videos and pdf's get forgotten about. I'd definitely getting some decent reference material. Here are some of my favorites:

  • The Python Pocket Reference

  • The Bash Pocket Reference

  • The Linux Pocket Reference

  • The Linux Bible

  • Literally anything by No Starch Press They're excellent books, fun to read and look great on a shelf.


    Kali on a raspberry pi is fine but i would not recommend starting with Kali. It's not a beginners Distro. If you can, i'd recommend picking up a cheap 2.5" hard drive for your laptop and swapping it with the Windows drive, or dual booting works too. Install a linux distro and eat your dogfood. Ubuntu and Linux Mint are great for beginners, with Mint and the cinnamon desktop being very similar to Windows 7.

    Centos or Fedora are also good. Fedora is based on Red Hat Enterprise linux, so it's very similar to what you'd find in an business enterprise environment. Centos takes it further though. It's literally just RHEL without branding or paid support.

    All of these (apart from RHEL) are free and all would be a good jumping off point. The only real difference between them all is the package manager and Desktop environment. Red Hat uses 'yum' while Debian uses 'apt'.

    Once you find one you like start practicing. Nearly all utilities you'll find will have a graphical user interface but the command line is always going to be more extensible/powerful. If nothing else get the Linux and Bash pocket references and test administering your own system. Try using the command line for python instead of IDLE. Learn to reboot/shutdown, install/update/upgrade/search with your package manager, try to make your system faster and document everything you do. EVERYTHING.

    You'll be a pro in no time.

    (I'm serious about the documenting. It's important. If you don't believe me check out some of the stories u/patches765 posts in r/talesfromtechsupport. It's like documentation is his superpower.)
u/speakingcode · 1 pointr/compsci

laptop huh what when i went to school for cs we used punchcards....

but in all seriousness, writing code is about the equivalent of writing text in a text editor. get something w/ decent battery life and comfortable screen size; any modern machine is likely more than enough to run and test all or most assignments from CS courses, save some specialized topics, in which case the univ. probably provides resources you'll need.

what matters more than the hardware is the environment you work in. do yourself a favor, wipe out windows and put a linux distro on it (or dual boot, you big sissy!!); start with ubuntu or fedora if you're new to linux, and deep dive in. force yourself into the command line. A Practical Guide to Linux from Mark Sobell is an EXCELLENT book for learning raw, distro agnostic Linux from the command line/shell perspective (http://www.amazon.com/books/dp/013308504X I have the 2nd edition, I'm sure the 3rd is great).

Learning how to truly use a computer and work w/ the operating system instead of around it is crucial, esp. if you want to go into engineering as you mentioned below. I won't rant any further but when you get into industry you'll be glad you have practical experience w/ *nix operating systems. As far as school goes, it will increase your productivity and workflow, as linux/unix is the environment developed by programmers for programmers to do productive programming first and foremost, and is generally better at everything else too.

-a CS graduate researcher/cloud-computing engineer/full stack developer

u/[deleted] · 18 pointsr/darknetplan

What OS? Linux, of course. When TPB order everything locked down, you don't want to be caught using a Microsoft OS. -- What distribution? The easy path is Ubuntu, with the Cinnamon UI, or LinuxMint 13, when issued (May 2012).

What IDE? There's lots to choose from. My favorite is "geany".

https://en.wikipedia.org/wiki/Geany

For TCP/IP protocol tutorial. Recently updated by Wright:
Stevens, "TCP/IP Illustrated", 3-volume set.

http://www.amazon.com/TCP-IP-Illustrated-Volume-Set/dp/0201776316

On human interface guidelines relevant to programming:

https://en.wikipedia.org/wiki/Human_interface_guidelines

For GNOME 2, see:

http://library.gnome.org/devel/hig-book/stable/

To develop Linux applications:

You are right. You MUST know how to program in C. When others tell you that object oriented programming is the thing, know that you can do object oriented programming in C. Avoid interpreted languages (Python, Java, and others) as a first programming language. Interpreted languages teach bad habits and hid too much of what's going on from you such that debugging becomes difficult to impossible.

However, if all you intend is "casual programming", the Python will do, if you must. It's just not the best choice first a first language if your intent is to become a "professional programmer". I use Python myself; It works for what I need to do quick and dirty.

Definitive, but for experienced programmers:

http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628/ref=sr_1_1?s=books&ie=UTF8&qid=1335197606&sr=1-1

As a tutorial for someone learning a first programming language and how to program from zero:

Perry, "Absolute Beginner's Guide to C", 2ed.
-- I have not read the book, but the ToC looks reasonable for a beginner.

http://www.amazon.com/Absolute-Beginners-Guide-2nd-Edition/dp/0672305100/ref=sr_1_6?s=books&ie=UTF8&qid=1335197606&sr=1-6

OK, you don't want a full CS curriculum, but some topics in discrete mathematics are mandatory. ... Ack! Having looked over the offerings at Amazon, I believe that Epp, "Discrete Mathematics with Applications" may be the best of the lot, but at $187, it is hard to recommend without knowing your intent and interest. The reason I suggest this title is that it looks focused on application to computer science topics. It covers a number of topics that are NOT covered in many of the other titles, enough so that should you use other texts you will have spent more than the $187 that this title includes. JMHO.

http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/ref=sr_1_1?s=books&ie=UTF8&qid=1335199316&sr=1-1

See also: Sedgwick, "Algorithms" -- You'll probably need it sooner than later.

http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X/ref=sr_1_1?s=books&ie=UTF8&qid=1335200153&sr=1-1

Remember that Linux OS? You are going to need some programming tools, right? If you intend to write GUI applications based on the GTK+ toolkit, then install the package "glade" or "glade-gtk". Installing a glade package will suck in over 100 other packages essential to building a GTK based GUI application. Specifying glade to the package manager is just easier that finding and installing all the other necessary parts by hand.

If you are going to do command line based UI programs, then package "build-essentials" should be adequate.

There are some other things to read:

On how to organize, grow and maintain a Linux software development project: Fogel, "Producing Open Source Software"

http://producingoss.com/

You can read it online here, but buy the book too to help support Fogel. He's gotta eat too.

On the culture of writing Open Source Software:

Raymond, "The Cathedral and the Bazaar"

http://www.catb.org/~esr/writings/cathedral-bazaar/

Linux programming is not like Windows programming.
Read and study ESR's TAOP.

Raymond, "The Art of Unix Programming"

http://www.catb.org/~esr/writings/taoup/html/

You can read it online, free. However, buy a hardcopy too. Raymond has to eat too.

Now to get really technical. What interface do you write to?

Kerrick, "The Linux Programming Interface: A Linux and UNIX System Programming Handbook"

http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200/ref=sr_1_1?s=books&ie=UTF8&qid=1335201257&sr=1-1#reader_1593272200

Beginning to focus on GNU style programming:

GNU Coding Standards

https://www.gnu.org/prep/standards/

GNU Coding Standards is more than how to and how much to indent a line or how to set braces. You will get into the topic of Make and Autotools. Make is a program to build complex softare and Autotools is about how to build a package for distribution, the package that any Unix flavor can use; it is not focused on any specific distribution. See also: "configure and make"

Enough! There's more, but I have too much time in this already for today.

[edit: typos]

u/nonpareilpearl · 1 pointr/DIY

Thank you for all the advice! I'm interested in the books that you suggested - I've been building a queue of books to read to help me learn, but most of those are "textbook-y". The one exception is a book I found called Producing Open Source Software, which I heard is good for people looking to join open source projects. I'm trying to find some other books to look at that are "less academic" as well so that I can learn more about programming aside from the fundamentals that I need.

Thank you for the advice about writing code daily. Right now I'm working as a quasi-intern for a freelance iOS developer in my area who is really good teaching people the mechanics of the language on weekends, but during the week I'm not as industrious (I usually work with him for a total of 6-8 hours on Sat/Sun).

Ultimately I want to work for a company like SpaceX or Scaled Composites, so I definitely need to learn languages such as C++ or similar... however, most of what I do right now (aside from iOS) is just HTML/CSS. Is there a benefit to trying to find an open source project to hop in on that is written in C++ (again, or similar) or is this something where any open source project is better than none?

I suppose it's worth mentioning that I started teaching myself Python, I let some of that fall to the wayside because of coursework and I needed the extra time for that, but now that the semester is over I think I could start that up again. I've actually been trying to write a small command line game with it :)

u/PoetheProgrammer · 1 pointr/linux

If I were you, I'd go ahead and start with Assembly Language: Step by Step (Programming with Linux) it's not really what you are asking for but it will show you how to write assembly language (thus showing you how C really works), it will show you how the Linux API works at the lowest levels and interfacing with Linux/The Standard C Library.

Pick up K&R while you're at it despite your claim it's not recent; it's a good reference. Once you can write some simple assembly programs, rewrite them in C. Then do something that mixes the two (like write your own functions in assembly and then use C for program flow.)

After that, write a bootloader and boot Linux (they aren't as hard as you think if you aren't trying to rewrite grub). Once you can boot Linux, write your own (very simply) hello world multiboot kernel. Use that bootloader to jump to it. Add a keyboard and screen driver to it (again not as hard as you think just to do basic stuff.) Then play around with your hardware (hard disks is a good starting point) and learn how to interface with them at a bare-bones level (since your interested in audio how about trying to send out simple sounds to your onboard sound using your own kernel.)

At that point your problem with C will be gone and you will be comfortable writing kernel code. Some people might talk down on this answer but with what you want to do it's worth toughing it out if you want to quickly get comfortable with C and kernels (you might have a few days of doubt though friend, suck it up!)

At this point find a project (ALSA/Pulseaudio) and start fixing bugs for them (there is usually a ridiculously easy list of bugs on larger projects that will help get you used to the codebase.) At the same time get the Linux source and write some basic modules, while also attempting to fix some of the kernels super easy bugs. After a year or so of doing that you should not only be good with the programming aspect (and you'll know how to learn codebases as well) you will also learn a lot about how the FOSS community works (and the do's and don'ts of commiting to projects.)

Best of luck!

edit here's a link to the book

https://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025

u/AiwendilH · 2 pointsr/linux4noobs

Ugh...afraid I am not that much of a help there...too old ;) Lots of this actually comes from DOS (you know, the OS of microsoft before windows) programming books and books about the linux kernel in version 2.0 ;) So really old and probably not available anymore. And both had nothing to do with virtualization...just, well DOS was no multitasking system. Direct hardware access and even manipulating the memory mapping registers were common back then for normal programs (as only one program could run at a time...you could do whatever you wanted, nothing else could get in your way). All this is pretty useless knowledge nowadays...but it helped a lot to know the basics to somewhat understand "modern" stuff like virtualization...it's more just learning how it was done as the basics are still in large parts the same.

But afraid that means I have no clue about a modern book that would teach these topics nicely. (not to mention that my first books about that hardware stuff were still in German...only two years learning English at school were not enough back then to understand English programming books ;))

I heard some good about Linux kernel development but afraid didn't read it...so take with a grain of salt (And this is really more if you are interested how the kernel does things and how hardware access is really done, it's not a book that will help you much with "ordinary" daily work on a linux system.

Afraid I am not aware of any general purpose book for linux at all...there must be some for sure but afraid I always just looked into kind of specialized books...so can't help there at all.

A slightly higher level book that helped me a lot to deal with linux was linux application development (although I read it in the first edition..and german translation back then. In this case I have no excuse for that...by that time I should have been good enough in English to read the original..so probably just some teenager laziness). But this one is really good, leads you through the whole process of writing your own shell...requires basic C knowledge though.

What brings up something interesting...even if not linux related directly...any book about learning the basics of C will also help a lot with linux. I see that a bit different than learning a language like python for example..while learning python will of course also help you understanding linux better in some cases learning C gets you really dirty. It forces you to learn some basics about hardware...most other languages "shield" you there (exception c++ which is also very lowlevel and if you ask me the more interesting language to learn...but if you ask Torvalds he probably would have some strong words of disagreement there. So for the linux kernel learning C is better)

But overall...really better make a new question about this and ask a wider audience...afraid I am just the wrong person to give any good suggestions there.

u/chemicalcomfort · 2 pointsr/cscareerquestions

The easiest way to get into open source is find a project you actually use and take a look through the source code. So many projects could use more/better documentation and eventually someone will take notice if you start making additions. Once you're comfortable with the code you can start making commits but be sure to do your best to try to stay true to the current code paradigms and style.

As for doing a personal project the best way is to figure out something you want to learn more about or making a program that somehow improves your life. The important part is to find something you can be passionate about for an indefinite amount of time. If you get bored with it you're not going to want to work on it.

Want to learn more about databases? Make a program that utilizes a sql flavor of some kind. What to learn more about sockets? Make an http server. Etc. etc.

This book was a wealth of knowledge in regards to doing open source http://www.amazon.co.uk/dp/0596007590

u/DoUHearThePeopleSing · 2 pointsr/ethereum

That's a good way to do it. And I'm sorry for that guy who said about banning - it's an assholly thing to do. As you can see in the other thread, a lot of people (if not the most) argued with him.

Getting whitepaper ready is a good first step. What you can also do is check out some books about software design. The most important ones I'd say are:

https://gettingreal.37signals.com/

http://www.amazon.com/Mythical-Man-Month-Anniversary-Software-Engineering-ebook/dp/B00B8USS14/

http://www.amazon.com/Producing-Open-Source-Software-Successful/dp/0596007590/

There are also essays by Paul Graham (google who he is if you don't know), especially this one:

http://paulgraham.com/start.html

As for publishing the whitepaper - by all means go for it. If you don't want to share it publicly at first, you can send it to selected members of community, or to people who you noticed that are quite sensible within the community.

As for the NDA-s, and non-competes, I guess people explained to you that nobody will do these kinds of things. That is because inexperienced people often have very basic ideas, and nobody wants to then be tied down and exposed to lawsuit because of it.

Imagine that you sign an nda or a non-compete as an architect, and you discover that the guy's brilliant idea is for a building with just round windows. It's really not that novel, and you'd then have to explain to the guy why it isn't that novel. And be exposed to lawsuits for years to come, whenever you make round windows.

Somehow, nobody has these kinds of ideas with architecture, but every other day someone comes to software people with something like this.

Finally, when it comes to holding back your idea... Sometimes (very rarely) it is beneficial, but most of the times it's not. I remember the people working on the first web email system - hotmail.com. These guys were secret as fuck, afraid of someone beating them to the market. But on the other hand, they were already experienced in building systems, and had a team built and a budget.

There's a chance somebody else has an exact same idea, and they are working on it at the same time as you do. And the thing is - the more relaxed they are about sharing the idea, the faster they will go. And also - if anyone ever decides to "steal" your idea once you publish it, you'll be way ahead of them. Because by the time they see your idea, you'll be already way ahead of them in terms of gaining support for your own.

Good luck!

u/joe0418 · 6 pointsr/compsci

I'd recommend reading Practical Programming: An Introduction to Computer Science Using Python. I would read each chapter two or three times, and supplement it with online help. Do all the exercises at the end. If you don't understand something, feel free to ask in compsci (or send me a private message!).

I always use this book when trying to teach someone the basics of programming. Python is very easy to learn, relevant, and powerful. The book is brief, well written, and it'll semi introduce you to the command line (which will become your best friend).

You should try and build yourself a Linux computer to learn programming on. If you have a mac, that would be an OK substitute. I would use windows as a last choice- it can be a decent development environment but requires lots of software to set up. Programming can certainly be done in windows, but Linux will offer you a decent development environment right out of the box. I'd recommend Ubuntu for beginners. Macs come with a lot of the same facilities that linux comes with (python and other languages pre-installed, a relevant command line environment, etc), windows comes with almost none. If you study computer science in college, you'll use lots of linux- a head start will help.

For a text editor, try and become familiar with vim or emacs, both of which come with most linux distros. If you find them too overwhelming, you could use a graphical editor instead and still be ok. On the mac, you can get macvim. As a programmer, I regret my lack of knowledge in vim. If you're on windows, just stick with something like notepad++.

If you become an ace at python, and really enjoy the concepts, The Linux Programming Interface will take you a (very) long way. It may seem overwhelming, but it covers many deep aspects of computing. Learning C will really help you the most in the long run (because of it's intimate relationship with the operating system and computer memory), but it is not an easy beginner language. If you don't understand the concepts in C (may be difficult from just a book), you may try your hands at either C# or Java (as they're both very widely used).

Keep in mind that no one becomes a programmer (or hacker, if you will) over night. I'm in CS grad school, and started programming over 5 years ago- it's just now starting to all make sense. The amount of conceptual information in computer science is tremendous, and it will take a long time to master. Welcome to the rabbit hole =)

P.S. - Learn to type the correct way without looking at the keyboard. Speed isn't that big of an issue so long as you can hit a consistent ~60 wpm.

u/varelsa · 15 pointsr/linux

You need a strong grasp of C programming, I'd recommend:

1: Join the Linux kernel mailing list: http://www.tux.org/lkml/

2: Read a book like this: http://www.amazon.com/Programming-4th-Edition-Developers-Library/dp/0321776410/ref=sr_1_sc_4?ie=UTF8&qid=1415153633&sr=8-4-spell&keywords=Crogramming

3: This is a cool site: http://www.learn-c.org/

Cultural immersion is also important, I would find relevant channels on irc.freenode.net and make friends there where you will find amazing free support from the community.

Once you're a little more comfortable in the language I would start trying to read the kernel source code, or maybe try to fix bugs that are posted about any programs that you are interested in learning more about.

u/istarian · 7 pointsr/linuxmint

You just have to jump in and do stuff. Using it as your primary OS or always for a particular task (e.g. always use it for internet browsing) is a good way to become familiar with a linux desktop environment.

As for the command, whenever you want to:

u/mikeeusa00 · -1 pointsr/redhat

Yes one can, in the USA.

Gratuitous licenses are revocable. Always have been, and currently are as-well.
If you want to secure terms you must pay for them.


David McGowan Esq. made a correct statement of the law:

>David McGowan, Professor of Law, University of Minnesota Law School:

>"Termination of rights

>[...] The most plausible assumption is that a developer who releases code under the GPL may terminate GPL rights, probably at will.

>[...] My point is not that termination is a great risk, it is that it is not recognized as a risk even though it is probably relevant to commercial end-users, accustomed to having contractual rights they can enforce themselves.


----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----

Lawrence Rosen Esq. got it right the first time:
( https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876 )

>p46 "As long as the project continues to honor the terms of the licenses under which it recieved contributions, the licenses continue in effect. There is one important caveat: Even a perpetual license can be revoked. See the discussion of bare licenses and contracts in Chapter 4"
--Lawrence Rosen

>p56 "A third problem with bare licenses is that they may be revocable by the licensor. Specifically, /a license not coupled with an interest may be revoked./ The term /interest/ in this context usually means the payment of some royalty or license fee, but there are other more complicated ways to satisfy the interest requirement. For example, a licensee can demonstrate that he or she has paid some consideration-a contract law term not found in copyright or patent law-in order to avoid revocation. Or a licensee may claim that he or she relied on the software licensed under an open source license and now is dependent upon that software, but this contract law concept, called promissory estoppel, is both difficult to prove and unreliable in court tests. (The concepts of /consideration/ and /promissory estoppel/ are explained more fully in the next section.) Unless the courts allow us to apply these contract law principles to a license, we are faced with a bare license that is revocable.
--Lawrence Rosen

>p278 "Notice that in a copyright dispute over a bare license, the plaintiff will almost certainly be the copyright owner. If a licensee were foolish enough to sue to enforce the terms and conditions of the license, the licensor can simply revoke the bare license, thus ending the dispute. Remeber that a bare license in the absence of an interest is revocable."
--Lawrence Rosen

Lawrence Rosen - Open Source Licensing - Sofware Freedom and Intellectual property Law



>p65 "Of all the licenses descibed in this book, only the GPL makes the explicity point that it wants nothing of /acceptance/ of /consideration/:
>...
>The GPL authors intend that it not be treated as a contract. I will say much more about this license and these two provisions in Chapter 6. For now, I simply point out that the GPL licensors are in essentially the same situation as other open source licensors who cannot prove offer, acceptance, or consideration. There is no contract."
--Lawrence Rosen

----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Some notes:
A license without an attached interest is revocable in the US (other countries have different laws, which is why many OSS repos kept out of the US in the past, it is also why the FSF is both a 501(c)(3) charity and also requires copyright assignment to them for any contribution they accept (otherwise an author who was still the copyright owner of the code could rescind the license to the code)).

Opensource friends like to bring up the recent district court decision in california to try to argue the the GPL is a contract. (It's also interesting that they started adding CoC's right after said decision, to push out the men who created OpenSource) They are wrong. Acquiescing to a preexisting duty is insufficient for consideration. They like to quote this part:

>"Not so. The GNU GPL, which is attached to the complaint,provides that the
Ghostscript user agrees to its terms if the user does not obtain a commercial
license" (Artifex v. Hancom, Case No.16-cv-06982-JSC, page 4 line 17)


This is false on its face.

The GNU GPL contains no such language.

The /business agreement writing/ that Artifex wrote up and posted on its webpage includes such language. The court here is conflating "The GNU GPL" with the writing Artifex published on it's webpage. It is an error on the courts case. A typo by whomever who drafted the decision perhaps (conflating Artifex's contract language with the GPL itself).

The court goes on to allow Artifex to recover on either breach-of-contract grounds (for the amount a commercial license is worth) OR to go forward with a statutory copyright infringement action. If the GPL alone was a contract, there would simply be two different state-law breach of contract theories to pursue (breach of the "business offer" writing or breach of the GPL "contract", and the court would dispose of the case that way).

u/mikeeusa · 0 pointsr/redhat

>GPL can allow lawsuits for violation of its terms. Making it revocable at that point, but I have never seen this avenue.

For paid-for licenses, that is true: the only way to revoke is via the terms, should they exist (if they do not exist, that's a different story). This is why companies prefer paid copyright-license-contracts over free bare-licenses. A bare license can be revoked at the issuers will.

It's basic property law, you learn it in property 101, contracts 101.
Furthermore following a pre-existing duty is not valid consideration for a contract.
Thus "obeying the license" is not consideration in this instance: nothing allows you to use/modify/etc the property other than the allowance by the issuer via the license.

The GPL doesn't allow anything; it's the law that allows. The GPL's "give us the source (of derivative works)" provisions aren't even enforceable under US law since it alone is not a contract and specific performance is thus not available.


----
For your study:
( https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876 )

>p46 "As long as the project continues to honor the terms of the licenses under which it recieved contributions, the licenses continue in effect. There is one important caveat: Even a perpetual license can be revoked. See the discussion of bare licenses and contracts in Chapter 4"
--Lawrence Rosen

>p56 "A third problem with bare licenses is that they may be revocable by the licensor. Specifically, /a license not coupled with an interest may be revoked./ The term /interest/ in this context usually means the payment of some royalty or license fee, but there are other more complicated ways to satisfy the interest requirement. For example, a licensee can demonstrate that he or she has paid some consideration-a contract law term not found in copyright or patent law-in order to avoid revocation. Or a licensee may claim that he or she relied on the software licensed under an open source license and now is dependent upon that software, but this contract law concept, called promissory estoppel, is both difficult to prove and unreliable in court tests. (The concepts of /consideration/ and /promissory estoppel/ are explained more fully in the next section.) Unless the courts allow us to apply these contract law principles to a license, we are faced with a bare license that is revocable.
--Lawrence Rosen

>p278 "Notice that in a copyright dispute over a bare license, the plaintiff will almost certainly be the copyright owner. If a licensee were foolish enough to sue to enforce the terms and conditions of the license, the licensor can simply revoke the bare license, thus ending the dispute. Remeber that a bare license in the absence of an interest is revocable."
--Lawrence Rosen

Lawrence Rosen - Open Source Licensing - Sofware Freedom and Intellectual property Law



>p65 "Of all the licenses descibed in this book, only the GPL makes the explicity point that it wants nothing of /acceptance/ of /consideration/:
>...
>The GPL authors intend that it not be treated as a contract. I will say much more about this license and these two provisions in Chapter 6. For now, I simply point out that the GPL licensors are in essentially the same situation as other open source licensors who cannot prove offer, acceptance, or consideration. There is no contract."
--Lawrence Rosen

----
>David McGowan, Professor of Law, University of Minnesota Law School:

>"Termination of rights

>[...] The most plausible assumption is that a developer who releases code under the GPL may terminate GPL rights, probably at will.

>[...] My point is not that termination is a great risk, it is that it is not recognized as a risk even though it is probably relevant to commercial end-users, accustomed to having contractual rights they can enforce themselves.

u/samort7 · 257 pointsr/learnprogramming

Here's my list of the classics:

General Computing

u/rupturefunk · 1 pointr/C_Programming

I'd recommend Programming in C for a beginner. It goes through all the basic stuff in great detail with plenty of good exercises, and it's well written and easy to read too.

Honorable mention to Pointers on C, a little more advanced, but definitely the most useful C book imo. Can be hard to find a reasonably priced copy but well worth it if you can.

K&R (The C Programming Language) is oft recommended but I found it impenetrable when I was starting out. There are better options these days for more or less all experience levels.

u/nerd4code · 1 pointr/learnprogramming

I recommend you pick an architecture that you can work in and see somewhat immediate results from; x86 is a good idea because it's very well supported and just about every question about it has been answered somewhere. You'll probably be working on a simulator otherwise, in which case you can run into all sorts of other fun problems, and you'll likely end up learning stuff that doesn't apply too terribly well to how things are actually done in the wild.

Dialect-wise: If you're doing standalone assembly or something for use only on Windows/DOS platforms, then NASM or MASM is your best bet. If you want your assembly code to interface more closely with, or be embedded inline within C code in anything remotely resembly a GNU compiler (including GCC, ICC, and Clang, most notably), then GAS is your best bet.

As was mentioned, GAS uses a different syntax from Intel's standard one (different operand orderings, different mnemonics, pretty much everything's different for some fucked-up reason) so you'll see mostly NASM/Intel-like syntax in plaintext (tutorials and the like) on the Web and GAS in source code.

Can't recommend you towards any good resources, although when I was a wee bairn I learned 16-bit x86 assembly from Jeff Duntemann's book (16-bit DOS version, which you can use in DOSBOX or a run of DOS's DEBUG; 32-bit Linux version, which you can use in 32- or 64-bit Linux provided you use the -m32 flag to compile). NASM's manual may still have a decent instruction reference in it (check for older versions, because it was quit handy), and Intel's Software Developer's Manuals are the go-to reference for their backwards-compatible shitheap of an ISA once you're familiar with it.

u/RealityMan_ · 1 pointr/sysadmin

I just saw you said low on funds, but if you have a birthday or something coming up these two books have been great resources for me, and others that have taken a dive into it.

https://www.amazon.com/Linux-Bible-Christopher-Negus/dp/111821854X

https://www.amazon.com/Linux-Command-Shell-Scripting-Bible/dp/111898384X/ref=pd_sbs_14_img_1?_encoding=UTF8&psc=1&refRID=J9RW2JJ25KF0HEW2DDNK

One thing I'd say is DON'T BE DISCOURAGED. There's a lot to Linux, and it'll feel like you are drinking through a fire hose sometimes with concepts, everyone has been there, and I'm still very much there. In addition to reading a butt load, one thing that helped me take the edge of was getting a box up with something I'd use. My personal pet project back in the day was setting up a redhat instance and run a ventrilo server. It helped me learn things like security, package management, patching, getting real comfortable with things like awk and sed. I didn't expose it to the internet except for a few whitelisted IPs but it kept me learning for a long time, and made it fun.

u/idboehman · 2 pointsr/devops

I'd make sure I have a really solid understanding of systems and networks, e.g. how Linux works. This book seems like a great overview and I love No Starch Press. There's also this book which is used by Carnegie Mellon's introductory systems course, though that might be a bit too deep to dive into straight away, more like something that could be used if you want a deeper understanding of how systems work. You should have some familiarity with C just as foundational knowledge. The guy who wrote Learn Python The Hard Way also wrote an intro to C, Learn C the Hard Way. He's added a lot more material than the last time I checked (~Dec 2012) which looks like it covers a lot of topics so it would be great to work through it.

Some more technical books on this subject that are well regarded and can be used as reference books are Advanced Programming in the Unix Environment, Unix Network Programming, and The Linux Programming Interface

Also in addition to Python I'd also suggest learning some Ruby (Practical Object-Oriented Design in Ruby and Programming Ruby 1.9 & 2.0 are two resources I'd recommend), it's what Chef is/was implemented in and is fairly nice to work with.

u/getouttatown · 2 pointsr/linux

I disagree.. you should definitely learn red hat/fedora/centos in terms of network configuration files, other config files etc etc if you want to have a good knowledge of server level/enterprise level linux. Red-hat based distros are MUCH more widely used for server implementations than debian or slackware.. But that said definitely learn the debian way too. Linux in a Nutshell is a good back, or this book is also quite good: http://www.amazon.com/Practical-Guide-Commands-Editors-Programming/dp/0131478230/ref=sr_1_16?ie=UTF8&s=books&qid=1250956616&sr=8-16 -- Another good one is the Linux Quick-Fix Notebook- excellent excellent book

u/StuartPBentley · 1 pointr/lua

I second Programming in Lua as a recommendation - it is the book to learn Lua, written by the main architect behind the language itself (Roberto Ierusalimschy). The first edition is available online, but I personally recommend at least the second edition (of which I personally have a signed copy) - the fourth edition, the latest, sounds like a good pick (the description says it's been completely re-organized, based on Roberto's experience from decades of teaching Lua).

As for an environment to learn it in, I recommend Cloud9, which gives you an entire Linux integrated development environment for free (you may also want to pick up the Linux Pocket Guide, which is a good reference for learning how to get around on the command line).

u/LtGerome · -3 pointsr/opensource

I am an actual lawyer.

In the USA a license is revocable absent an interest.
An interest generally means you paid for the license, are in a contract with the grantor (paid good consideration for the license) etc.
You can "retroactively" rescind the GPL from a non-paying licensee. They use your property at your /pleasure/. ("Retroactively" is used colloquially here: their past non-infringing actions are not suddenly infringing, their future actions using the same code would be since you have rescinded their license)

Your "understanding" is wishful thinking and is wrong.
Your /game plan/ is to throw yourself on the mercy of the court and beg them not to enforce the owners legal rights under an equitable defense (Basically "It's not fair!"). You can do this in virtually any licensor-licensee case, and it IS attempted in virtually every such case where the licensee doesn't have a leg to stand on legally.

(Things are different in non-US jurisdictions, so the second option of "defense" is that violators host outside of the US: where hosts simply do not care about US law)

But don't take my word for it. Take the word of some lawyers who attach their actual name:

( https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876 )
>p46 "As long as the project continues to honor the terms of the licenses under which it recieved contributions, the licenses continue in effect. There is one important caveat: Even a perpetual license can be revoked. See the discussion of bare licenses and contracts in Chapter 4"
--Lawrence Rosen

>p56 "A third problem with bare licenses is that they may be revocable by the licensor. Specifically, /a license not coupled with an interest may be revoked./ The term /interest/ in this context usually means the payment of some royalty or license fee, but there are other more complicated ways to satisfy the interest requirement. For example, a licensee can demonstrate that he or she has paid some consideration-a contract law term not found in copyright or patent law-in order to avoid revocation. Or a licensee may claim that he or she relied on the software licensed under an open source license and now is dependent upon that software, but this contract law concept, called promissory estoppel, is both difficult to prove and unreliable in court tests. (The concepts of /consideration/ and /promissory estoppel/ are explained more fully in the next section.) Unless the courts allow us to apply these contract law principles to a license, we are faced with a bare license that is revocable.
--Lawrence Rosen

>p278 "Notice that in a copyright dispute over a bare license, the plaintiff will almost certainly be the copyright owner. If a licensee were foolish enough to sue to enforce the terms and conditions of the license, the licensor can simply revoke the bare license, thus ending the dispute. Remeber that a bare license in the absence of an interest is revocable."
--Lawrence Rosen

Lawrence Rosen - Open Source Licensing - Sofware Freedom and Intellectual property Law



>p65 "Of all the licenses descibed in this book, only the GPL makes the explicity point that it wants nothing of /acceptance/ of /consideration/:
>...
>The GPL authors intend that it not be treated as a contract. I will say much more about this license and these two provisions in Chapter 6. For now, I simply point out that the GPL licensors are in essentially the same situation as other open source licensors who cannot prove offer, acceptance, or consideration. There is no contract."
--Lawrence Rosen

----
>David McGowan, Professor of Law, University of Minnesota Law School:

>"Termination of rights

>[...] The most plausible assumption is that a developer who releases code under the GPL may terminate GPL rights, probably at will.

>[...] My point is not that termination is a great risk, it is that it is not recognized as a risk even though it is probably relevant to commercial end-users, accustomed to having contractual rights they can enforce themselves.

u/hust921 · 2 pointsr/commandline
  • ALOT more tools and options available compared to GUI.

  • Remote management: This also play perfectly together with automation.
  • Automation: Just the fact that you can redirect output/input to or from other, completely independent programs, files or devices is a so powerful.
    Also making scripts to complete long tedious tasks that you may want to run multiply times. Say: every time you boot or run a specific program. Or if you are managing multiple computers, this comes very handy.

    I great way to start taking full advantage of the commandline is by learning the linux tools and how to use them. Also learning a scripting language is a natural step to becoming comfortable with the commandline.

    The Linux Documentation Project is a really good resource.
    http://www.tldp.org/guides.html

    Bash scripting:

    http://www.tldp.org/LDP/Bash-Beginners-Guide/html/index.html

    http://www.amazon.com/books/dp/1118004426 (Great resource for both the tools and scripting.)
u/InconsiderateApe · 3 pointsr/linux

I always liked Sobells book "A Practical Guide to Linux Commands, Editors, and Shell Programming"

https://www.amazon.com/Practical-Guide-Commands-Editors-Programming/dp/0134774604/ref=dp_ob_title_bk

For programmers, "The Linux Programming Interface" is excellent.

http://man7.org/tlpi/

but read "The C programming language" first, and possibly "Modern C" as well.

"The little book about OS development" is great if you want a technical book about the inner workings of a OS

https://littleosbook.github.io/

In general, older books can be good, especially if they are about the lower level stuff that is common for all distributions, like GNU tools, programming aspects and OS theory / POSIX.

For Debian, "The Debian Administrator's Handbook" is good

https://debian-handbook.info/

For Arch, the Arch wiki is invaluable

https://wiki.archlinux.org/

u/postmodern · 1 pointr/programming

Yes, because browsers "run" webpages inside of sandboxes, where performance and security are critical. This is similar to how the kernel runs userspace programs. Think of the DOM and various JavaScript functions as syscalls. Browsers also contain their own memory manager similar to Virtual Memory; except with Garbage Collection. The various obscure file formats browsers have to support (VRML) are like executable formats that kernels support (COFF). Browsers support a variety of network protocols (TFTP, FTP, HTTP 1.0/1.1, Web Sockets and now SPYDY). Browsers also need to support plugins and provide an internal API for them to hook into. Finally, FireFox is 9.23M lines of C++/C/JavaScript which brings it close to Linux's 16M lines of C.

Kernels are really not that mysterious or complex. If your interested in learning about the architecture of the Linux Kernel, checkout Linux Kernel Development by Robert Love.

u/TextileWasp · 1 pointr/IWantToLearn

How much time do you have?
How much do you know related to low-level hardware and how things work close to the “metal”?

You can get a decent understanding by googling/looking at blogs that try to approach this subject. There are also a couple of book that are free to read on github.

If you want to go really deep I recommend a book https://www.amazon.com/Understanding-Linux-Kernel-Third-Daniel/dp/0596005652
Although it’s pretty old and refers to 2.6 kernel it’s one of the best books I’ve ever seen if you’re interested in the Linux Kernel (booting included).
After you learn/come across some of the fundamental notions explained in this book it’s going to be easier to grasp and understand other more advanced material or even look at the kernel source code yourself.

u/fuzzyfuzz · 18 pointsr/linuxadmin

I have the UNIX and LINUX System Administration Handbook It's awesome and has a pirate boat on the front, so you know it's good. It's great for best practices type stuff, and there's a little bit of sysadmin humor mixed in.

I also have the Linux Command Line and Shell Scripting Bible which is good for CLI reference.

Other than that, you can find a ton of stuff on the web. Is there anything in particular you are looking for?

u/Righteous_Dude · 2 pointsr/CompTIA

Probably the new versions of the exam-prep books will be published in January or February.

I took the beta version of the new exam during October, and I'm pretty confident that I passed it.

Some of my preparation steps were:

(0) I had one of my PCs that already had Ubuntu 18.04 on it, on which I could practice some commands (I later put CentOS 7 on that PC instead). You can also get pre-built VMs from osboxes.org which you can run in VirtualBox. Or you could download an ISO, burn that to a DVD-R, create an empty VM, and practice the installation process.

(1) I learned many commands and their command-line options from "Linux Pocket Guide - Essential Commands, 3rd edition" by Daniel Barrett published by O'Reilly. I had heard that the current CompTIA Linux+ exams want you to know many command-line options and what they do.

(2) I learned topics for the current version of the exam from "LPIC-1 Study Guide, 4th ed." by Christine Bresnahan and Richard Blum, published by Sybex. See also my post where I evaluated books to prepare for the current version of the exam.

(3) I downloaded the PDF with the beta exam objectives

(4) For some topic areas that are on the new exam and not on the current exam, I read the chapters in this book by Sander Van Vugt about the Red Hat certification exams to get a basic understanding of those topics and learn the main commands for those topics. I liked that book; it has short chapters and is written in an easy style.

(5) For some things listed on the beta exam objectives, I also looked at the 'man' pages and read the Wikipedia articles about those things.

(6) I had previously passed the Network+ exam, and I think my understanding of networking helped with some of the questions on the beta exam.

(7) I registered for a free account at LinuxAcademy.com, and one of the courses available at the free level was named "Git Quick Start" (or something like that), which helped me prepare for the Git-related questions on the beta exam.

u/mikeeusa0 · -1 pointsr/opensource

Some decisions I have made regarding my GPC-Slots 2 game:


I had chosen, as was my want, to rescind the license I extended from a
few choice individuals. I can do this because GPC-Slots 2 is my
copyrighted work. I built it. I never transferred the copyright over to
anyone.


The individuals are:
"JohnDoe" from 8chan (he knows who he is)
comphacker from here, reddit (if he violates, I'll know who he is after
the subpoenas during discovery)
Leigh Honeywell
Alex "Skud" Bayley
the "Geek feminist" collective (I believe they are identifiable, and a
small group, so no harm using this closed-class identification)


I will continue to rescind the license from anyone who adds a "Code of
Conduct" anywhere near my code (to "fight sexism".). I wholeheartedly
/support/ sexism, as-long as it is not against men. Since men are now
being assaulted as thanks for their ceaseless decades-long work on
opensource by people who did not put in the time, men should /support
sexism/ by revoking license to their gratis licensed copyrighted code
from any project that adds a "Code of Conduct".


--MikeeUSA--
(electronic signature)


----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
----- ----- ----- ----- ----- -----
Some notes:
A license without an attached interest is revocable in the US (other
countries have different laws, which is why many OSS repos kept out of
the US in the past, it is also why the FSF is both a 501(c)(3) charity
and also requires copyright assignment to them for any contribution they
accept (otherwise an author who was still the copyright owner of the
code could rescind the license to the code)).


Opensource friends like to bring up the recent district court decision
in california to try to argue the the GPL is a contract. (It's also
interesting that they started adding CoC's right after said decision, to
push out the men who created OpenSource) They are wrong. Acquiescing to
a preexisting duty is insufficient for consideration. They like to quote
this part:


\> "Not so. The GNU GPL, which is attached to the complaint,provides that
\> the
Ghostscript user agrees to its terms if the user does not obtain a
commercial
license" (Artifex v. Hancom, Case No.16-cv-06982-JSC, page 4 line 17)


This is false on its face.


The GNU GPL contains no such language.


The /business agreement writing/ that Artifex wrote up and posted on its
webpage includes such language. The court here is conflating "The GNU
GPL" with the writing Artifex published on it's webpage. It is an error
on the courts case. A typo by whomever who drafted the decision perhaps
(conflating Artifex's contract language with the GPL itself).


The court goes on to allow Artifex to recover on either
breach-of-contract grounds (for the amount a commercial license is
worth) OR to go forward with a statutory copyright infringement action.
If the GPL alone was a contract, there would simply be two different
state-law breach of contract theories to pursue (breach of the "business
offer" writing or breach of the GPL "contract", and the court would
dispose of the case that way).


----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
----- ----- ----- ----- ----- -----


David McGowan Esq. made a correct statement of the law:


\> David McGowan, Professor of Law, University of Minnesota Law School:


\> "Termination of rights


\> [...] The most plausible assumption is that a developer who releases
\> code under the GPL may terminate GPL rights, probably at will.


\> [...] My point is not that termination is a great risk, it is that it
\> is not recognized as a risk even though it is probably relevant to
\> commercial end-users, accustomed to having contractual rights they can
\> enforce themselves.


----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
----- ----- ----- ----- ----- -----


Lawrence Rosen Esq. got it right the first time:
(
https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876
)


\> p46 "As long as the project continues to honor the terms of the
\> licenses under which it recieved contributions, the licenses continue
\> in effect. There is one important caveat: Even a perpetual license can
\> be revoked. See the discussion of bare licenses and contracts in
\> Chapter 4"
--Lawrence Rosen


\> p56 "A third problem with bare licenses is that they may be revocable
\> by the licensor. Specifically, /a license not coupled with an interest
\> may be revoked./ The term /interest/ in this context usually means the
\> payment of some royalty or license fee, but there are other more
\> complicated ways to satisfy the interest requirement. For example, a
\> licensee can demonstrate that he or she has paid some consideration-a
\> contract law term not found in copyright or patent law-in order to
\> avoid revocation. Or a licensee may claim that he or she relied on the
\> software licensed under an open source license and now is dependent
\> upon that software, but this contract law concept, called promissory
\> estoppel, is both difficult to prove and unreliable in court tests.
\> (The concepts of /consideration/ and /promissory estoppel/ are
\> explained more fully in the next section.) Unless the courts allow us
\> to apply these contract law principles to a license, we are faced with
\> a bare license that is revocable.
--Lawrence Rosen


\> p278 "Notice that in a copyright dispute over a bare license, the
\> plaintiff will almost certainly be the copyright owner. If a licensee
\> were foolish enough to sue to enforce the terms and conditions of the
\> license, the licensor can simply revoke the bare license, thus ending
\> the dispute. Remeber that a bare license in the absence of an interest
\> is revocable."
--Lawrence Rosen


Lawrence Rosen - Open Source Licensing - Sofware Freedom and
Intellectual property Law

u/ewiethoff · 2 pointsr/learnprogramming

Congratulations for deciding to learn Python! A few thoughts:

  1. Don't worry for now. :-) Just tell yourself a tuple is a Python list without append, count, extend, etc. methods. Just tell yourself a lambda is a function without a name. You can fill in your understanding later.

  2. What Python book are you using? Maybe it's too simple for you. Finish that book, then head for one by Alex Martelli: Python in a Nutshell. Unfortunately, the Nutshell book is quite old by now. So borrow it from the library or get it used cheap. Martelli is a much deeper teacher than most out there.

  3. I think Python's mathier than most other popular languages out there, and it has sparked me to learn more math. I have a BS in engineering with 8 semesters of math plus all the extra math that's taught in the engineering courses, but not the type of courses which mention "tuple" or "lambda." So I read cheap math books for pleasure. I've been getting a lot out of An Introduction to Algebraic Structures. It doesn't happen to mention the words "tuple" or "lambda," but it does go into mappings, ordered pairs, operations, and other stuff which help my Python head explode happily.

    Edit to clarify 1): Just tell yourself a tuple is an immutable Python list without append, count, extend, etc. methods.
u/arnulfslayer · 1 pointr/programming

The tutorials linked at the top-level README of the repo are great. If you want more detail, I'd recommend the books:

u/rzzzwilson · 3 pointsr/learnpython

I like Dave Beazley's book, though it may be a little tough for a noob as it's a real reference. The beginning does have a quick introduction to python, but it doesn't try to teach python. The rest of the book is a reference for many of the library modules.

Another one to consider is Doug Hellmann's book. If you like his online Python module of the week site you'll like the book.

Both of the above books are references to using the library modules. Once you know the base language this is the sort of reference you need. If you are still learning base python then you need some other reference until you are ready for books like the two above. The nice thing about Amazon is that you can download a free e-book sample before buying, though it's probably wise to do a final check of the paper version before buying as an e-book can be very different from the paper version (usually worse, but who knows). The Hellmann e-book is particularly bad in this respect.

u/_dsb_ · 4 pointsr/asm

Apple actively discourages people from avoiding their frameworks and linked libraries; there is a reason things like MUSL and µClibc don't exist on OS X. System calls on OS X do change signature without warning, so what's the point? You can't get at the system without using a dynamically linked standard library or keeping to a very small set of [so far] stable system calls like 'open'. Similar problem as Windows and its ever-present DLLs.

The one area where assembly is nice on Mac is in optimization within a C, Pascal, etc program. Because the ISA is x86-64 nowadays, if you don't care about supporting older PPC or x86 archs, you can have a lot of fun doing SIMD code. More fun than in Linux or even Windows? Not really; it's the same thing effectively (in fact, your code will be portable). If you like the platform for user reasons then it's a fine place to start and there's a decent recent introductory book about x86-64 assembly on OS X (and Linux): https://www.amazon.com/Introduction-Bit-Assembly-Programming-Linux/dp/1484921909/ref=sr_1_1?s=books&ie=UTF8&qid=1498145217&sr=1-1

But writing pure assembly programs in OS X basically has no benefit outside of educational ones compared with mixed C and assembly.

u/Your_Left_Hand · 2 pointsr/linux4noobs

If you are willing to spend a little money, I'd suggest the Linux Command Line and Shell Scripting Bible. It will first teach you about the commands you can use on the CLI. Then it will delve into shell scripting. After finishing that book up you should have a very decent understanding of bash.

Another good tutorial that I can Recommend is The Linux Command Line. There are free lessons on the website that cover the same material as his book does. The book is just a lot more in depth.

Also, after you gain some familiarity you can try reading through the bash man page. It's a heavy read, but you can definitely learn a lot from it.

Good luck!

u/LiamMayfair · 31 pointsr/C_Programming

In short, the answer is virtual memory and the protected mode flat model that the past generations of CPU architecture and operating systems have been using.

As you may know, programs are never given full, direct access to the RAM banks; the operating system abstracts this layer away from them in the form of virtual memory. Virtual memory is basically a system whereby you can map physical memory addresses to non-physical ones the OS controls and can readily re-arrange. Thanks to virtual memory the OS can trick an application into thinking it has way more RAM than it actually has and this also enables swapping processes out to disk when the system is running out of memory because there are too many processes being run at the same time. As I pointed out before, since virtual memory is fully managed by the kernel, it can move out chunks of a program's address space to disk, a process known as "paging".

Now, back in the DOS era, virtual memory followed the real mode segmented model, which, in very simple terms meant that, even though processes could be shuffled back and forth between RAM and disk, there were no safeguards in place to prevent a process from messing up another process' memory space via a dodgy pointer pointing to a memory address beyond the scope of the faulty process.

One of the major goals of the successor to this virtual memory model, "protected mode flat model" was to allow the kernel to create a completely isolated address space for the processes it spawns and stopping a rogue program from altering other processes like before. Whenever such an attempt is made, a "segmentation fault" (SIGSEV) or "general protection fault" is raised by the kernel, which in the case of Linux, will prompt the kernel to swiftly kill the offending process.

In practical terms, this means your application won't be able to reach beyond the virtual memory address space it has been allocated (unless it's a kernel-space process, like a kernel subsystem or device driver) and can in no way communicate with other processes by reading or writing memory that belongs to them. In order to accomplish that, you'll need to make use of inter-process communication (IPC) techniques like Unix sockets, pipes, RPC, etc.

This is by no means an in-depth or 100% accurate explanation though. If you've got any follow-up questions I'm more than happy to answer them.

As for the literature, pretty much any textbook about operating system architecture will cover virtual memory to a great extent. I can recommend Operating Systems: Internals and Design Principles and Modern Operating Systems.

Here are a few more books that touch upon the topic of virtual memory:

Assembly Language Step-by-Step: Programming with Linux covers the topic of virtual memory and the different models that have evolved over time over its first few chapters.

The Linux Programming Interface: A Linux and UNIX System Programming Handbook covers this subject (and many, many more) from a Linux systems programmer perspective.

What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager, in case you're interested in learning how Windows does it.

EDIT: added IPC info

u/hawkinsw2005 · 1 pointr/linuxquestions

Understanding the Linux Kernel is great and, obviously, very specific to Linux.

​

Linus has cited that he read Bach's book about the design and implementation of UNIX as inspiration for the development of Linux.

​

Read both and really enjoyed them! I hope you like!

u/gotNoGSD · 3 pointsr/linuxquestions

You can't have it both ways. if you want to know exactly then you have to drill down to the fundamentals which are handled at a low level (C & assembly). If you want to understand the general concepts you'll need to make lateral moves and study CS along with having enough of the tiny details to fill in the gaps with your intuition.

I think what you may like is a book on the linux API. This is between kernelland and userland.

Try this one:

https://www.amazon.com/Linux-Programming-Interface-System-Handbook/dp/1593272200

Before you do that ensure you know enough basic C. Linux kernel uses K&R style. So this might be good enough and your best bet to fasttrack.

https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628

Do keep in mind this is 2K pages worth of reading. This should help to fill in enough of what you don't know you don't know so that you can better use google-fu to get you further.

u/zyrkan · 7 pointsr/linux

As you can imagine, the kernel is a gigantic project, so it's hard to jump in and understand how things are working. If this is your first exposure to any operating system stuff, I would suggest backing up and learning a bit more of the basics. You'll find information like that under the terms "computer architecture" and "computer organization". Modern Operating Systems by Tanenbaum is a classic read to get started.

If you really want to dig at the kernel code, I'd recommend Robert Love's Linux Kernel Development. It gets into the details of process scheduling, interrupts, memory management, file systems, etc. and looks at the code. But I'd warn you that it's pretty complex and can be quite slow to learn.

There are a few free linux kernel books online such as Advanced Linux Programming and Linux Device Drivers. Even if some of the information is outdated, you'll get a lot of information about how the kernel works in general from these resources.

Hope that helps, and enjoy.

u/sanedave · 10 pointsr/learnprogramming

Three books I have been using:

The Definitive Guide to How Computers Do Math

Web page here: http://www.diycalculator.com/

Assembly Language Step-by-Step: Programming with Linux

Hacking: The Art of Exploitation, 2nd Edition

The first uses a virtual machine running on Windows, with 5 registers, 65K of virtual memory, a debugger, and will give you a good basic understanding of what is going on. The second book uses Intel X86 on Linux, and gives a solid foundation of the most used instructions. The third book is just good.

Other favorites of mine include "The Art of Debugging" by Norm Matloff (google for his excellent web page) and "Professional Assembly Language" by Richard Blum.

Have fun!

u/the_gnarts · 1 pointr/linux

> However, I've never done any development work for it. At my company, we will start to have some Linux work for our embedded processors. Before that work comes along, I'd like to start getting an appreciation for it and getting myself a good grounding in it.

Is it really going to be actual kernel work like writing drivers?
Most embedded platforms are vendor supported anyways
so there’s little to do kernel side unless your company has
very specific requirements.

If instead you’re going to do low-level userspace things,
the best resources for learning kernel APIs are the [Kerrisk]
(https://www.amazon.com/dp/1593272200) as a reference
and a LWN subscription to stay up to date.

u/Kaerius · 1 pointr/UTSA

Here is the book had had us use. Pay careful attention to the sed, awk, and perl sections. There's a ton you can do with perl, and Maynard is very specific on what he wants everyone to focus on. He'll give you a tiny packet on what you'll need to know. The low level C part is pretty crazy, but he'll give you enough rope to hang yourself.

You will be writing programs for the tests. It will range from writing a script, to writing a function, to writing an entire program. It's hard to describe Maynard, honestly. For instance, on one of my tests I switched my dup2() statements effectively switching input/output. He took off 10 points out of 25. On certain topics he'll want to make a point and be very heavy handed with the grading. The programs especially.

The good news is that all of the quizzes, programs, and tests really don't matter. The final does. I got an 82 on the first test, 42 on the second, and subpar on all the programs. Got an A in the class because I beasted the final. As long as you dedicate 50% of your time that semester to Systems, and the rest of the time for everything else, you'll do fine.

u/CannedCorn · 5 pointsr/linux

"Linux Kernel Development 3rd Edition" is fairly modern (2010) and really good:

http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468/ref=sr_1_1?ie=UTF8&qid=1413858907&sr=8-1&keywords=linux+kernel+development

Also... not kernel internals specific but an AMAZING book about programing against the linux kernel is "The Linux Programming Interface":

http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200/ref=pd_sim_b_4?ie=UTF8&refRID=1X9Y7ZM18JWKJ80PNXN3

It was written by the guy who wrote a lot of the linux man pages and is one of the best books about how linux works from a programming interface perspective that I've ever read.

u/Ben_Aperture · 1 pointr/linux

I much appreciate your answer. I will take into account ir. I started using Linux about a year and a half ago, coming from windows. I just thinked that I could find a good alternative for Windows, and I moved to Ubuntu MATE. I was fascinated by its velocity, security and how it's packages worked. At the first time, I was dual-booting, but then I removed windows and started to just use Linux. I've been using Linux casually for a lot of time, and now I'm going serious. I want to learn bash scripting and python. I have got a fantastic Spanish Python book, (I'm learning a lot because of it), and now I'm looking for some bash and Linux books by O'Reilly and I've found this book https://www.amazon.es/gp/aw/d/0596009658/ref=mp_s_a_1_1?__mk_es_ES=%C3%85M%C3%85Z%C3%95%C3%91&qid=1520884449&sr=8-1&pi=AC_SX236_SY340_QL65&keywords=O%27Reilly+bash&dpPl=1&dpID=513EprgSOcL&ref=plSrch and this other one https://www.amazon.es/gp/aw/d/1491927577/ref=mp_s_a_1_3?__mk_es_ES=%C3%85M%C3%85Z%C3%95%C3%91&qid=1520884734&sr=8-3&pi=AC_SX236_SY340_QL65&keywords=O%27Reilly+Linux&dpPl=1&dpID=51AbKrNDvaL&ref=plSrch
Would you recommend me this books to learn?
I'm Spanish, so the prizes should be different

u/Eggbotnik · 1 pointr/learnprogramming

If you really want to learn from the ground up, that is to say low level to high level, I'd recommend starting with Assembly Language Step-By-Step. It will get you introduced to binary computation, binary math, and x86 assembly. From there, I'd say move on to The C Programming Language, AKA K&R.

After that, if you've stuck with it and still enjoy it; the coding world is your oyster. Build something brilliant and reap the satisfaction of building your own programs.

Good luck!

u/jormundgard · 15 pointsr/C_Programming

I feel like C is most useful when you are programming directly to an OS and its resources, rather than through a framework or library. And you don't often need to use the most elegant data structures to accomplish a simple task.

The Linux Programming Interface is still one of the best introductions to Linux programming.

u/maredsous10 · 1 pointr/ECE

My General Thought

I find it is best to learn and get exposure from several book/media sources coupled with actual application of things learned.

----

Introductory Texts/Links

Short Intro
http://heather.cs.ucdavis.edu/~matloff/unix.html

C Programming: A Modern Approach
http://knking.com/books/c2/index.html

Head First C (Different Presentation Style, check amazon preview)
http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916/

Programming in C
http://www.amazon.com/Programming-C-4th-Developers-Library/dp/0321776410/

PDF Tutorial
http://phy.ntnu.edu.tw/~cchen/pdf/ctutor.pdf
Original Here > http://www.tutorialspoint.com/cprogramming/index.htm

C The HardWay (Mostly complete)
http://c.learncodethehardway.org/book/

Zed's K&R Critique
http://c.learncodethehardway.org/book/krcritique.html

Practical C Programming
http://shop.oreilly.com/product/9781565923065.do

Ben Klemens Modeling with Data book has a short C introductory section.
http://ben.klemens.org/pdfs/gsl_stats.pdf

-----

Reference
Harbison and Steele C Reference Manual
http://www.careferencemanual.com/

Plan on developing on Linux?
The Linux Programming Interface: A Linux and UNIX System Programming Handbook
http://www.amazon.com/dp/1593272200/

Didn't get Pointers?
http://www.amazon.com/dp/1449344186/

21st Century C, This book got dogged a lot, but I think its a nice text.
http://www.amazon.com/21st-Century-Tips-New-School/dp/1449327141

K&R Scan (If you want an idea what's inside K&R)
http://www.iups.org/media/meeting_minutes/C.pdf

-----

Need an Editor?
VIM Book
ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf

Vim Video Tutorials
http://derekwyatt.org/vim/

-----

Back in the Day
I used these books years ago. They're somewhat dated, but still useful and cheap.
Programming in ANSI C
http://www.amazon.com/Programming-ANSI-Hayden-Books-library/dp/0672484080
Advanced C: Tips and Techniques (Hayden Books C Library)
http://www.amazon.com/Advanced-Techniques-Hayden-Books-Library/dp/067248417X/

----

C Language Basics
How do I read/write files
How things are implemented at a lower level
Compiler Options and Functionality
What is a make file?
Debugging... How to do it... How do I use a standard debugger like GDB?



u/freyrs3 · 3 pointsr/Python

This is a good book: Python Essential Reference.

If you're looking for gift ideas for new programmer my advice is always one of the three things:

  • A good keyboard.
  • A good pair of headphones.
  • Good coffee and mugs.

    Those three things usually go over well with programmer-types.
u/Pinguinsan · 1 pointr/ProgrammerHumor

Hey, no problem man. The source for this particular script is kind of mediocre, but it is here. Note that I included a file called "wow," to get the shell to respond when I typed "wow, real mature, shell".

I want to also mention that when I was learning shell scripting, I made a shell script with a ton of comments to help me understand stuff better. That is located here. And also, for fun, here is a shell script I wrote to make the mouse pointer touch every pixel on your screen. For further learning, I really can't reccommend Mark Sobell's "A Practical Guide to Linux Commands, Editors, and Shell Programming (3rd Edition)" highly enough. It really brought my practical Linux knowledge to a much higher level. I think you can Google that book and get the 2nd edition in pdf form somewhere.

u/ry4n831 · 1 pointr/Python

What initially caught my attention was the example used throughout the course (a stock portfolio). Using the example below, he walks through different scenarios while increasing the difficulty (goes from scripts, functions, classes including Inheritance, Encapsulation, iterators and Generators, Coroutines, etc), and explains everything along the way.

For example, he’s like what If this was a csv file and I wanted to read it? What if I wanted to create data quality checks? What if I wanted to create a class to handle reading this file? What if I wanted to create a class to output the portfolio in html? Csv file? So on, and so on.
Even though I didn't really understand anything past classes (until I watched the video like 10 times), I was reassured by who was presenting (Beazley seems to be kind of a rockstar in Python community) and ultimately decided that what he was talking about was worth knowing.

https://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786



example used in course:

name, date, shares, price

AA,2007-06-11,100,32.20

IBM,2007-05-13,50,91.10

CAT,2006-09-23,150,83.44

MSFT,2007-05-17,200,51.23

GE,2006-02-01,95,40.37

MSFT,2006-10-31,50,65.10

IBM,2006-07-09,100,70.44

u/BobDenver · 1 pointr/linux

I've read Open Source Licensing: Software Freedom and Intellectual Property Law. It's pretty good. Available online here.

However, also published in 2004.

u/sbicknel · 3 pointsr/vim

Don't overlook the included user manual. :help usr_toc will take you there. It is based on the book "Vi IMproved--Vim," which is also available free in PDF format on the Internet because it is published under the Open Publication License. The book is dated, but the manual is up-to-date and tracks with the book very closely.

Derek Wyatt's tutorial videos are good, but there is another vim video tutorial set at Vimcasts.

If you would rather read, but don't want to dig into a five-hundred page book, "A Byte of Vim" may be more manageable. Several of these resources are listed in this subreddit's sidebar.

Several books are now available that cover Vim nicely: "Learning the Vi and Vim Editors," "vi and Vim Editors Pocket Reference," "Hacking Vim 7.2," "Practical Vim: Edit Text at the Speed of Thought," and a brand new book: "Pro Vim," all available on Amazon.

u/brakkum · 1 pointr/bash

I really love this book, has tons of great info in it. Might be able to find it online somewhere.

https://www.amazon.com/Linux-Command-Shell-Scripting-Bible/dp/111898384X/ref=pd_lpo_sbs_14_t_0?_encoding=UTF8&psc=1&refRID=KDKCH1GWS30M5R9G2Z3A

Otherwise, come up with a simple task you want to accomplish, and try and break it down into small steps. Then do some reading on basic bash commands and try and piece it together from there!

u/SweatyAcademic · 1 pointr/linux

>shell prompt

If you have money, this one is a good option

These two are good and available for free, I suggest you start with them.

> administration

This one is the best.

u/dmbuddy · 2 pointsr/linuxadmin

I really enjoyed both of these books when I was starting out. Even now they are super helpful. https://www.amazon.com/gp/aw/d/0134277554/ref=dp_ob_neva_mobile

https://www.amazon.com/gp/aw/d/1491927577/ref=dp_ob_neva_mobile

If you don’t know Linux at all the 2nd book gives you a good overview of things.

u/gott_modus · 2 pointsr/programmerchat

/u/The_frozen_one linked you to IDA, which is pretty deffacto in the reversing world. The free version is limited, though, so if it doesn't quite give you what you need and you want to save money, Visual Studio's debugger has a pretty decent disassembler.

Learning how to read assembly is kind of challenging at first. Something I'd recommend looking into to pair with your journey is Jeff Dunteman's Assembly Step-by-step.

It uses Linux as its teaching OS, so a few things on Windows will be different, such as syscalls or anything ABI specific.

That said, it uses Intel syntax which is what you want, and it has several hundred pages of reading before a hello world is even written. Even if you choose not to continue reading after that, those few hundred pages alone make the book worth buying.

u/yur_mom · 1 pointr/programming

Yeah, the beauty of the low level libraries is they really do not change very much or often. I do not expect everyone to master them, but having an understanding will help in any area of userspace you work. Here are two great books that can be read with just an understanding of the c language.


http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200/ref=sr_1_10?ie=UTF8&qid=1404953887&sr=8-10&keywords=linux


http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468/ref=pd_sim_b_1?ie=UTF8&refRID=10S29ZMT4Q5VQM4KYZRY

u/ixipaulixi · 1 pointr/linux4noobs

The Linux Documentation Project is a great free resource:
http://tldp.org/LDP/Bash-Beginners-Guide/html/

A Practical Guide to Linux Commands, Editors, and Shell Programming (4th Edition)
https://www.amazon.com/dp/0134774604/ref=cm_sw_r_cp_apa_bh7QAb518JBC8

The first two are for learning Bash; this is an awesome resource for learning how to administer RHEL/CentOS7:

RHCSA/RHCE Red Hat Linux Certification Study Guide, Seventh Edition (Exams EX200 & EX300)

https://www.amazon.com/dp/0071841962/ref=cm_sw_r_cp_apa_wj7QAbX8M0DG5

u/McClane_vs_Gruber · 3 pointsr/learnprogramming

If you're lucky, when your own curiosity brings you there.

I taught myself assembly using this textbook, and a copy of Intel's x86 instruction manual, over the summer after graduating college. Java was the language of choice for the C.S. program at my university. C was used in the OS and some computer graphics classes (others used Java 3D), but everything else was high-level, no memory management, with a virtual machine and garbage collector to wipe my ass and feed me crackers. (Here's a very recently published book.)

In my experience, learning assembly helped me gain a deep understanding of how programming works. With a 1-to-1 (almost always) mapping between a line of assembly and a CPU instruction, I felt like I was directly instructing the computer in a way I never feel using high-level languages. From that, I gained an appreciation of how low-level C programming can be, because you can see immediately how C statements are transformed into assembly. After learning assembly, I deliberately compiled programs into assembler with GCC so I could look at the code, because I could finally understand it.

And then I learned C++, and saw how it could be built directly on top of C.

And now it all makes sense.

u/ccondon · 2 pointsr/linux

Well yes. It has a lot of features, and it was O(1). The scheduler has to be able to support nicety, among other things that I can't think of at the moment. For a good introduction, see this book by Robert Love. I used the second edition. The third edition talks about the newer, O(log n) scheduler. The O(1) scheduler performs better for servers with many tasks and little user interaction, whereas the newer one is apparently much better at minimizing latency for applications with a lot of user interaction, as a desktop would have.

Granted, a round-robin scheduler is O(1), and certainly much faster than the O(1) linux scheduler, but it lacks all sorts of important behavior.

u/jadedmonk · 3 pointsr/UIUC

Understanding the Linux Kernel is the book that they recommend you read throughout the course, and it actually seemed to be really helpful to the people who read it. You could brush up on C and basic data structures since you'll be coding a lot in C; you also use x86 but you'll learn that during the class.

Besides that there's not much you could do since most of the material, if not all of it, will probably be new to you unless you've learned about system software/operating systems before. However, if you want a head start then you could start reading Understanding the Linux Kernel. Good luck, and may the Linux gods be on your side during MP3.

u/JoCoLaRedux · 1 pointr/linux

I can't recommend this enough. It's about as comprehensive a guide to Linux as you could hope for, and accessible for beginners.

As far as distros go, I'd go with Mint. It's a great community-driven distro that's very user friendly.

u/bonekeeper · 1 pointr/Python

Also coming from PHP here, I got the "Python Essential Reference" from David Beazley and I must say that I like it very much. It's not a introductory book on programming - it assumed that you know programming very well and just need to learn the ins and outs of python. It's pretty direct-to-the-point and well written. I highly recommend it. http://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786/ref=sr_1_1?ie=UTF8&s=books&qid=1261867689&sr=8-1

u/snowlovesnow · 2 pointsr/C_Programming

Programming in C by Stephen G. Kochan

Hands down the best beginner book

A new version (4th) was just released this past August.

Any experienced programmer will tell you so. The K&R book is an excellent resource however Programming in C is much better suited for an absolute beginner.

u/JamesB41 · 2 pointsr/learnprogramming

I'm not sure what book you're referring to. I can't seem to find it. If you're referring to this one: http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200 then I couldn't disagree more. That book is packed with TONS of useful information and examples everywhere. I've used a great deal of it. I can only assume you're talking about a different book or you didn't get very far.

What do you REALLY want to do? Because if you want to write systems level applications in C for Linux, you're not going to learn it overnight. It's going to take a lot of reading. You're not going to hop on codecademy, crank out a few tutorials and suddenly be good at it.

What's your background? What experience do you have? And again, what are you trying to accomplish, big picture?

I could be wrong but I read your post as "This book is TL;DR. I want a shortcut." There really aren't any for things like that.

u/rbtEngrDude · 2 pointsr/programming

Pick up any book on x86 assembler. You cannot program assembler without understanding the underlying system architecture, and as such most books on assembly language will include a deep dive on x86 architecture from the programmers perspective.

Assembly Language Step by Step by Jeff Duntemann: https://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025

This is one of my favorites, the first assembly book I was able to make it all the way through. Once you do, I also highly recommend

Modern x86 Assembly Language Programming by Daniel Kusswurm: https://www.amazon.com/Modern-X86-Assembly-Language-Programming/dp/1484200659

A very thorough, yet surprisingly readable, dive into thw inner workings of thw advanced x86 feature sets, like MMX and AVX.

u/jdoss · 1 pointr/linuxquestions

I know this is not specifically for kernel development, but The Linux Programing Interface Handbook is a great book for better understanding how to program for Linux systems.

u/yoda17 · 2 pointsr/linuxdev

It's really very easy. I've only written one linux driver for a new hardware serial port and a few other kernel modules and have written a couple dozen drivers for other operating systems.

This is my favourite linux book although I'm sure that have others, it's the only one I can name off the top of my head.

I would start off by adding a new API. That was my favourite exercize and only required a few lines of code.

edit: An Important thing to be able to do is to control the hardware without an OS. When you can do that, squeezing it into whatever is usually a simple task. Arduino is a nice learning platform for hardware.

u/IOvOI_owl · 12 pointsr/mac

I might get downvoted, but if you really want to understand how the system works you can pickup a textbook on Unix/Linux OS for beginners, just make sure it is not distribution specific. >90% of what you will read there will be applicable to MacOS. I am now going through this book: http://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356 You can find online if you want ;) This way you will learn not only about MacOS, but about the whole family of Unix like operating systems. I am using linux pc at work, but I have a mac at home.

u/miyakohouou · 1 pointr/learnprogramming

As others have said, K&R is great for learning the C language. In addition to that, Algorithms in a Nutshell is a nice reference because it has sample code in C for a lot of major data structures and algorithms, so you can see how the language is used to implement CS concepts you might already be familiar with.

I would also highly recommend one or both of Advanced Programming in the Unix Environment or The Linux Programming Interface, which will get you up to speed on POSIX.

u/0b_101010 · 1 pointr/learnprogramming

Check out this Crash Course series, it's quite informative: https://www.youtube.com/watch?v=O5nskjZ_GoI.

If you want to go deeper, check out some of the free Computer Architecture courses on the Internets.

Alternatively, if you want to be a Linux/Windows power user, there are some good books out there, like this.

u/Drach88 · 4 pointsr/C_Programming

A note re: jumping into The Linux Kernel -- This is best tackled while simultaneously reading a book on the kernel like Linux Kernel Development (3rd Edition) by Robert Love and a book on general *nix fundamentals like Advanced Programming in the Unix Environment by Stevens and Rago.

u/phstoven · 3 pointsr/Python

Python Essential Reference is great. It has a medium level overview of almost all of the standard library, and has some great explanations of decorators, 'with' statements, generators/yields, functional programming, testing, network stuff, etc...

u/Tony_T_123 · 0 pointsr/cscareerquestions

Man, I wish I could find a programming job where I can use Linux. Every place I've applied has been Windows or Mac.

Also, for a learning suggestion: check out the book "How Linux Works" it's by far the best book I've read on Linux. It takes you from total beginner to intermediate level. Just make sure you get the 2nd edition, it added a lot more stuff.

https://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356

u/AlienBloodMusic · 2 pointsr/linux

The OS is just a program like any other program. In order to really start understanding how it works, you should learn C.

Once you've got some C down, read Advanced Linux Programming

From there read Robert Loves Linux Kernel Development - even if you're not a kernel developer, it'll give you tremendous insight into how the kernel works.

Also check out Linux Device Drivers. I found this & Loves book complemented each other nicely.

u/rpetre · 2 pointsr/linux

Read a lot. Man pages, guides, examples, source code. Experiment. True, with only one machine you probably won't get to get exposed to, say, networking stuff (you can emulate complex networks using VMs, but you still need to know a lot to set up such an environment). Still, there's a lot of things to learn about the system just by mucking with it. Having a machine you can reinstall whenever you want helps a lot, get an old PC or laptop and use it as a test bed if you don't have a spare server, making it a webserver today, a mailserver tomorrow, a firewall the next day and so on.

Take any problem as a challenge to dig deeper and understand why. Granted, in the Google age, the solution to most problems are just a search and a copy-paste away, but getting to understand what happens with the machine and what's the most elegant way to control it takes a lot of research and practice and failures. Learning "why" is way more important than learning "how", since tools evolve and change and the manuals are always close, but knowing what to look for is a skill that takes time to develop.

Speaking of failures, try to come up with as many ways as you can to make things fail and try to find solutions to most of them. Good sysadmins understand failure and actively explore ways to prevent or handle it.

If you don't mind reading thick books, I heartily recommend Evi Nemeth's Linux Administration Handbook (pretty hands-on) and Tom Limoncelli's Practice of System and Network Administration (about the mentality and processes and non-technical stuff). You might find the latter a bit boring, since it has zero scripts and commands in it, but sooner or later in your career you'll love it.

I'll stop because I ranted too much already, but as a final word, keep in mind that SA is primarily about maintaining infrastructure that helps people, so don't get too caught up by the tech to forget that service availability comes first, shiny toys second ;)

u/flexmyclock · 6 pointsr/linux

I've heard good things about "The Linux Programming Interface"

"Modern Operating Systems" like others suggested is also fantastic.

u/FRedington · 3 pointsr/olympia

Somebody famous in the software development industry once said:
"The quality of a software product is directly proportional to the process used to develop it."
I think it may have been Gerald Weinberg. ICBW.
In any case, I believe this to be true.

Want to know more?
https://en.wikipedia.org/wiki/Capability_Maturity_Model
The CMM is a very heavyweight model. Big organizations, big projects.

http://producingoss.com/
Fogel, "Producing Open Source Software" is an excellent tutorial for setting up Open Source Software Development. The process scales well for shops of a few to larger projects. When using Agile methods (SCRUM for example) there are methods for "SCRUMs of SCRUMs" that scale into very large projects.
Have a look at the online book and buy Fogel's book it it suits you. Fogel has to eat too.
https://www.amazon.com/Producing-Open-Source-Software-Successful/dp/0596007590

u/1nvader · 2 pointsr/learnpython

I can strongly recommend Python Essential Reference (4th Edition). It covers both Python 2 and 3. Maybe it's not free, but i think it reads much better than the free books from the sidebar.
The only downside of the book is that it is not written for absolut programming beginners, you need to have programming experience in any other language.

u/iFappster · 1 pointr/learnprogramming

Start with finishing this whole book. Start to finish. It is so amazingly helpful: https://www.amazon.com/gp/aw/d/B00EANJ09U/ref=pd_aw_sbs_351_1?ie=UTF8&psc=1&refRID=ZHNDKD9899ZNDSAXDA4V. Even if you aren't an absolute beginner. Then, once you are done with that, read + complete the exercises for this book: https://www.amazon.com/gp/aw/d/0321776410/ref=pd_aw_fbt_14_img_2?ie=UTF8&psc=1&refRID=78FY6PWRFXNDM0DQ2DGW you will literally look back at this post, and laugh at how much more you know after reading these books. I promise.

For pointers, they literally just "point" at that address in memory. The: 1234 cherry st.. That address is actually considered a pointer. Just imagine your computer pointing a finger at that address in its physical memory. Like I could physically point to your house on a map, using the address you give me..

u/killdeer03 · 12 pointsr/programming

Yeah, I feel much the same way. I just look at the portions that interest me. I am not smart enough to understand all of it, so I just study and try to learn small parts individually. I bought Understanding the Linux Kernel. It is pretty good book. Some of it is over my head, but it covers the 2.6 kernel in depth. I'd recommend it.

u/LulzBaby · 1 pointr/OSUOnlineCS

You can try giving this book a shot. I took 271 on the Cascades campus and we used that book plus this book. The first is free and I thought was useful, a bit quirky but good info.

u/Grimmjow91 · 2 pointsr/unix

I am reading the first edition now and it is really good so it can't hurt. It is a great into, and a good reference even for people who know what they are doing.

I am also reading this for school as well http://www.amazon.com/Practical-Guide-Fedora-Enterprise-Edition/dp/0133477436/ref=pd_sim_14_2?ie=UTF8&dpID=517h5KJOQVL&dpSrc=sims&preST=_AC_UL160_SR129%2C160_&refRID=0T274B6GDEYV9EQ9WGSG but I hear http://www.amazon.com/Practical-Commands-Editors-Programming-Edition/dp/013308504X isn't bad either

u/flash__ · 4 pointsr/technology

This book does a pretty good job of introducing you to a lot of aspects of the wide world of Linux computing. I recommend it along with Ubuntu starting out.

EDIT: Removed referral code that I didn't put there.

u/caisah · 1 pointr/learnprogramming

This is a vast topic and I don't think you will find something to cover all the subjects at once.

To understand how the processor works this video does a really good job in explaining most of the essential stuff.

I also suggest you try to get your hands dirty with some assembly language so you get the feel of it. I liked Assembly Language Step-by-Step book.

There is also The Hardware/Software Interface course. This will give you a great starting point in digging deeper into the subject.

u/appleade280 · 3 pointsr/linux

You might be interested in trying gentoo, especially before trying LFS.

Edit: Also, if you'd like to read about the kernel itself you could check out this book, I enjoyed it.

u/GobTotem · 5 pointsr/linux4noobs

I am a beginner too and just finished this book TLCL.Another one i would recommend is shell scripting bible.For most part use google to learn about commands and man page is your friend. I am more of a book kind of guy so never used video resources. Most important you should know where to look for help when stuck.

u/lazyant · 1 pointr/devops

For Linux internals read https://www.amazon.ca/Linux-Programming-Interface-System-Handbook/dp/1593272200 , you only need the intro to each chapter (before he gets to code).

For general Linux read https://www.amazon.ca/UNIX-Linux-System-Administration-Handbook/dp/0134277554/

You need to know some concepts very well, like life of a process and signals (may not pass initial screen interview without those), as well as basic networking (both google and facebook have a networking interview although it’s valued less than the others).

Btw there’s also an interview about designing a distributed systems, best source to learn is to read about tools at google, facebook and AWS.

For troubleshooting, there’s no book, it’s all practice with real problems. If I had the time or rather the priority, I’ll publish a bunch of broken things in docker containers as exercises but it’s a lot of work.

I do have a troubleshooting framework , with things like verify given information, trying to break the problem space in two , do first easy quick tests etc

u/coniferhugger · 2 pointsr/devops

I love Safari. The only book they haven't had that I've wanted is Practical Vim. But, the book is well worth the price.

u/personal_opinions · 1 pointr/rails

+1 for devops. Anyone looking for a reference manual for Linux should check out Mark Sobell's books. Really useful and doesn't become obsolete after a year (or even 10 years!). Just got his 3rd edition Linux manual for Christmas and I'm ecstatic.

u/SeanRamey · 1 pointr/AskProgramming

Try reading http://www.plantation-productions.com/Webster/www.artofasm.com/index.html

Also, im assuming that you want to learn about the PC, as in, IBM PC & Compatibles which is every modern home computer including Apple computers. You will probably want to read the IBM PC Technical Reference manuals to learn some details.

If you want to learn about a different system then you just need to look up books and reference manuals for that system.

If you want more generic information, then you might want to look for electronics book that teach how a computer works or how to design your own.

EDIT: Also, try this book out: https://www.amazon.com/gp/product/0470497025/ref=dbs_a_def_rwt_bibl_vppi_i0
It teaches x86 assembly as your first language and it covers what you probably need.
There are 3 editions. I've linked the newest, but the 2 edition before it cover 16 bit real mode DOS as well, which might be easier in some ways.

u/myaut · 1 pointr/linux

"Linux Kernel Development" by Robert Love is also good
http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468

u/Greydmiyu · 1 pointr/programming

> It's never been compulsory unless you're bad at programming.

Or, back then, part of the policy of the shop at hand that use strict be used or be written up. So yeah, still compulsory.

> The only particularly Perl-ish one is the statement if condition.

Yup, that's the one. That was the moment I decided to leave Perl since it was clear that the language was not designed with maintenance in mind.

First up is the unless statement, it's shorthand for if !. Except we don't have an elsunless like elsif. So subsequent statements in the chain which are also not statements still have the if ! notation. So to be consistent when we have to add on additional if ! it is best to rewrite the first into a if ! from unless.

The statement if condition usage has no else or elsif at all. So if later we need to have chaining conditions we need to rewrite that portion into the standard if condition format.

Why does this matter?

Because to make my code maintainable just to myself all those years ago I made the decision to not use the unless or condition if forms and limit myself to to the if condition format. This way when I came back to the code months later to add in some new requirement from on high I knew exactly what I was getting into.

The problem is, I wasn't the only Perl hacker in the shop. So every damn time I had to touch someone else's code or they touched mine it felt more like a rewrite than a simple modification.

That frustration came to a head when I went to the O'Reilly conference in Monterey back in... 2000? Instead of focusing on Perl presentations I hit up a Python presentation put on by Beazley himself. Python's focus on one clear way to achieve something was so refreshing compared to tossing out 75% of Perl's TIMTOWDI mish-mash.

> If you're going to bitch about having lots of different ways to accomplish a task (despite the Perl mantra, TIMTOWDI..), pick "iterate a list" or the ridiculous number of ways for can be used.

This is true. I, however, choose if as an example because it is easy to explain, even to laypeople, as to why I ran screaming from the Perl world back then.

(Edits for late night typos).

u/EJMR-Plutono · 12 pointsr/programming

Anyone further interested in this subject should read “Assembly Language Step-by-Step” by Jeff Duntemann. Personally I consider it the best book on x86 assembly that I’ve ever read.

u/samoht9 · 2 pointsr/dcpu16

I'm using the following book to learn Assembly and really liking it so far.

http://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025

It goes into C at the end. I chose to learn Assembly because I wanted to learn how it all works behind the scenes a bit more. I think it's definitely worth the time to go through and will lead to your goal of learning C.

u/qspec02 · 2 pointsr/learnprogramming

This (Python Essential Reference by David Beazley) is easily my #1 Python book for just about everything.

I wish it had a few cheatsheets or some quick references, but aside from that, it covers the language pretty thoroughly.

u/cozichooseto · 1 pointr/cs50

CS50 used to recommend this book to read and do exercises along side online content: Programming in C

One of the best textbooks I ever read.

u/rowboat__cop · 3 pointsr/linux4noobs

Considering that the best book about Linux, Kerrisk’s The Linux Programming
Interface
was published in
2010, the answer is a determined yes. Just make sure to read a good
book. Most of the knowledge, even if technically obsolete by now, should be
transferable in a way to the state of the art.

u/nbrenckle · 1 pointr/linux

Any of the OReilly books are excellent. And if you are looking to learn programming/scripting, I'd go with whatever installs easiest on your iMac, which might be OSX. Also, you can check out Linux Administration Handbook (or the general 'Unix' one) http://www.amazon.com/Linux-Administration-Handbook-2nd-Nemeth/dp/0131480049/ref=pd_sim_b_2

u/AtomicWedgy · 2 pointsr/learnpython

If you're looking for an intro to programming in Python I would suggest Introduction to Computation and Programming Using Python For a general language reference Python Essential Refernce For an introduciton to the included modules The Python Standard Library by example which includes a lot of simple code examples. The book Core Python Application Programming is a great subset of the above books with less over all coverage but greater detail in the example code. And last but not least, for advanced algorithm info Annotated Algorithms in Python

u/srnull · 2 pointsr/programming

You got downvoted because what you said wasn't clear. There is a version of what you said that might be sort of correct, but what you typed really isn't.

Threads and processes are more similar on Linux than they are on other systems because they're both just tasks. See this answer on StackOverflow for an overview. They're both struct task_struct in the C source, which is a huge structure, closing in on 2KB. See this answer on StackOverflow for an overview.

If you're interested in these kinds of things, read e.g. Robert Love's Linux Kernel Development.

u/perfecthashbrowns · 1 pointr/linux4noobs

I recently got into https://www.hackerrank.com/ and it's amazing! There's a Bash section there. It's not gonna teach you Bash, but it will help you with exercises.

For learning Bash: http://www.amazon.com/Shell-Scripting-Expert-Recipes-Linux/dp/1118024486/

u/Sluisifer · 1 pointr/programming

The built in tutorial will get you started.

Practical Vim http://www.amazon.com/Practical-Vim-Thought-Pragmatic-Programmers/dp/1934356980/ref=sr_1_1?ie=UTF8&qid=1414952123&sr=8-1&keywords=practical+vim is what really got me to understand how it works, and was far more effective than looking at various online tutorials. It goes much more into how one can actually use the various tools effectively. Vim is very personal, with many ways to skin a cat. This goes through examples of several ways to deal with the same problem, and really lets you understand how the tools fit together.

u/professorlamp · 3 pointsr/learnprogramming

If you're not a complete beginner then go for The C programming language .

If you need to get up to speed on both programming and C, then I'd recommend something a bit more friendly such as Programming in C

u/hnyakwai · 8 pointsr/Python

Get the Python Essential Reference by David Beazley. I was in the same boat as you several years ago. I probably read 5-6 python books that were aimed at experienced developers, Dave's book is BY FAR the best that I found.

He just started working on the 5th edition, so the 4th edition is getting a little long in the tooth (python 3 was a new thing back then), but I can still whole-heartedly recommend it.

u/theevildjinn · 2 pointsr/programming

Practical Vim is a fantastic book for boosting your vim-fu, it's written in such a way that you can pick it up and read as little or as much as you like, and still get something out of it. I bought it on the strength of the Amazon reviews after having used Vim for 12 years but never really mastering it, and I now edit a lot quicker than I did before.

u/CuriousExploit · 3 pointsr/netsecstudents

Suggested in a related thread I was able to learn enough to read and write it better from this book: https://www.amazon.com/Introduction-Bit-Assembly-Programming-Linux/dp/1484921909/

Even better beyond is to write some C and observe what GCC or Clang compiles it into, and see if you can mentally (or actually) map the disassembly back to C.

u/PM_me_goat_gifs · 1 pointr/ExperiencedDevs

I have heard good things about The Linux Programming Interface but cannot verify it is as specific as you are looking for.

I think some of Julia Evans stuff is good for this.

u/Probono_Bonobo · 1 pointr/Python

Novice here. I bought the Python Essential Reference at the advice of this thread when I ran into some frustrations with O'Reilly (Learning Python, 4th Ed). They both have their issues. Essential reference is written for a higher-level audience, but I think it does a better job illustrating concepts by example. By contrast, the O'Reilly is more oriented toward beginners, but it's weirdly averse to including actual code snippets, so you get very little immersion in the syntax. Also the organization of the contents is extremely arbitrary, such that if you read it in a straight line you'll encounter an example of a nested dictionary prior to learning basic dictionary operations, and list comprehensions before lists. Steer clear.

u/ninety_hex · 2 pointsr/learnpython

The learning resources in the wiki have a section for experienced programmers new to python which may be useful. I came to python from C and found David Beazley's book useful. It has a compressed introduction to python before diving into the standard library, a bit like K&R.

u/enteleform · 3 pointsr/Python

Work through Python Crash Course: A Hands-On, Project-Based Introduction to Programming if you like project-based learning & having relevant context-based examples, or read through Python Essential Reference if you're comfortable with learning raw concepts & want a solid overhead view of what's available to you.
 
Automate the Boring Stuff with Python is another good project-based option:

u/EirrinGoBragh · 5 pointsr/linux

Read here: http://www.advancedlinuxprogramming.com/


Program. Then read here: http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468


Program some more. Then maybe read here: http://www.amazon.com/Linux-Device-Drivers-3rd-Edition/dp/0596005903


And program some more. Yes, I know two of the links are to amazon. I'm sure if you look real hard you can find other formats.

u/BluddyCurry · 3 pointsr/vim

My recommendations are:

  1. Watch vimcasts
  2. Get the Practical Vim book. It really improved my vimming dramatically.
  3. Map <Esc> to something easier. I use jk (inoremap jk <Esc>) because it's a sequence that you rarely type when programming. If you don't like that, you could use <C-c> (which is a default binding) if you map Caps-lock to CTRL (I recommend doing this regardless, but it needs to be done at the OS level).
  4. Don't use the arrow keys.
u/dzjay · 3 pointsr/learnprogramming

Do start with C and then buy The Linux Programming Interface. Afterwards, I recommend buying a book dedicated to pthreads and another on sockets. Of course, do remember to do the actual exercises.

u/fulltimegeek · 3 pointsr/videos

Awesome book spotted under his desk at 2:45

u/ossobsv · -3 pointsr/opensource

I'm a licensed attorney, I know what I'm talking about.
Here have a read if you don't believe me:



https://scholarship.law.duke.edu/faculty_scholarship/1857/

https://www.amazon.com/Open-Source-Licensing-Software-Intellectual/dp/0131487876

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=243237



You'll noticed that no licensed attorney is claiming that the GPL is irrevocable from free-takers. The most you'll get, if you pay attention, is highly couched statements. There is a reason they have a non-attorney making the blatant "GPL is irrevocable" statements: those statements are not legally defensible - they can claim the non-lawyer is not an expert in his field however.



Free licenses are revocable. They are not mutually binding agreements: they are simply permission from the copyright owner; permission that can be revocated at the copyright owner's pleasure.



"I agree to... get the thing I'm trying to contract for" is not valid consideration.

Free is not valid consideration.

Nothing is not valid consideration.

"I won't violate your copyright and will instead abide by the limitations in the license text" is not valid consideration.



You do not have a pre-existing Right to violate the copyright owners copyright. You are not giving anything up when you "agree" to these lesser restrictions (down from "you are not allowed to do anything"): you are gaining permissions.

u/wuts_interweb · 3 pointsr/commandline

Practical Vim - Edit Text at the Speed of Thought by Drew Neil is the best book I've found for going beyond the beginner stage.

Preview here.

u/jbplaya · 1 pointr/learnprogramming

This book, Assembly Language Step by Step is the best beginners assembly book I've seen by far.

u/scopegoa · 1 pointr/sysadmin

I bought it from this link:

http://www.amazon.com/gp/aw/d/0672329468?pc_redir=1397146287&robot_redir=1

It's literally called Linux Kernel Development by Robert Love.

u/reddit_is_cruel · 3 pointsr/linuxquestions

If you're into paper:

u/masterm · 3 pointsr/linux4noobs

You probably want the full package which includes having a desktop/window manager. Use a popular distro because you will need help (and a popular distro has more resources/support available). Use the terminal all the time. Read all the time. Fuck with everything

Read this: http://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356

u/gtranbot · 1 pointr/vim

I found both Learning the vi Editor and Practical Vim to be excellent learning resources. In addition, of course, to browsing the docs and using, using, using the editor.

u/droug132 · 1 pointr/linuxquestions

I enjoyed Linux kernel development by Robert Love.
He starts with a high level view, just to understand the concept, and then points you to the relevant code in the kernel.
But as with all books about the kernel, references become outdated but not too hard to find it in recent kernels.

u/archover · 2 pointsr/archlinux

> How Linux Works

Came here to say this!

This book really hit the sweet spot for me. Covered Linux in just the right balance of concepts and details. I would read a bit, then try it on the computer. Really helped!

http://www.amazon.com/How-Linux-Works-Superuser-Should/dp/1593270356

u/akkaone · 1 pointr/linux4noobs

It is four years old now but "Linux Kernel Development" http://www.amazon.com/Linux-Kernel-Development-3rd-Edition/dp/0672329468
despite the name, the book is also nice even for people not doing kernel development.

u/IWentOutside · 6 pointsr/linux

I've found The Linux Programming Interface to be one of the best in-depth books I've ever tried to read on Linux. Only issues with it is it's not too hands-on, so it's a bit difficult to retain, and maybe the price, bit would have to say it's still totally worth it.

u/davebrk · 1 pointr/Python

> so the book that is a reference on 2.6 and 3 at the same time is a lot more useful!

Try Python Essential Reference (4th Edition).