Reddit mentions: The best algorithms and data structures books

We found 472 Reddit comments discussing the best algorithms and data structures books. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 104 products and ranked them based on the amount of positive reactions they received. Here are the top 20.

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

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

3. Algorithm Design

Used Book in Good Condition
Algorithm Design
Specs:
Height1.25 Inches
Length9 Inches
Number of items1
Weight3.4612575134 Pounds
Width8 Inches
▼ Read Reddit mentions

4. Hacker's Delight (2nd Edition)

    Features:
  • ARROW
Hacker's Delight (2nd Edition)
Specs:
Height10.2362 Inches
Length7.67715 Inches
Number of items1
Weight1.8959754532 Pounds
Width1.1811 Inches
▼ Read Reddit mentions

5. Algorithms

McGraw-Hill Science Engineering Math
Algorithms
Specs:
ColorPaperback,
Height9.2 Inches
Length7.3 Inches
Number of items1
Weight1.08908357428 Pounds
Width0.5 Inches
▼ Read Reddit mentions

6. The Algorithm Design Manual

The Algorithm Design Manual
Specs:
Height9.5 Inches
Length7.25 Inches
Number of items1
Weight0.55 Pounds
Width1.25 Inches
▼ Read Reddit mentions

8. Introduction to Algorithms, Third Edition (International Edition)

    Features:
  • Mit Press, A great option for a Book Lover
  • Condition : Good
  • Comes with Proper Binding
Introduction to Algorithms, Third Edition (International Edition)
Specs:
Height9 Inches
Length8 Inches
Number of items1
Release dateJuly 2009
Weight4.40042674952 Pounds
Width1.75 Inches
▼ Read Reddit mentions

9. Algorithms + Data Structures = Programs (Prentice-Hall Series in Automatic Computation)

    Features:
  • Used Book in Good Condition
Algorithms + Data Structures = Programs (Prentice-Hall Series in Automatic Computation)
Specs:
Height9.5 Inches
Length6.5 Inches
Number of items1
Weight1.50575724946 Pounds
Width0.75 Inches
▼ Read Reddit mentions

10. Algorithms Unlocked (The MIT Press)

Mit Press
Algorithms Unlocked (The MIT Press)
Specs:
Height0.48 Inches
Length9.25 Inches
Number of items1
Release dateMarch 2013
Weight0.7495716908 Pounds
Width5.69 Inches
▼ Read Reddit mentions

12. Introduction to Algorithms

Introduction to Algorithms
Specs:
Height9.3 Inches
Length8.2 Inches
Weight4.8 Pounds
Width1.9 Inches
▼ Read Reddit mentions

13. The Art of Computer Programming: Volume 3: Sorting and Searching (2nd Edition)

    Features:
  • Used Book in Good Condition
The Art of Computer Programming: Volume 3: Sorting and Searching (2nd Edition)
Specs:
ColorCream
Height1.71 Inches
Length9.49 Inches
Number of items1
Weight3.05781157394 Pounds
Width6.65 Inches
▼ Read Reddit mentions

14. Exercises for Programmers: 57 Challenges to Develop Your Coding Skills

O'REILLY
Exercises for Programmers: 57 Challenges to Develop Your Coding Skills
Specs:
Height9.01573 Inches
Length5.98424 Inches
Number of items1
Weight0.63052206932 Pounds
Width0.2539365 Inches
▼ Read Reddit mentions

15. Algorithms on Strings, Trees, and Sequences: Computer Science and Computational Biology

    Features:
  • Used Book in Good Condition
Algorithms on Strings, Trees, and Sequences: Computer Science and Computational Biology
Specs:
Height10 Inches
Length7 Inches
Number of items1
Weight2.4030386558 Pounds
Width1.19 Inches
▼ Read Reddit mentions

16. Data Structures and Algorithms in C++

    Features:
  • Used Book in Good Condition
Data Structures and Algorithms in C++
Specs:
Height9.200769 Inches
Length7.40156 Inches
Number of items1
Weight3.40393732528 Pounds
Width1.098423 Inches
▼ Read Reddit mentions

18. Vision Science: Photons to Phenomenology

    Features:
  • New
  • Mint Condition
  • Dispatch same day for order received before 12 noon
  • Guaranteed packaging
  • No quibbles returns
Vision Science: Photons to Phenomenology
Specs:
ColorBlack
Height1.72 Inches
Length10.36 Inches
Number of items1
Release dateApril 1999
Weight4.1998060911 Pounds
Width8.64 Inches
▼ Read Reddit mentions

20. Data Structures and Algorithms in Python

Used Book in Good Condition
Data Structures and Algorithms in Python
Specs:
Height9.401556 Inches
Length7.700772 Inches
Number of items1
Weight3.13938261088 Pounds
Width1.401572 Inches
▼ Read Reddit mentions

🎓 Reddit experts on algorithms and data structures 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 algorithms and data structures 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: 774
Number of comments: 5
Relevant subreddits: 1
Total score: 432
Number of comments: 12
Relevant subreddits: 1
Total score: 319
Number of comments: 4
Relevant subreddits: 2
Total score: 28
Number of comments: 3
Relevant subreddits: 1
Total score: 26
Number of comments: 2
Relevant subreddits: 1
Total score: 22
Number of comments: 6
Relevant subreddits: 1
Total score: 16
Number of comments: 4
Relevant subreddits: 2
Total score: 15
Number of comments: 3
Relevant subreddits: 2
Total score: 6
Number of comments: 6
Relevant subreddits: 2
Total score: 5
Number of comments: 3
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 Programming Algorithms:

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/nuclearqtip · 37 pointsr/cscareerquestions

I'm a software dev with 9 years experience, and even I have difficulty finding work. I live in Colorado as well. My qualifications are impeccable. But I still get "no's" for absolutely no technical reason.

My best advice? Work on your resume wording, and your interview people skills. Use active words on your resume, like "initiated", "spear-headed", "lead", "started", "identified". Words that scream out "I'm a leader". It doesn't matter if you have no desire to go into management. The more your resume reads as "I'm a self-starter, I'm a leader, and I'm ALWAYS learning", the better your chances.

Sadly skills alone are becoming more and more ubiquitous. There are scores of self-taught developers out there that dilute the market for people with actual degrees. Budgets being what they are, if a company needs JUST a code monkey, they're going to hire the cheap one. Your degree actually puts you at a slight disadvantage in that arena.

However, if they're looking for a long-term (i.e. quality) person, they're going to hire someone who has NOT ONLY the technical qualifications, but also fits the "perfect employee" model that they have envisioned. This means: pleasant to be around, good customer / people skills, confident (but not cocky), positive attitude. You know, the stuff an HR person would care about. Sit up straight. Make eye contact. Smile. Firm handshakes. Dress well (not too nice though, developers get a bit edgy around folks in suits). Address people by their name. Do not curse. Do not be overly familiar. Do not volunteer too much information (especially things like health conditions and personal quirks). You're interviewing with human beings, who are vulnerable to "gut feelings", "first impressions", and other vague means of evaluating a candidate. Give them every reason to have a good "gut feeling" about you.

This is important: do research about the company before you come in. If you come in, sit down, and act confused about what their business even does, they're going to think you don't care. Find out what the company does, find out what products they make, what their business model is, etc. Find out (if you can) what the employee atmosphere is like. Do everything you can to show that you actually really WANT to work there. This also means attaching a custom cover to your resume, and showing a similar amount of attention to detail that screams, "hey I did this JUST FOR YOU".

As for the technical qualifications, your degree just says "I can be taught". Nothing more. A company who sees a candidate with a degree and a small amount of experience WILL expect you to work for a rather modest paycheck. You CAN scare them off by throwing out a number that's too big. Research the company you're looking at. Use sites like glass-door to find out what level 1 (or similar) engineers are paid. If you can't find information on the company's pay, find a similar-sized company in the same industry. Try to get a realistic idea of what to expect, salary-wise. You can PM me and ask what I made at my very first "real" job after getting a degree.

Also make sure you have a LinkedIn profile. It's surprising how many recruiters hang out on there, just doing searches for keywords, contacting everyone who pops up.

I know you're having a hard time right now, and I know it can be VERY discouraging hearing "no" after "no" (or the classic, "we've decided to proceed with another candidate" line). ALL IT TAKES IS ONE YES. You might be one interview away, but you won't know unless you keep trying. YOU CAN DO THIS. I know it's a lot to keep track of. I know it's a ton of stuff to remember. And I know putting on a brave face especially in the face of financial uncertainty is all but impossible.

I'm not a big believer in positive thinking. But neither am I a big believer in negative thinking. Your post comes across as being incredibly pessimistic and defeatist. While I understand that this is your reality (and please know that this IS a safe place to vent), you need to make absolutely CERTAIN that you leave that attitude at the door when you're interviewing. You're interviewing with people who can and will pick up on that if you're not careful. And like I said, sometimes all it takes is that "unpleasant gut feeling" to cost you the job. Don't give them ammo.

One more word about technical qualifications. Smaller companies put a big emphasis on experience. But larger companies know that experience is cheap, and that what really matters is that you understand the fundamentals. Make sure you understand the fundamentals. This means data structures and algorithms mostly. If it's in your budget to do so, pick up a copy of The Algorithm Design Manual. Once you have a good grasp on the concepts in that book, most white-board coding exercises become much easier. Also, make sure there's (at least) one language you understand REALLY well. Whether that's javascript, or Python, or C, or Perl, or PHP, or Java, or... doesn't matter. Just make sure you have one language that you can actually code competently in.

I know you said you can't move. I live in Colorado Springs. Not sure if that's considered a "move" for you. I work at a DoD company that currently has a number of openings for Java developers, and Javascript frontend developers. It's a modest-sized company (600 people, ish). Your Asthma won't phase them at all (though frankly you really shouldn't ever bring up health issues in an interview). If you're interested, PM me and I'll give you the company name and a few tips about what they're looking for.

If you're interested I can also take a look at your resume and let you know if I see anything that could use some improvement / modification. I know it's really hard to get feedback about resumes. I'm not a hiring manager, but I've spent years perfecting my own, so I like to think I know a thing or two on that subject.

Best of luck.

TL;DR: Just read it. Sorry.

EDIT

I just want to also throw in that I agree with /u/akhbhaat about the gap on your resume. That's not an insurmountable problem, and some companies would still hire you. But, in the words of Ricky Ricardo: "you got some 'splainin' to do". It's not a deal breaker, but it does raise eyebrows. Unemployment can become self-perpetuating because companies assume you're not good enough to be employed. It's bullshit, of course, but it IS now up to you to either take corrective action (go back to school), or come up with a really good excuse as mentioned.

EDIT 2

I also agree with all of the comments about side-projects. Side-projects are a way of showing a company, "I may not have been employed, but I was still actively developing my skills". It also kinda gives them the idea that you're passionate about the field, which is an extremely good impression to give.

Sites like Project Euler and Topcoder might provide a good starting ground to just get you warmed up a bit. Also you may want to consider registering on Stackoverflow and answer some of the questions you know the answers to (don't worry about reputation on there, no one cares). But if you really want to impress them, go start or contribute to an open source project. Doesn't matter what. Doesn't matter what language. As long as it's challenging to YOU and actually teaches you something.

u/anastas · 22 pointsr/askscience

My main hobby is reading textbooks, so I decided to go beyond the scope of the question posed. I took a look at what I have on my shelves in order to recommend particularly good or standard books that I think could characterize large portions of an undergraduate degree and perhaps the beginnings of a graduate degree in the main fields that interest me, plus some personal favorites.

Neuroscience: Theoretical Neuroscience is a good book for the field of that name, though it does require background knowledge in neuroscience (for which, as others mentioned, Kandel's text is excellent, not to mention that it alone can cover the majority of an undergraduate degree in neuroscience if corequisite classes such as biology and chemistry are momentarily ignored) and in differential equations. Neurobiology of Learning and Memory and Cognitive Neuroscience and Neuropsychology were used in my classes on cognition and learning/memory and I enjoyed both; though they tend to choose breadth over depth, all references are research papers and thus one can easily choose to go more in depth in any relevant topics by consulting these books' bibliographies.

General chemistry, organic chemistry/synthesis: I liked Linus Pauling's General Chemistry more than whatever my school gave us for general chemistry. I liked this undergraduate organic chemistry book, though I should say that I have little exposure to other organic chemistry books, and I found Protective Groups in Organic Synthesis to be very informative and useful. Unfortunately, I didn't have time to take instrumental/analytical/inorganic/physical chemistry and so have no idea what to recommend there.

Biochemistry: Lehninger is the standard text, though it's rather expensive. I have limited exposure here.

Mathematics: When I was younger (i.e. before having learned calculus), I found the four-volume The World of Mathematics great for introducing me to a lot of new concepts and branches of mathematics and for inspiring interest; I would strongly recommend this collection to anyone interested in mathematics and especially to people considering choosing to major in math as an undergrad. I found the trio of Spivak's Calculus (which Amazon says is now unfortunately out of print), Stewart's Calculus (standard text), and Kline's Calculus: An Intuitive and Physical Approach to be a good combination of rigor, practical application, and physical intuition, respectively, for calculus. My school used Marsden and Hoffman's Elementary Classical Analysis for introductory analysis (which is the field that develops and proves the calculus taught in high school), but I liked Rudin's Principles of Mathematical Analysis (nicknamed "Baby Rudin") better. I haven't worked my way though Munkres' Topology yet, but it's great so far and is often recommended as a standard beginning toplogy text. I haven't found books on differential equations or on linear algebra that I've really liked. I randomly came across Quine's Set Theory and its Logic, which I thought was an excellent introduction to set theory. Russell and Whitehead's Principia Mathematica is a very famous text, but I haven't gotten hold of a copy yet. Lang's Algebra is an excellent abstract algebra textbook, though it's rather sophisticated and I've gotten through only a small portion of it as I don't plan on getting a PhD in that subject.

Computer Science: For artificial intelligence and related areas, Russell and Norvig's Artificial Intelligence: A Modern Approach's text is a standard and good text, and I also liked Introduction to Information Retrieval (which is available online by chapter and entirely). For processor design, I found Computer Organization and Design to be a good introduction. I don't have any recommendations for specific programming languages as I find self-teaching to be most important there, nor do I know of any data structures books that I found to be memorable (not that I've really looked, given the wealth of information online). Knuth's The Art of Computer Programming is considered to be a gold standard text for algorithms, but I haven't secured a copy yet.

Physics: For basic undergraduate physics (mechanics, e&m, and a smattering of other subjects), I liked Fundamentals of Physics. I liked Rindler's Essential Relativity and Messiah's Quantum Mechanics much better than whatever books my school used. I appreciated the exposition and style of Rindler's text. I understand that some of the later chapters of Messiah's text are now obsolete, but the rest of the book is good enough for you to not need to reference many other books. I have little exposure to books on other areas of physics and am sure that there are many others in this subreddit that can give excellent recommendations.

Other: I liked Early Theories of the Universe to be good light historical reading. I also think that everyone should read Kuhn's The Structure of Scientific Revolutions.

u/FrzTmto · 43 pointsr/programming

Yes, and No.

No : there are better mathematicians out there than you. Some dedicate their lives to mathematics, and algorithms. You will not beat them. They have written books. Books filled with the optimal algorithms for about almost anything under the sun. You can choose something fast that will require a lot of RAM (for your big server) to another version doing the same work slowly but only using a few bytes (for your SMARTCARD use). Not only they wrote optimal stuff, but it works without bugs if implemented properly. So you know that unless you screw implementing the pseudo-code, you not only get optimal code/solution but also something that covers all cases...

So, Yes. You need not mathematics nor algorithms but a GRASP of how to start from pseudo-code for an algorithm, and end up with your favorite langage implementation of it. You need to be able to somewhat UNDERSTAND how it works, but you MUST avoid trying to build your own algorithms.

This is for example, one of my favorite books :
https://www.amazon.fr/gp/product/0262533057/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1

Introduction to Algorithms
T Cormen, C Leiserson, R Rivest and C Stein

(if you are wondering, Yes. The Rivest from RSA)

This books contains algorithms. So for each problem you might encounter, they offer solutions. Each solution starts with the mathematical part of it, if you are interested. Then, you get the pseudo-code that you can implement with steps. And you also get an analysis of the cost you will get out of it using the standard complexity notation O (O(n) or O(n^2) for example).

This is what a software engineer uses. The same way an architect will have books about concrete or metal analysis/how to use them, or machine engineers will have books with clever mechanical devices to do almost anything they can combine/use from.

It's a bit like cryptography. Everyone can design a cipher that he/she will be totally UNABLE to break. Try it. In less than a day, you can design something that YOU are unable to break. What does it mean ? NOTHING.

It means nothing because if you're unable to break your own crypto, it doesn't mean someone else can't break it. In fact, it can probably be quite trivial to break using either statistical analysis or more powerful tools like differential analysis, linear analysis or differential-linear analysis....

That's why if you're clever, you let the cryptographers with decades of specialization in cryptography design those ciphers. And how did they learn their craft ? Not by building ciphers. But the other way : by breaking every possible cipher that has been invented. Then, spending decades inventing ciphers and breaking them, again, again, and again. Until after years expressed in multiples of 10 you get to the point they are able to design ciphers that will resist all known attacks because they learned how they break stuff.

This is the same here. Anyone can design an algorithm, and be absolutely sure it is the best they can design. But it can have loopholes, it might not cover all cases you will throw at the algorithm. It might work, but be of exponential complexity where something better at those, than you, will give you a linear version of it....

You need basic mathematics. Standard operations, and knowing about calculus, exponential or linear difference, recursion, a bit of statistics (will help you profile better your work). BASIC knowledge that doesnt need to go much higher than calculus. Then, you must be good at finding what to use, like this book I tell you about. This book is a goldmine. Because each algorithm is explained so you can implement it in any langage, and because they are without bug and cover all cases.

Some programming jobs WILL require a better level of basic mathematics, because of the FIELD of use : physical simulation, finance, cryptography.

Some companies that handle so huge volumes of data that they need to write algorithms that are optimised enough using various decimation techniques, like Google : algorithm complexity, data structures.

Some jobs like being a SQL developer are much easier if you have a very good understanding of the math theory of Groups, which SQL is based upon.

But please, please, please : do not try to think you can do better work than specialists of mathematics or algorithms. You can't. They have dedicated their lives to those and they will beat the crap out of you with experience that might be greater than the years you have lived since you're born...

Use good sources for algorithms.
Maths : basic operations + how binary works (and why shifts can divide numbers for example)
Modulo
A proper understanding of how computers handle FLOATING point. I think a very famous paper is dedicated to this : READ IT.
Cartesian coordinates (we display stuff, those are useful)
Pythagorean theorem : is used to calculate distance between two coordinates points.
Be fluent in binary, hexadecimal systems and know how to convert between those by hand.

And that's it. You need basic math skills.
Enough to be able to implement properly algorithms given to you as pseudo code. And some areas specific to our trade : the binary/boolean system, how computers store information...

u/bridgesro · 2 pointsr/learnprogramming

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

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

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

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

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

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

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

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

As other's have said, K&R is a great introduction to C, but not a great introduction to programming/computer science. I think more people should try to C as their first language as it gives the student a better idea of what the computer is actually doing than high-level languages. I wish I had a modern book I could refer you to for learning C as a first language, but I am out of the loop, however, I have heard great things about Harvard's free online course: Introduction to Computer Science which uses C (and some other languages).

As far as learning how to be a better programmer, I think one of the key things is to 1) strive to understand what is happening under the hood. 2) Break large problems into smaller ones 3) Logically order the operations needed to complete the tasks that solve the problem, 4) Learn multiple programming languages.

Some tips for becoming a better programmer


Strive to understand what the computer is doing when you execute your program

Understanding what the compiler/interpreter is doing with your source code, how the the processor executes the binary and how information is stored/accessed in memory will help you write more efficient code. The C language is great for learning these things once you start to wrap your mind around it. I would also recommend learning computer organization and hardware. One book I found that really helped me learn what a computer does is The Elements of Computing Systems: Building a Modern Computer from First Principles. I would recommend a casual reading of it, don't get too hung up if you don't quite 'get' it. Read it and see what sinks in. After you get better at C and maybe learn another language, come back to this book and read it again with closer scrutiny.

Break large problems into smaller ones. Logically order the operations needed to complete the tasks that solve the BIG problem

Before I write a single line of code I will spend days, weeks or even months just planning the program out. Flow charts and lists, pseudo code are your friend. Identify your large problem, think about all the different steps needed to get there, write them all down. Determine how to what you need to do to complete each step. Determine if you are doing the same task multiple times (I keep writing data to this log file, I keep checking to see if this array is full, etc.), if so, then you need a function for that. Write this all down as a human readable list of steps. Once you think you have solved the big problem, start coding the small stuff. Write small programs that complete each step you identified and test each little program. Once you've written all those little programs, put the pieces together. Check out How to Think Like A Programmer. It's an excellent book in this area.

Learn multiple programming languages

Again, stick with C until some things are really clicking for you. Eventually though you need to learn another language or two before the "thinking like a programmer" will really sink in. The more languages you learn, the easier it is to learn even more languages. You will begin to see the patterns in languages. You will notice the different approaches that different programming paradigms take. There is a reason that nearly every book, course or tutorial on learning a language follow very similar trajectory: What datatypes exist in this language? How to declare a variable of a particular type. How to output text to the screen, how to cast a variable to a different type, how arrays work in this language, how IF/Then/Else works, How loops work, etc. These are things (nearly) every language has and they are the first steps to learning how to work with that language.

Hope some of this helps!

u/theootz · 6 pointsr/cscareerquestions

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

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

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

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

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

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

Things that helped me:

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

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

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

If you want to dig deep into the theoretical of programming, and help build a good foundation for OOP, patterns, and algorithm design, check out Concrete Mathematics: A Foundation for Computer Science. It is honestly the best textbook I have ever come across.

From there, if you're feeling really ambitious in studying algorithms, check out The Art of Computer Programming, but I should warn you, it is very dense and can be hard to understand even for accomplished developers.

Beyond that, I suggest checking out The Odin Project. It covers a variety of languages and frameworks including Ruby On Rails, which is pretty standard in app development these days. They have a lot of great references and side material. It's basically a "go at your own pace" open source coding boot-camp.

> Like I said, this is for me. I hate just being told "do this" and having no concept of why. I want to understand why I'm doing it, the implications for doing it "this way".

This... This is the mindset that will carry you and eventually make you stand out as an exceptional programmer. Learning how to do something might land you a job, but knowing how it works makes you an invaluable asset to any employer.

As long as you are passionate about learning the material, you will pick it up over time.

>This is where I realized that I was doing this wrong, at least for me. I'd be on codeabbey and know what I wanted to do, but not how. I realized that I needed to be building larger things to be working with oop concepts. I really felt I was missing a lot of "base" information.

Awesome observation. Doing studying and doing drills both have an important role in the learning process, but there are other forms of practice to include in order to reinforce the material in a meaningful way. Ruby Rogues Podcast has a great group discussion about how to learn that I highly suggest you give a listen.

Personally, I learn best by throwing myself into a project where I am in wayyy over my head. By struggling through problems, scrupulously tearing through documentation and examples, I learn a lot more of the why than the how at the end of the day.

I learned Javascript, jQuery, and AJAX by building a templating & ecommerce framework. I started out with little to no knowledge or understanding of how JS worked, and was forced to restart a number of times as I began to see what was good and what was not, but now I feel very comfortable working with it.

Find a problem, and solve it, because Computer Science is, really, just the art of problem solving.

Best of luck, and most importantly, have fun :D

u/insandrium_heart · 1 pointr/learnprogramming

I'm a computer science undergraduate, so I can only tell you about things I've gone through in my curriculum. Which course is right for you depends on what you want to learn.

edit: Whoops, missed the part where you said you were looking for an ebook. In the software design patterns section below, I link to the canonical book on design patterns. Also, Donald E. Knuth's The Art of Computer Programming is a book I haven't yet read, but is known to be a must-read resource for computer scientists. Lastly, check out the Think series by Green Tea Press. It's a growing selection of free, accessible ebooks on major computer science topics.

Algorithms and Data Structures: This topic is about what makes one program run more quickly than another. For example, how much faster is one sorting algorithm from another? Or, what is the best way to store a list of items on the byte-level if I expect a lot of insertions and deletions from the list? This course is one of my favorites, since it really helps get you into the computer scientist mindset. Some people have difficulty with this topic, though, so be prepared.

Assembly programming: If you want a better understanding of what happens when you compile a program, try learning how to program a few easy programs in a simple assembly language like ARM. Assembly programming is basically on the level of what the CPU understands: move this data from RAM to a CPU register, perform this simple arithmetic operation, save this value in this register to RAM. It also helps to learn how GCC compiles a C program to assembly code, and then to binary. There should be plenty of educational resources online about this.

Software design patterns and software engineering: This was broken into two courses at my university. The first course, Design Patterns, was about common patterns that are seen when programming in modern languages, particularly (but not limited to) object-oriented languages. Check out the book on design patterns by the "Gang of Four." The second course, Software Engineering, is about how to work effectively in groups on software projects. This is mandatory learning if you want to work at a tech company!

Computer Systems Organization: I just finished this course. Perhaps this is more what you would be interested in, since you said you were interested in the low level stuff. Computer systems organization is basically about how computer systems work on the level of circuits pushing electrons about, and the pros and cons of modern CPU designs. You learn what happens on each clock tick of the CPU. Knowledge of assembly programming is basically required before you learn about this. This topic is more on the Computer Engineering side of things, but it is important for computer scientists to know as well.

Network Programming: If you would like to understand how the Internet works, how data is transferred between networks, or how programming ties into networking concepts, this is the class for you. You learn things like how packets are sent across networks, how to calculate the time it takes to reach another host on a network, and how the whole system works that lets you connect to the internet, find another computer, and send data to it.

Operating Systems: I haven't taken this course yet (next semester!), but as far as I know, this course is about fundamental concepts that guide operating system design. This includes things like handling hardware/software interrupts, memory paging and multiprocess task switching. There are probably more things that I just haven't learned yet.

Those are some of the major subjects I have come across so far. Hope it helps get you started out!

u/sanyasi · 11 pointsr/compsci

TAOCP is too hard: its like one of those fantasy wishlist items: the kind of thing every computer scientist wishes they had read but never really has the time to. Some nicer books that are gold standards in their respective fields are:

CLRS (Algorithms)

SICP (Just see the top two amazon reviews)

Kernighan and Ritchie (if you want to be a pretty accomplished C programmer and have little to no real C experience before)

Since you mentioned security, Ross Anderson's Security Engineering is a fantastic read, and very easy to parse: you could read it through in less than a week and have a deeply changed view of the structural issues in security: there is little crypto in the book (for that, Schneier is the gold standard) but more discussion about protocols, where protocols fail, real-world protocols like the military classification scheme, etc. It is absolutely fantastic. If you read this and Schneier you'd have a very thorough understanding of the entire security stack.

Kleinberg and Tardos is a much easier read than CLRS when it comes to algorithms, doesn't cover as much, and is very graceful in its explanations. Personally, I love it.

u/CSMastermind · 1 pointr/AskComputerScience

Entrepreneur Reading List


  1. Disrupted: My Misadventure in the Start-Up Bubble
  2. The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win
  3. The E-Myth Revisited: Why Most Small Businesses Don't Work and What to Do About It
  4. The Art of the Start: The Time-Tested, Battle-Hardened Guide for Anyone Starting Anything
  5. The Four Steps to the Epiphany: Successful Strategies for Products that Win
  6. Permission Marketing: Turning Strangers into Friends and Friends into Customers
  7. Ikigai
  8. Reality Check: The Irreverent Guide to Outsmarting, Outmanaging, and Outmarketing Your Competition
  9. Bootstrap: Lessons Learned Building a Successful Company from Scratch
  10. The Marketing Gurus: Lessons from the Best Marketing Books of All Time
  11. Content Rich: Writing Your Way to Wealth on the Web
  12. The Web Startup Success Guide
  13. The Best of Guerrilla Marketing: Guerrilla Marketing Remix
  14. From Program to Product: Turning Your Code into a Saleable Product
  15. This Little Program Went to Market: Create, Deploy, Distribute, Market, and Sell Software and More on the Internet at Little or No Cost to You
  16. The Secrets of Consulting: A Guide to Giving and Getting Advice Successfully
  17. The Innovator's Solution: Creating and Sustaining Successful Growth
  18. Startups Open Sourced: Stories to Inspire and Educate
  19. In Search of Stupidity: Over Twenty Years of High Tech Marketing Disasters
  20. Do More Faster: TechStars Lessons to Accelerate Your Startup
  21. Content Rules: How to Create Killer Blogs, Podcasts, Videos, Ebooks, Webinars (and More) That Engage Customers and Ignite Your Business
  22. Maximum Achievement: Strategies and Skills That Will Unlock Your Hidden Powers to Succeed
  23. Founders at Work: Stories of Startups' Early Days
  24. Blue Ocean Strategy: How to Create Uncontested Market Space and Make Competition Irrelevant
  25. Eric Sink on the Business of Software
  26. Words that Sell: More than 6000 Entries to Help You Promote Your Products, Services, and Ideas
  27. Anything You Want
  28. Crossing the Chasm: Marketing and Selling High-Tech Products to Mainstream Customers
  29. The Innovator's Dilemma: The Revolutionary Book that Will Change the Way You Do Business
  30. Tao Te Ching
  31. Philip & Alex's Guide to Web Publishing
  32. The Tao of Programming
  33. Zen and the Art of Motorcycle Maintenance: An Inquiry into Values
  34. The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity

    Computer Science Grad School Reading List


  35. All the Mathematics You Missed: But Need to Know for Graduate School
  36. Introductory Linear Algebra: An Applied First Course
  37. Introduction to Probability
  38. The Structure of Scientific Revolutions
  39. Science in Action: How to Follow Scientists and Engineers Through Society
  40. Proofs and Refutations: The Logic of Mathematical Discovery
  41. What Is This Thing Called Science?
  42. The Art of Computer Programming
  43. The Little Schemer
  44. The Seasoned Schemer
  45. Data Structures Using C and C++
  46. Algorithms + Data Structures = Programs
  47. Structure and Interpretation of Computer Programs
  48. Concepts, Techniques, and Models of Computer Programming
  49. How to Design Programs: An Introduction to Programming and Computing
  50. A Science of Operations: Machines, Logic and the Invention of Programming
  51. Algorithms on Strings, Trees, and Sequences: Computer Science and Computational Biology
  52. The Computational Beauty of Nature: Computer Explorations of Fractals, Chaos, Complex Systems, and Adaptation
  53. The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine
  54. Computability: An Introduction to Recursive Function Theory
  55. How To Solve It: A New Aspect of Mathematical Method
  56. Types and Programming Languages
  57. Computer Algebra and Symbolic Computation: Elementary Algorithms
  58. Computer Algebra and Symbolic Computation: Mathematical Methods
  59. Commonsense Reasoning
  60. Using Language
  61. Computer Vision
  62. Alice's Adventures in Wonderland
  63. Gödel, Escher, Bach: An Eternal Golden Braid

    Video Game Development Reading List


  64. Game Programming Gems - 1 2 3 4 5 6 7
  65. AI Game Programming Wisdom - 1 2 3 4
  66. Making Games with Python and Pygame
  67. Invent Your Own Computer Games With Python
  68. Bit by Bit
u/Finchlo · 1 pointr/learnprogramming



  1. Is Python good to start? And is it difficult? It is not difficult to start, however biggest issue I had when starting out programming with this language is getting the syntax right, the formatting on it tends to be fussy compared to other languages and it can somewhat be tedious to code in Windows 10 compared to other languages.
  2. Does programming require a lot of "intelligence"? As someone who studies intelligence, the term intelligence can be very subjective, here would help to break down components, you have intelligence quota and emotional quota, in my opinion I believe you have to have a strong balance of emotion and actual intelligence in order to reach the arkasia effect / satisfactory reward to avoid procrastination and such. This is a working hypothesis of mine however. Then you could say as well, being good with math would be beneficial so to be intelligent in mathematics area would help you a lot. It is a really hard thing to define and I have tried to narrow it down best as I can in terms of programming. Problem solving intelligence would also be a good one.
  3. Do you know quality youtubers that make good videos about it?

    ​

    https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw

    https://www.youtube.com/channel/UC9-y-6csu5WGm29I7JiwpnA

    https://www.youtube.com/channel/UCr-5TdGkKszdbboXXsFZJTQ

    https://www.youtube.com/channel/UClcE-kVhqyiHCcjYwcpfj9w

    https://www.youtube.com/channel/UCeQhZOvNKSBRU0Mdg7V44wA

    https://www.youtube.com/channel/UCMy_zy0dw4fCfs2cL7UPBQA

    https://www.youtube.com/channel/UCxzC4EngIsMrPmbm6Nxvb-A

    https://www.youtube.com/channel/UCYaNsGvyvIupxpecr4rZY9A




  4. Do you know any books that can help me?

    - Exercises for programmers: https://www.amazon.fr/dp/1680501224/ref=cm_sw_r_tw_dp_U_x_vAMPCbVG5MBP5

    - Daily coding problem: https://www.amazon.fr/dp/1793296634/ref=cm_sw_r_tw_dp_U_x_2AMPCbT6F7Q4S

    - Any book on 'programming logic and design' however I like the book by Tony Gaddis titled 'starting out with programming logic and design.': https://www.amazon.fr/dp/0134801156/ref=cm_sw_r_tw_dp_U_x_2BMPCbEG3XSET

  5. Do I have to learn a new language for programming (in the sense or maybe there is a country that works very well in there and that could help me on that)?

    There are some variants of programming languages in other languages, however I find pretty much every country will usually code in English with the exceptions mainly being in Russia and China who I believe have strongly developed programming languages in there native languages, not to sure about French, see here for more information: https://en.wikipedia.org/wiki/Non-English-based_programming_languages

  6. What are the most useful programming languages for you?

    The ones I use in my work mostly is usually Python and Matlab for more scientific like stuff, but I also use C and C++ a lot.

  7. What are the best programming languages to start? In my opinion, anything that originated from C is good, I personally started with C++ and Scratch MIT (although many would argue this is not really programming but its good to learn the very basics) and this has allowed me to learn other languages a lot easier, I started around 2012 and I now know how to code kinda decently in about 10 languages or so.
u/mighty-byte · 3 pointsr/AskReddit

As other mentionned, your question is pretty hard to answer on a post, even if it is pretty interesting. But having done a bit of research in discrete math & algorithm design and being a math lover myself, I'll try to talk about why I find my area interesting.

Being a software developper, you should pretty much know what an algorithm is. Given a problem, an algorithm is a recipe/step-by-step set of instructions that, if followed exactly, solves your problem. Algorithms can be classified in a lot of categories: deterministic algorithms (given some input, you always get the same right answer), probabilistic algorithms (you get the right answer 'on average'), approximation algorithms (you get an answer that is within some (provable) factor of the optimal answer) and so on. The main measure (there are multiple others) for the performance of an algorithm is the time it takes to find an answer with respect to the size of the input you are giving it. For example, if your problem is to search through an unordered list of n items for a given item, then the trivial solution (look at every item) takes time n. This is what we call linear in n, but algorithms can run logarithmic in n (takes time log(n) ) (very fast), exponential in n (c^n for some c) (very slow) or polynomial in n (n^k for some k) (efficient).

So the fun part is to find THE best algorithm for your problem. For a particular problem, one may ask how fast can the best algorithm run. Well surprisingly, it turns out that some problems will never admit an efficient EXACT solution. I'll give an example of such problem, and then come to the main point of my discussion.

Consider a graph/network (we love these things in discrete math), which is basically a set of points/nodes/vertices that are connected by links/edges, and its size is usually the number of nodes (the maximum number of edges of a (simple) graph is n^2 - the maximum number of pairs you can make with n elements). The Internet is the best example : nodes are webpages and edges are hyperlinks between theses pages. We say that two nodes are neighbors if they are connected by an edge. A fundamental problem of discrete mathematics goes as follows: what is the minimum number k such that you can color the nodes of a graph with k colors such that not two neighboring nodes share the same color? (http://en.wikipedia.org/wiki/Graph_coloring). It turns out that this problem can be proven to be inherently hard - if we can find an efficient deterministic algorithm (we strongly believe we can't) to solve this problem, than there is an efficient (=fast) algorithm to solve many "hard" problems (ex.: proving a theorem, or solving a sudoku ! - probably not going to happen). Such hard problems are said to be NP-complete. It also turn out that most real life (interesting) problems are also that kind of hard (http://en.wikipedia.org/wiki/List_of_NP-complete_problems).

This sounds quite desperate. However, here is where the research starts. It is said that these NP-complete problems cannot have efficient DETERMINISTIC and EXACT algorithms. Nothing prevents us from producing randomized and approximate solutions. So with some clever analysis, input from other areas (read algebra, geometry, probability, ...) and other tricks, some algorithms are built to find solutions that are usually within a good factor of the optimal. Hell, some NP-complete problems (i.e. Knapsack Problem) even admit an arbitrarly precise efficient algorithm. How is this possible? Reading required!

I don't know of non-scholar books that covered this subject, but if you are motivated, here are the books I suggest:

u/ooa3603 · 2 pointsr/cscareerquestions

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

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

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

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


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

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

u/[deleted] · 11 pointsr/programming

For beginners I would recommend Algorithm Design by Goodrich & Tamassia, or the more Java focused Data Structures & Algorithms in Java by the same authors.

Cranking it up a notch, Algorithm Design by Tardos & Kleinberg is a great accessible text.

As a side, I'm reading Algorithms & Data Structures - The Basic Toolbox which might be free if your school has access to ebooks through Springerlink. I find it excellent for reviewing topics and learning how to design good implementations of the algorithms.

I haven't bothered with TAOCP, but my professors say it's a great algorithm encyclopaedia, which is admittedly useful if your principal interest is algorithm research. CLRS on the other hand is great accessible reference (and textbook) showing some interesting proof techniques, but I find the aforementioned books cover the general breadth of algorithms & data structures in an easier and more accessible manner.

Edit: grammar & comprehension.



u/dbrg_com · 1 pointr/iphone

Sure! These are more relevant to chess though:

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

https://chessprogramming.wikispaces.com/

http://www.talkchess.com

http://www.chessprogramming.net

From a quick look at https://en.wikipedia.org/wiki/Computer_Go , it sounds like you need to be careful about attempting to apply chess techniques to Go (there's a section in the wiki page describing why). It sounds like your evaluation function would end up being very heavy, so if I were approaching this problem, I'd:

  • Get to a reasonable level of Go skill myself (I'm a novice right now)
  • Search around for useable information on the approaches others have taken
  • Put a bit of time into experimentation with board representations that allow optimised evaluation
  • Maybe take a peek at some low level computer graphic algorithms; the "life and death" problem sounds central to Go and seems superficially to have some relation to fills and other graphic techniques. Convex hull might be helpful, for instance, in evaluating isolated groups of stones.
  • Likewise, graph theory might be helpful. It sounds like pattern recognition is a big factor, so understanding which stones relate to which others in a useful way could be modelled using something in this area maybe?
  • Some folks seem to be having some success with neural nets, but unless you have background in that area, I'd avoid that initially; it's a very, very deep rathole... :o)
  • Some of the bitboard tricks used in chess are going to be especially applicable. A great source for deep info on these is Hank Warren's excellent "Hacker's Delight":

    http://www.amazon.com/Hackers-Delight-Edition-Henry-Warren/dp/0321842685

    http://www.hackersdelight.org/

    This is essentially a cookbook of excellent low level bit twiddling tricks; these can massively speed up your code.

    It sounds like zobrist hashes and some kind of transposition table are going to be essential, so that automated testing I mentioned is going to be really important - these are both tricky parts to implement correctly. Alpha-beta, PV search and iterative deepening sound worthwhile in go.

    It does sound like it's all about the state representation for the evaluation function though. Definitely a meaty problem, good luck with it...!
u/valbaca · 2 pointsr/cscareerquestions

These are books I actually own and would recommend. Of course there are other great/better books out there, but I'm going to stick with what I've actually bought and read or "read".

I say "read" because several books are NOT meant to be read cover-to-cover. These typically have about 1/3 that you should read like normal, and then skim the rest and know what's in the rest so that you can quickly reference it. These books are no less important, and often even more important. I've marked these kind of books as #ref for "read for reference". Normal books that should be read cover-to-cover are marked #read


For learning your first language: This is really the hardest part and unfortunately I don't have any books here I can vouch for. I started with "C++ for Dummies" and am not including a link because it's bad. Your best bet is probably "Learning <language>" by Oreily. I also love the Oreily pocket books because you can carry them and skim while on the bus or the john, but you can just do the same with your smartphone. Pocket Python, Pocket Java, Pocket C++

Top Recommendations:

Accelerated C++ #read Made for people who already know another language and want to pickup C++. Also great for people who need a refresher on C++. I really like how it doesn't start with OOP but gets you familiar with the imperative parts of C++ before diving into OOP.

The Algorithm Design Manual #ref This is my new favorite book and the first I would send back in time to myself if I could. Each algorithm & data structure is given a mathematical breakdown, pseudocode, implementation in very readable C, a picture (very helpful), and an interesting war story of how it Saved The Day.


Cracking the Coding Interview #read I originally avoided this book like the plague because it represented everything I hate about coding interviews, but many interviewers pull questions straight from this book so this book can equal getting a job. Put that way, it's ROI is insane.

The Pragmatic Programmer #read Must-have for any profressional software engineer that covers best-practices for code and your growth. You can also find the raw tips list here

Head First Design Patterns #read Many prefer the "GoF/Gang of Four" Design Patterns which is more iconic, but Head First is a modern-version using Java to cover actual design patterns used day-to-day by programmers.

For Intermediates:

Effective Java or Effective C++ and Effective Modern C++ #read When you're ready to go deep into one language, these books will give you a huge boost to writing good Java and C++.

Design Patterns #ref You'll want to get this at some point, but early on it's too much for a beginner and many of the patterns are obsolete.

The Art of Computer Programming #ref The programming "bible" but like Design Patterns you should hold off on this iconic book until you've got your basics covered. It would make for a great purchase with your first paycheck or first promotion :)

u/mdaffin · 10 pointsr/webdev

>Is there something wrong with me? Or is this a normal thing?

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

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

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

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

---

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

u/jephthai · 1 pointr/AskProgramming

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

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

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

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

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

Good luck!

u/general_00 · 2 pointsr/cscareerquestionsEU

It seems like a general shortcoming of bootcamps, although I have not attended any personally (I have a CS degree), so that's only my impression.

--- 2 ---

I think CS fundamentals can be self-thought. The main issue is the sheer volume of the material and deciding what is important and what's not. For example, Cormen's Introduction to Algorithms is an acclaimed classic, but sometimes it's hard to digest and it contains some stuff that can be skipped. If you decide to learn everything in the book on your own, you run into a risk of wasting precious time that could be put to a better use.

I've seen many "Algorithms and Data Structures" courses and books, but there's also other stuff you should know:

  1. Theoretical principles of how computers work: binary system, boolean logic, Turing machine, finite state machine, etc.

  2. Basics of how hardware is built: logic gates, CPUs, memory, etc.

  3. How operating systems work: processes, threads, daemons, interrupts, etc.

  4. Basics of Networking: TCP/IP, Routing, DNS, Load Balancing, etc.

  5. Good practices of producing software: management methodologies, software lifecycle, testing, build systems, dependency management, continuous delivery, etc.

    It can all be learnt, but some of these topics don't have as many good courses as "Algorithms and Data Structures", so you'll spend time just looking for good sources, and then it's easy to dig too deep into a topic, therefore wasting time. The added value of having a teacher is that you receive a pre-selected choice of books, guidance with the parts you struggle to understand, and you don't waste time on drilling the less useful stuff.

    Now, from a perspective of a CS-graduate with real job experience, it's easy to look back and say "it's simple" and "I could learn it in a couple months", but when I was 19 and had no idea about any of that stuff, it obviously took me a lot of time and effort to wrap my head around all those concepts.

    --- 3 ---

    It's significantly easier to get a job in IT without a degree than in most other fields. There's no formal requirement of a degree, and many companies wish for "A CS degree or equivalent experience".

    Not having experience, I think your best chance is to have a CV with a list of completed hobby projects / freelance work. Github link may not help much, but it will not hurt either.
u/PinPinIre · 1 pointr/learnprogramming

It largely depends on which Computer Science degree you are going to do. There can be some that focus heavily on software and very little on hardware and some that get a nice balance between the two. If the degree is going to focus on hardware I would recommend reading up on the underlying logic of a computer and then reading this book (Inside the machine). ITM isn't a very technical book(I would label it as the computer science equivalent of popular science) but it gives a nice clear overview of the what happens in a processor.

When it comes to programming, I would recommend starting with Java and Eclipse. Java gets quite a bit of hate but for a newcomer, I think Java would be easier to grasp than the likes of C/C++. C/C++ are nice languages but a newcomer may find their error messages a little bit obscure and may get confused with the nitty-gritty nuances of the languages.

Though the one thing you should realise is that programming is a skill that isn't confined to one language. If you understand the basic concepts of recursion, arrays, classes, generics/templates, inheritance, etc. you can apply this knowledge to almost any language. Ideally i would recomend two books on programming (Algorithmics) and (Introduction to Algorithms). Algorithmics is another books I would label as the cs equivalent to popular science but the early chapters give a nice overview of exactly what algorithms actually are. Introduction to Algorithms is a more technical book that I would recommend to someone once they know how to program and want a deeper understanding of algorithms.

The rest is personal preference, personally I prefer to use a Unix machine with Sublime Text 2 and the command line. Some will try to convince you to use Vim or Emacs but you should just find whichever you are most comfortable with.

u/cabbagerat · 10 pointsr/compsci

Start with a good algorithms book like Introduction to algorithms. You'll also want a good discrete math text. Concrete Mathematics is one that I like, but there are several great alternatives. If you are learning new math, pick up The Princeton Companion To Mathematics, which is a great reference to have around if you find yourself with a gap in your knowledge. Not a seminal text in theoretical CS, but certain to expand your mind, is Purely functional data structures.

On the practice side, pick up a copy of The C programming language. Not only is K&R a classic text, and a great read, it really set the tone for the way that programming has been taught and learned ever since. I also highly recommend Elements of Programming.

Also, since you mention Papadimitriou, take a look at Logicomix.

u/crookedkr · 2 pointsr/AskComputerScience

What does he like in CS? Any hint would be helpful. Has he chosen a track (most schools let you choose an area of CS to specialize in, I was sysyems but we had theory, architecture, ai, and one or two others)?

Maybe a math clcok? There are a couple good ones but I think you can design your own and we could help you get better "numbers".

I got the first edition of this as a gift and was thrilled but its very low level (bit manipulation and assembly optimizations) so won't be for everyone (if you have heard him say something positive about C programming its probably a good choice if he loves ruby on rails maybe not).

u/haxifix · 2 pointsr/learnprogramming

I completely agree with your observation that programming is more of a way of thinking than it is about knowing the syntax of a specific language. Yes, we may all have our preference or most used language, however; any programmer is going to have multiple languages that they know and it also is usually not difficult to pick up a new language once you're a programmer for that exact reason.

That aside, a quick google search brought this book up. I do not have this book nor have I read it, but it seems like a decent book for $15. Remember, there is no substitute for solving problems on your own though. The book may give you insight and hints and may give you a list of challenges with solutions, but you can also improve your problem solving skills by just googling "beginner programming challenges" and attempting to solve some of them.

Hope this post helped you, if you have any more questions feel free to ask or PM me :)

Best Regards,

Kevin

u/TheStudyOf_Wumbo · 8 pointsr/UofT

CSC265 should only be reserved for people who truly love math. Not for people who like math and enjoy it, but the people who sit up at night reading math textbooks for fun and doing Spivak because it feels good. I took it because I wanted to be elite at data structures. I ended up getting an offer at Google but 265 did not prepare me for interviews in the way that I thought (what I'm trying to say is my offer at Google was not because of 265).

You will be doing purely math. A lot of the topics are covered in more depth, and you have to read chapters on your own.

The questions I got were absolutely insane and had me working unbelievably hard. I'd put in almost 25-30 hours a week for the course. I was able to get 90's on the assignments (but one of them was downright impossible).

There's a lot of really smart math geniuses who take the class so if you're a "normie" or even just "smart", you will feel like an idiot. People would come to class and clearly had read way ahead, so the TA would blaze forward since you'd feel like an idiot going "no I don't get this" constantly. You'd have to spend a ton of time at home playing catch up. All my practical knowledge of data structures wasn't too useful, but attempting Faith's homework prior to doing the course helped me the most. If anything, I think reading TAOCP is probably the best preparation, but it's probably not even feasible for anyone to do that before this class because it probably takes years to properly read that.

One of the questions we got was some probability question that I literally could not get after 30 hours of trying. It was impossible for me. The answer ended up being a published paper, so you get the question then you pretty much could have published the paper if you did this question 30 years ago. When I practiced on Faith's assignments for 265, there was not a question that I found that insane to the point where I couldn't get it.

This class should only be taken IMO if you want to do algorithm research or were bored out of your mind in CSC236/CSC240. I don't know if this course is physically possible if you do it with MAT257 and 3 other courses, but I'm sure some genius would prove me wrong. There is no physical way you could do 5 courses with one of them being CSC265 and work on side projects to prepare for PEY unless you are really good.

Also it's the first class I ever took where the average was so shit for the midterm that one of the questions got turned into a bonus question right after the midterm (usually they just shift people up at the end, so doing it after a midterm tells you something).

Maybe people who did MAT157 can handle such things, I'm not sure. It was the most stressful semester I ever did. What I learned was amazing, but it will definitely fade in time because I will probably never use that knowledge since I don't intend on going to graduate school.

I'd further only recommend that class to people who are sadistic enough to enjoy such hard questions where you are literally freaking out 2 days before it's due because in 12 days you still weren't able to find the solution and kept finding holes in the problem. How I managed to get 90's on the assignment when the class average was between 65-72 is beyond me.

Lastly, this course feels much different from other courses cause the math at times isn't hard, it's just proving some discrete property tends to be nuts. However, the part I found really hard might actually be better off with people having real analysis since it was probability and real numbers which I'm not as good at.

tl;dr: If you get through it, you will be a Navy SEAL for CS. If you are asking "is the workload too much" when deciding to take this course, you should not take this course.

EDIT: I should also say if you're a CS genius then maybe the workload is normal.

u/samort7 · 257 pointsr/learnprogramming

Here's my list of the classics:

General Computing

u/Wolfspaw · 3 pointsr/learnprogramming

There are some good books to help you in your quest, they discusses all programming techniques needed in competitions: greedy algorithms, dynamic programming, data structures... A lot of overlap
between them :

Competitive Programming 2 : Great book, a lot of
information packed

Art of Programming Contest : FREE book available from ACM site

Programming Challenges : From a famous
competition Professor (Skiena)

The Hitchker Guide to Programming Contests : Another FREE book,
Great Ideas

The Algorithm Design Manual : Another book from
skiena, talks about the practical applications of famous techniques and
algorithms used in competitions

Introduction to algorithms : THE book about
algorithms... In-depth explanations

Google code Jam contest analysis : Google Code Jam is a great
competition, with a lot of hard problems. And all of them have a
solution and analysis !

u/SamHennessy · 1 pointr/PHP

When I said "I can see how maybe they could be useless to you.", that's because I instantly know what kind of programmer you were. You're a low level guy.

I have a copy of "Algorithms in a Nutshell" (http://www.amazon.com/Algorithms-Nutshell-In-OReilly/dp/059651624X) but I never finished it. My favorit programming book may be "Patterns of Enterprise Application Architecture" (http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420). Neither of these books are language specific, but I don't think they could be further apart in every way. Both are very valuable and I appreciate that they both exist.

There is a good number of reasons that you should maximize your use of the built-in PHP functions (http://webandphp.com/5reasonstomaximizeyouruseofPHP%E2%80%99sbuiltinfeatures). My book is an attempt to come up with a system that will help you learn all of the built-in PHP functions by giving a realistic use case that could be applied in your everyday work.

Being a PHP programmer, it is much more useful to know what functions PHP has for array sorting, than it is to know how to implement array sorting in PHP code.

u/cjsenecal · 2 pointsr/TheRedPill

STEM jobs are highly sought after nowadays and will continue to grow in the future. If you have a degree in computer science or medicine you're golden.

I'm 25 now and I work in the architecture field. I'm not an architect but simply a CAD operator, so I'm basically at the bottom of the barrel as far as pay. One of the things my ex told me when she broke up with me (the reason I came to TRP in the first place, surprise surprise.) was that she didn't think I wanted more in my life. That really set me off and stuck with me because at the time she was right.

Now I'm applying to schools. When I was 18 I originally majored in CSCI but didn't apply myself and dropped out. Now I've made it full circle and would really like to get back into it. I've only completed a couple basic lessons through Codecademy learning HTML and walking through how to make a website. I just need to keep building and learning.

I love tech stuff myself. Always like to have the latest and greatest and I built my own computer so I know how they work, I just need to learn how to communicate with them.

Do you recommend any physical books? I have this one ready to buy already.

u/rdesmond101 · 2 pointsr/writing

Ah, okay on that I agree. I thought originally you were dismissing reading entire books in general because of tools like google which gives instant access to individual bits of information.

Particularly, for algorithm design, this one I read for college. It starts out with a motivation, what is an algorithm? Why do we study them? It then gives definitions for how to measure the performance of an algorithm. With a metric established, it picks a basic process we take for granted, addition, and breaks it down to how a computer would run the algorithm that we run in our heads. Then, it introduces an alternative algorithm that actually performs better than the one we use intuitively. And this is all in the first chapter. Every paragraph builds on another, relates back to the chapter, and ultimately, the theme of the book which implores us to answer the questions: Can we solve this problem? If so, how fast? And can we do better? Dynamic programming, divide-and-conquer, linear programming are all useful tools in and of themselves, but unified they provide a coherent narrative: What kinds of problems can computers never solve? How should one approach a problem that, on the surface, seems unfamiliar? And to be fair, the insights are expressed directly. In italics. At the beginning of the textbook. But it wouldn't have much meaning unless you understood the context in which the insights related to. Anywho, this is just one example of many where reading a book in its entirety allowed me to gain a valuable skill (or in literature, a different perspective), rather than a fixed atom of knowledge.

I guess when I first read your post, it worried me when you said that the information density of most books is impractically small and that the value of most books lie in random particles dispersed throughout, rather than as a unified collection of ideas. For me, it has been the opposite: the majority of books I've read, though time consuming, have paid enormous dividends not because of the discrete particles of knowledge they dispensed (Hamlet kills Claudius), but rather because they have changed the way I look at life (what am I tasked to do by my family or society, what purpose is worth acting for?) Though it seems like you understand this already, you just don't like the fact that the author seems to advocate for undue amounts of reading because "that's how it was in my day".

u/Doglatine · 5 pointsr/askphilosophy

This may not be exactly what you were asking for, but as someone who's interested in both philosophical aesthetics and design, I've found basic color theory and vision science a very useful thing to learn about. Here's a great vision science book that keenly engages our experience of the world.

Another completely different source of inspiration I've found for thinking about abstract principles in aesthetic experience has come from Scott McCloud's book Understanding Comics. It really does explore a bunch of complex ideas about how we can piece together a beautiful/ugly/complex/dynamic/static/etc. picture of the world from two dimensional images. It's not just about comics at all.

u/zzyzzyxx · 3 pointsr/learnprogramming

> Is it even possible to get jobs in software development with an EE degree and quasi-software development experience?

Yes, as I have my degree in Electrical and Computer Engineering, which included maybe 3-4 "proper" CS courses, and I was employed as a full-time software developer right out of college.

> So how do I fill the large gaps in general Computer Science knowledge?

I think it comes down to "read and do". Read blogs, books, and maybe even code from reputable sources. Try new things, like languages, paradigms, and frameworks. If you have some idea about the gaps in your knowledge, i.e. you know what you don't know, then start searching there. Begin at Wikipedia, look at the sources and related links, and just keep pressing on.

In general I find it's pretty easy to learn about new things. If you keep reading, you'll eventually come across something you didn't know or hadn't heard of before, and probably more often than you'd think. Sometimes it's just worth knowing that something exists that you can learn about later when you actually need it. You definitely don't have to learn all facets of programming in depth.

Since you mentioned algorithms, maybe check out TAOCP. The first volume is about algorithms. It is language agnostic and based heavily on math, though you don't need a math degree to follow along by any means. It's surprisingly readable, too. *Though that doesn't mean you should sit down and read it like a novel.

u/karmahawk · 2 pointsr/cscareerquestions

So I am more of a book guy these days. I found Algorithms + Data Structures = Programs by Niklaus Wirth to be pretty solid. For something a bit more contemporary Introduction to Algorithms by Cormen, Leiserson, Rivest and Stein is a very good textbook. If you're into math and learn best from repetition I'd suggest The Art of Programming Vol 1 by Knuth as well.

The issue I have with a lot of online content is the economics of the Internet are such that its not profitable to go in-depth, so its definitely worth paring online courses(whether they're from an accredited university or not) with a textbook or two. You might even want to crawl down the rabbit hole further and dig into the camps of mathematics where these concepts derive like Queue Theory or Set Theory. If your the type of person who gets the most out of things by tracing concepts to their roots digging into the maths helps a ton.

u/IRLeif · 2 pointsr/INTP

My elementary school and high school teachers made me detest mathematics at an early age, but I have taken up interest for it in later years. Last week, I purchased the books Concrete Mathematics and The Art of Computer Programming, which I plan to start reading soon. But first I need to school myself on some topics with Khan Academy and MIT OpenCourseWare. I've also posted this thread last week on /r/learnprogramming hoping to get some input, and lurking at /r/math and the Mathematics StackExchange. I'm quickly gaining interest for the subject :)

u/Elynole · 1 pointr/nfl

I'll throw out some of my favorite books from my book shelf when it comes to Computer Science, User Experience, and Mathematics - all will be essential as you begin your journey into app development:

Universal Principles of Design

Dieter Rams: As Little Design as Possible

Rework by 37signals

Clean Code

The Art of Programming

The Mythical Man-Month

The Pragmatic Programmer

Design Patterns - "Gang of Four"

Programming Language Pragmatics

Compilers - "The Dragon Book"

The Language of Mathematics

A Mathematician's Lament

The Joy of x

Mathematics: Its Content, Methods, and Meaning

Introduction to Algorithms (MIT)

If time isn't a factor, and you're not needing to steamroll into this to make money, then I'd highly encourage you to start by using a lower-level programming language like C first - or, start from the database side of things and begin learning SQL and playing around with database development.

I feel like truly understanding data structures from the lowest level is one of the most important things you can do as a budding developer.


u/timjstewart · 1 pointr/cpp

EoP (I'll refer to it by its initials as is customary with all great books) was an amazing, mind-expanding book. If you enjoyed it, you will probably like the lecture videos that Dr. Stepanov gave at Amazon (https://www.youtube.com/playlist?list=PLHxtyCq_WDLXryyw91lahwdtpZsmo4BGD). There are 38 of these great videos. I can't wait for his upcoming book, "From Mathematics to Generic Programming" (http://www.amazon.com/Mathematics-Generic-Programming-Alexander-Stepanov/dp/0321942043).

u/furyfairy · 2 pointsr/electronics

>> a AVR is often not quite the right device for the task.

Fuck it. Use the teensy 3. powerful, efficient , versatile arduino.

>> skill or willpower to write the needet software.

Tools like the arduino help. Also , this book teaches how to think like a programmer:

https://www.amazon.com/Think-Like-Programmer-Introduction-Creative/dp/1593274246/ref=sr_1_43?ie=UTF8&qid=1478106303&sr=8-43&keywords=how+to+design+programs

As for motivation, once you'll have the skill , it might come , because you'll able to get small wins pretty rapidly.

>> But that makes the component selection fairly hard

Please explain ?

u/akame_21 · 6 pointsr/OSUOnlineCS

I would follow up on the courses delia_ann posted. I preferred the MIT course over the Harvard course for several reasons but YMMV.

I would recommend brushing up on math if you think you might have trouble, but considering you have an engineering background this may not be necessary. Before I started the program I worked through khan academy for several months and it helped me a lot in 225: Discrete Math.

Since this is the close of my first semester I decided I'm going to spend time off between semesters to take courses on edx and/or start reading the textbook(s) for my next class. Having rudimentary knowledge of the subject matter before the class starts makes things so much easier.

Someone on this sub recommended Think Like a Programmer to me, and that's what I'm using to reinforce concepts and get ready for 162 next semester (especially because it uses C++). There's a free pdf on that you can find using google. This may be a good read for you when you get a little experience using C++.

u/deong · 1 pointr/compsci

Aside from the other excellent choices people have recommended, here are a few I liked that I haven't seen in the thread yet.

  • The Art of the Metaobject Protocol

    This one sounds super-obscure. It's basically the design notes for the Common Lisp Object System, which isn't exactly a manual you need to read to get your work done. However, if you look at it less a book about how to use CLOS and more a book about how an object-oriented language can be built from scratch, it's really a fantastic little read.

  • Coders at Work

    It's what it says on the tin -- interviews with several programming icons. What makes this one better than the other half-dozen or so similar titles is how well the author runs those interviews.

  • Elements of Programming

    If I'm honest, I didn't find this one to be that engaging of a read, but it's worth the bit of effort to get through it just to absorb Stepanov's vision for how to express algorithms. He's got a newer book as well that I have high hopes for, but I haven't had a chance to read it yet.
u/spankalee · 2 pointsr/UCSC

It's a great course and Dimitris is a very good teacher. It is pretty challenging and Dimitris expects you to keep up, so most importantly take it seriously and make sure you intuitively and analytically understand each part. Ask questions and go to office hours. Some of the techniques taught in this class are very important for use in industry.

When I took the class he used Algorithms by Dasgupta:http://www.amazon.com/Algorithms-Sanjoy-Dasgupta/dp/0073523402

There used to be a free PDF available as well.

u/nemotux · 3 pointsr/compsci

Your questions are actually very relevant for optimizing compilers (and for people who like to do bit twiddling). Many folks already mentioned division by a power of 2 - that's just shifting the bits to the right by the right number of places. Very fast. But there are also algorithms for dividing by other constants - for example, there are specific tricks for efficiently dividing by 3, 5, or 7. Compilers will look for opportunities to convert general-purpose division into one of these forms. And some times that can happen as a result of what's called "constant propagation". So you write in one place in the code a division like: "x/y", where locally you don't know what values x and y have. The compiler, however, might be able to prove that y is always 3, so it optimizes the general division to use the faster division-by-3 algorithm.

For an interesting read on this many other bit twiddling tricks, check out Hacker's Delight. It's a fun read for anyone interested in this kind of thing.

u/zeroms · 1 pointr/engineering

I started programming at around 12 and I can assure you, if you put some effort, you can close the distance in a matter of months. My advice:

  • Learn C and Python. Learning C will help you think at a lower level about programs, plus in the microcontroller world it's the lingua franca. Python is great for prototyping ideas quickly and also learning programming/CS concepts without syntax getting in the way. You could also start building "big" programs with it given that the speed of interpretation is getting faster and faster.

  • Get Hacker's Delight. It's a great little book FULL of programming advice and tips.

  • Learn Your Data Structures. This is a very VERY important thing.

  • Program as much as you can. Practice makes perfect.

u/StoneCypher · -2 pointsr/javascript

Everyone here is going to give you a bunch of 30-days or head-first books - many of which will have the ostensible impremateur of big names like Crockford and Resig.

Let me be the first to tell you to basically ignore this crap.

Read the standard, get a good reference on browser differences, then focus on real programming books that are not language specific. That's the way to rise above making jQuery plugins and "HTML5 Game Demos" of Atari 2600 games.

The standard:

http://www.ecma-international.org/publications/standards/Ecma-262.htm

Good reference on browser differences:

http://www.quirksmode.org/compatibility.html

The kinds of books you should be reading (notice the used prices please):

http://www.amazon.com/Introduction-Algorithms-CD-Rom-Thomas-Cormen/dp/0072970545/ref=sr_1_1?ie=UTF8&qid=1313160060&sr=8-1

http://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxed/dp/0321751043/ref=sr_1_1?ie=UTF8&qid=1313160086&sr=8-1

http://www.amazon.com/Structure-Interpretation-Computer-Programs-Second/dp/0070004846/ref=sr_1_1?ie=UTF8&qid=1313160117&sr=8-1

http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&qid=1313160130&sr=8-1

http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_1?ie=UTF8&qid=1313160138&sr=8-1

I'd throw in a rickroll if I could.

A deep knowledge of CSS will help. If Javascript is your hammer, CSS is your screwdriver; the two are very related in most cases (sure there are exceptions, like node servers, but they're not common.)

Like JS, the best way to learn CSS is the standard.

http://www.w3.org/TR/CSS21/

Happy hunting.

u/DominikPeters · 2 pointsr/compsci

CLRS is the standard text for algorithms, but it is not obviously student-friendly. (I can't learn from it very well, and there are few exercises.) I'd recommend you take a look at this book, written by reputable authors, which is easy to read, covers interesting topics in addition to the standard core, and has tons of exercises. The book used to be available online but now McGraw Hill has told the authors to take it down. Googling "Dasgupta Algorithms" will give you a pdf either way.

[Also note the book's chapter on complexity. It provides a nice intuitive intro into NP-completeness that's somewhat light on rigour and uses non-standard definitions, but reading it first might make understanding Sipser easier.]

u/R_Moony_Lupin · 2 pointsr/math

Thank you for your comment. Yep, regarding the pedagogy of LP, I have pretty much covered what you say here

>This shows that LPs can be solved in finite time, which isn't even obvious. It also introduces the essential idea behind simplex, namely that a vertex can be described combinatorially by choosing n of the k inequalities.

in a previous article. Also this book [Algorithms - Dasgupta, Papadimitriou, Vazirani] inspired me to write about LP in a more intuitive way, it has a really good introductory chapter in LP :)

u/Freak-Power · 1 pointr/geek

I'd recommend Tanenbaum's Modern Operating Systems, that should get you started on beginning to understand what goes on inside your computer. If you'd like further reading and you want a mental beat-down, you can't go wrong with Knuth's The Art of Computer Programming. Want to start with programming? One of my favorites is The C Programming Language by K&R. Those three recommendations, while they add up to a single semester's tuition, are worth way more than that. Good luck!

u/timmense · 3 pointsr/cscareerquestions
u/lurkotato · 12 pointsr/AskEngineers

Work has been pants-on-fire-mode for the past year+. I'm pretty burnt out, don't have any desire to study after work and feel like someone will get on my case if I do any relevant studying during work hours. I really don't understand our products that well either (RF), but doing that sort of studying at work would definitely be seen as wasting time since I'm in software now.

For the specifics, I'm going to crack open several of my core textbooks from college and thoroughly work through them. At a high level I understand the concepts, but I haven't internalized a lot which slows me down when I need to learn something more advanced on the job. I've tried this type of study for a week previously when I was motivated at home and it was an incredible boost to my job performance. However, that was during a slow period. Additionally, if I'm going all out and quitting my job I expect that I would have relevant projects so studies wouldn't go in one ear and out the other.

Edit: I'm just rambling at this point, but
> Why can't you study the things you need for work as you need them?

Have you ever found that you can't use what you don't know exists? Some books (Elements of Programming) really blew my mind open, but I would have had no idea how useful the contents would have been before going through them.

u/MmmCurry · 5 pointsr/compsci

Not specific to algorithms or even to CS, but Douglas Hofstadter (Gödel, Escher, Bach, I Am a Strange Loop) touches on many of the logical fundamentals in a relatively layman-digestable manner.

I wouldn't call him easy reading compared to Sagan or Kaku, and don't know a "pop computer science" equivalent to those two, but you definitely don't need a CS or math degree to get through GEB. Whether it's on-topic enough here is definitely questionable.

---

Edit: I haven't read it, but from the description this one by Thomas Cormen looks like it might be close to what you're looking for: Algorithms Unlocked.

"This is a unique book in its attempt to open the field of algorithms to a wider audience. It provides an easy-to-read introduction to an abstract topic, without sacrificing depth."

From the TOC, it looks like it's probably fairly light on math but gets into code or pseudocode relatively quickly. I still wouldn't call it pop-CS, but if that sounds like a fit, maybe give it a shot!

u/PresidenTrumpCamacho · 1 pointr/The_Donald

It seems you only know how to work with the code and write it, but you never actually learned why it works. At least that's my diagnosis from reading your reply. Perhaps the best thing you can do is study better programming logic, so that you understand why things work they way they do. [I've read this book] (https://www.amazon.com/Think-Like-Programmer-Introduction-Creative/dp/1593274246/ref=sr_1_3?ie=UTF8&qid=1480967641&sr=8-3&keywords=programming+logic) and it helped me. Read it and see what you can do after with the languages that you already know.

edit: Clarification - When you understand the reason why a line of code does the action you wanted then it becomes easy to never mix things up, because you will start looking at your code as more then just syntax.

edit 2: Grammar.

u/PretzelSmoothie · 1 pointr/OSUOnlineCS

I found this book really helpful! It isn't solely about pointers, but rather how to solve problems in C++. However, it has a chapter on pointers and dynamic memory that I found really useful. Definitely worth a gander.

u/crimsonmia · 3 pointsr/cscareerquestions

It sounds to me like you do know what you don't know, plus you have the motivation to learn on your own. Check out some of the free online courses here (scroll down and check out the CS categories). Get a book like Algorithms in a Nutshell and code some of them up (ignoring and/or learning from the book's website's implementations). Work in a new language (I'd suggest Java, as I think C++ is harder to learn on your own w/o a mentor). Ask (and answer) questions on stack overflow

Resume-wise, don't call yourself a "programmer". "Software developer" instead.

TBH it sounds like you have enough skill already to get an internship or entry-level job... could be helpful to direct the course of your studies. Without that direction, how do you know whether to focus on Java or C++? Perl, Python, or Ruby? etc. since you don't know what that next/first job is going to require.

u/LazyAnt_ · 1 pointr/cscareerquestions

I just saw your edit. Since you are not looking for books just like Grokking Algorithms, I will suggest another amazing book on algorithms.

https://www.amazon.co.uk/Algorithm-Design-Jon-Kleinberg/dp/0321295358

Algorithm Design by Kleinberg and Tardos. I thoroughly enjoyed it and I highly recommend it to anyone interested in algorithms. One of my favourites.

u/Quinnjaminn · 3 pointsr/cscareerquestions

Copy pasting my response to a similar question:

Edited to have more resources and be easier to read.

It's hard to draw the line between "essential" and "recommended." That depends a lot on what you want to do. So, I will present a rough outline of core topics covered in the 4 year CS program at my university (UC Berkeley). This is not a strict order of topics, but prerequisites occur before topics that depend on them.

Intro CS

Topics include Environments/Scoping, abstraction, recursion, Object oriented vs functional programming models, strings, dictionaries, Interpreters. Taught in Python.

The class is based on the classic MIT text, "Structure and Interpretation of Computer Programs." Of course, that book is from 1984 and uses Scheme, which many people don't want to learn due to its rarity in industry. We shifted recently to reading materials based on SICP, but presented in python. I believe this is the reading used now. This course is almost entirely posted online. The course page is visible to public, and has the readings, discussion slides / questions and solutions, project specs, review slides, etc. You can find it here.

Data Structures and basic algorithms

DS: Arrays, Linked Lists, Trees (Binary search, B, Spaly, Red-Black), Hash Tables, Stacks/Queues, Heaps, Graphs. Algorithms: Search (Breadth first vs depth first), Sorting (Bubble, radix, bucket, merge, quick, selection, insert, etc), Dijkstra's and Kruskal's, Big-O analysis.

This class uses two books: "Head First Java" and "Data Structures and Algorithms in Java" (any edition except 2). The class doesn't presupposed knowledge in any language, so the first portion is covering Object Oriented principles and Java from a java book (doesn't really matter which), then moving to the core topics of data structures and algorithms. The course page has some absolutely fantastic notes -- I skim through these before every interview to review. You can also check out the projects and homeworks if you want to follow along. The course page is available here (note that it gets updated with new semesters, and links will be removed -- download them soon if you want to use them).

Machine Structures (Intro Architecture)

Warehouse scale computing (Hadoop Map-Reduce). C language, basics of assemblers/compilers/linkers, bit manipulation, number representation. Assembly Language (MIPS). CPU Structure, pipelining, threading, virtual memory paging systems. Caching / memory hierarchy. Optimization / Performance analysis, parallelism (Open MP), SIMD (SSE Intrinsics).

This class uses two books: "The C Programming Language" and "Computer Organization and Design". This class is taught primarily in C, so the first few weeks are spent as a crash course in C, along with a discussion/project using Map-Reduce. From there in jumps into Computer Organization and Design. I personally loved the projects I did in this class. As with above, the lecture slides, discussion notes, homeworks, labs, solutions, and projects are all available on an archived course page.

Discrete Math / Probability Theory

Logic, Proofs, Induction, Modular Arithmetic (RSA / Euclid's Algorithm). Polynomials over finite fields. Probability (expectation / variance) and it's applicability to hashing. Distributions, Probabilistic Inference. Graph Theory. Countability.

Time to step away from coding! This is a math class, plain and simple. As for book, well, we really didn't have one. The class is based on a series of "Notes" developed for the class. When taken as a whole, these notes serve as the official textbook. The notes, homeworks, etc are here.

Efficient Algorithms and Intractable Problems

Designing and analyzing algorithms. Lower bounds. Divide and Conquer problems. Search problems. Graph problems. Greedy algorithms. Linear and Dynamic programming. NP-Completeness. Parallel algorithms.

The Efficient Algorithms class stopped posting all of the resources online, but an archived version from 2009 has homeworks, reading lists, and solutions. This is the book used.

Operating Systems and System Programming

Concurrency and Synchronization. Memory and Caching. Scheduling and Queuing theory. Filesystems and databases. Security. Networking.

The Operating Systems class uses this book, and all of the lectures and materials are archived here (Spring 2013).

Math

Those are the core classes, not including about 4 (minimum) required technical upper division electives to graduate with a B.A. in CS. The math required is:

  • Calculus 1 and 2 (Calc AB/BC, most people test out, though I didn't)

  • Multivariable calculus (not strictly necessary, just recommended)

  • Linear Algebra and Differential Equations.

    Those are the core classes you can expect any graduate from my university to have taken, plus 4 CS electives related to their interests. If you could tell me more about your goals, I might be able to refine it more.
u/andralex · 4 pointsr/IAmA

I don't know of many C++-specific materials for performance engineering. But a surprising ingredient is math. Take a look at Hacker's Delight. It's a bunch of bit twiddling hacks derived from immutable mathematical truths.

A lot of good optimizations stem from a good understanding of the computing fabric combined with an ability to formalize abstractions that mesh well with it.

u/aspartame_junky · 2 pointsr/AskReddit

It's on my bookshelf, although currently reading more on emergent phenomena, such as Philip Ball's Critical Mass: How One Thing Leads to Another and some books on game theory. GEB, of course, was a big influence too :)

Regarding perception, I still tend to refer to my undergrad perception textbook Vision Science: Photons to Phenomenology. It's highly readable, even if you're not a specialist, although if you are interested in something more easy to digest, there is Richard Gregory's seminal book Eye and Brain, which is a great introduction to vision science and perception.

u/chrispyYE · 1 pointr/learnprogramming

First of all, thanks for you answer.
For example I have a python object containing 5 attributes.
attr1, attr2, attr3, attr4, attr4, attr5
Some of them are Integeter, some of them dates and some of them Strings. For example I'd like a function that returns me all objects based on criteria
attr1 > 10 && attr3 = 'randomString'
Would a list of Dicts be faster or a list of objects. Also if you happen to know any good book that explains this stuff it would be awesome.
Something like this one? https://www.amazon.com/Algorithms-Structures-Prentice-Hall-Automatic-Computation/dp/0130224189

u/kalhartt · 0 pointsr/TwoXChromosomes

Maybe you would prefer "working knowledge" over "solid grasp". My point is that the math known and used daily is well beyond basic "arithmetic".

If you ever have the time, I recommend you read the bible of programming, Knuth's TAOCP. The math inside may surprise you. Does it have combinatorics, eigenvalues, integrals, fourier transforms, euler totients and more? You bet! Does it tell you that the factorial is readily extended to non-integers, eh... not so much. An example more relevant to the fields listed above, lets say I have some user data that needs to be stored and I want to be able to sort/search/join on certain functions of the data. What is the best way to store the data and what are the runtime complexities for the queries I need?

u/daysofdre · 5 pointsr/learnprogramming

Hey, I recommend the book Think Like a Programmer: An Introduction to Creative Problem Solving. I can't take credit for the suggestion, it was suggested by another redditor who made a great post about how to start coding when you're stuck and the problems he faced. He recommended this book, and I've been reading some of it, and it's spot-on. Easy to understand, easy to read, and will help you come up with steps on how to think systematically.

u/sick_anon · 8 pointsr/algorithms

I suggest you to not waste too much time reading 15 different books on algorithms or spreading on 15 different resources (YT videos, online courses, forums, tutorials, etc.). Stick to 1 or 2 good books (try Introduction to Algorithms and, if you're completely new to algorithms, and have no idea what are they and what is their role in computer science and science in general, I recommend book by same author that could make a good preparation to previous book; it's called Algorithms Unlocked ) and start applying that knowledge in the run (solving problems). Remember: don't waste time on hundreds of resources; they may be great and offer some really high quality information about topic, but you just don't have time to go through all of them. Good luck!

u/ontoillogical · 4 pointsr/compsci

The Sipser book mentioned elsewhere is pretty much all of those topics. You may also be interested in a good algorithms book. CLRS has been recommended elsewhere, but Kleinberg & Tardos is probably more accessible. I am using both in school right now, and I find CLRS as a better reference (more breadth) and K&T better for exposition.

u/zach2good · 2 pointsr/AskProgramming
u/cheerfulloser · 1 pointr/learnprogramming

The top things that you're tested on during interviews are:

  1. proficiency/skill with your primary programming language
  2. algorithms
  3. data structures

    It looks like you're well on your way to #1. I am not a .NET developer, so can't help much there.

    However, here're my suggestions for #2 and #3

    algorithms - CLRS is a standard book for algorithms in university courses (http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844). However, I found the book a bit of a dull read. It might be better to start off with this book instead (http://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/0321295358)

    Data structures - I don't have a specific book in mind but I suggest looking up Amazon reviews and getting a highly rated book.

    The reason algorithms and data structures are tested heavily is because you want to write an efficient algorithm/solution for your work projects & tasks. Depending on the situation, having a good eye for determining the appropriate data structure and algorithm is a must.
u/reddilada · 6 pointsr/learnprogramming

Consuming large quantities of beer should get you in the right frame of mind.

Read books. Learn common data structures and algorithms. Watch what others do. Learn from mistakes. Practice.

I like The Practice of Programming for a good overview of the development process.

e: /u/desrtfx has recommended Think Like a Programmer in the past. Not read it myself, but looks like a good book as well.

u/john12tucker · 2 pointsr/DebateReligion

> My reading of it was more along the lines of: your sensory input are not you, and you should not cling to them, the self is always changing, so you shouldn't expect yourself to be reborn as the exact same person in your next life. This is a far cry from "you, as a discrete "self", do not really exist"

I think you half-understood. If your self is always changing, in what capacity does your self exist at all? The self that you associate with "you", in the next instant, will be utterly different; so what is being preserved? What indelible "self-hood" is being passed along? If I build a sand castle, then knock it down and build a new one, and then knock it down and build a third one, and so on, in what sense can you say that the original castle remains?

> I believe that i have a point of focus different from my brain (information source/depository), because even if a computer could store all the information in my brain, there'd still need to be someone/something browsing and calling up certain bits of information for it to do what it does.

Not necessarily; automation is the heart and soul (as it were) of computing. Google has programs that scour billions of webpages, collating and indexing the data, and there is nobody on the other end dictating precisely what it must do or how it must accomplish it. What you've described is a data structure, which is only half the utility of computers; algorithms + data structures = programs.

> I find it hard to believe that we have abundant evidence that mind is inextricable from matter. I suppose once we admit (which we must) that energy is just free flowing matter it gets easier.

(Be careful here, "energy" reeks of woo-woo.) If I have a thought, or a feeling, there is a corresponding event in my neurology; science is even to the point that we can sometimes tell what you're thinking about with just an MRI. We have no examples of something being thought or felt, and being unable to connect it with neurological activity.

We might not entirely understand how a brain works, but I don't know how a car works; suggesting that there are non-physical components to the mind is like suggesting that a car can run without turning on its engine, and we've never observed that to be the case.

u/buggi22 · 3 pointsr/learnprogramming

To do something "complex" (and perhaps by complex you mean "concrete" or "practical"?) with a programming language like python, you'll probably want to learn more about programming language libraries.

The libraries that accompany a programming language are what give it most of its practical power -- they are the bridge between the high-level programming language and the low-level operating system / hardware. You may want to look at some of these, or other libraries, just to get some ideas flowing: wxWidgets (and wxPython in particular, for designing window-based interfaces), OpenGL (for graphics), and ODBC database interfaces (for storing and retrieving large amounts of structured data).

Without an understanding of the OS or the available programming language libraries, you'll end up staying on the abstract side of things. I have a hunch that you might enjoy the book "The Elements of Computing Systems".

On the other hand, if what you want is more complexity while staying in the abstract realm, you could get a good book on Algorithms.

u/Iwishiknewwhatiknew · 2 pointsr/cscareerquestions

It's time complexity of algorithms. It's asking for big O, which is worst possible time your algorithm would take given a data input, usually n being the size of the array/list or whatever.

Hash tables are 0(1) because true hash tables uses a function to map 1:1 for all given inputs. For fun(y) => x, every x is generated by a unique y. If it's not a true hash table (ie not a 1:1 map), then you use chaining or bucketing. Chaining is guaranteed 0(n) time and uses no extra space and bucketing is guaranteed 0(n+t) where t is the largest bucket but requires extra space (tradeoffs!).

It's important because it's efficiency. You can program things 1000 ways. Given an input of 10 items, algorithm A (lets say runs in O(n)) and algorithm b (runs in O(n!)) may perform in nearly the same time and produce the same output. But given a list of 100000 items, algorithm B would take years to complete the task, when algorithm A would do it in ms.

Although I'm just about to graduate and don't have a real job yet, I recommend picking up something like this. You can find a pdf with minimal effort. The first few chapters really nail into it well.

u/benkitty · 2 pointsr/learnprogramming

Kleinberg Tardos is an excellent, if more recent, book that emphasizes theory. It's especially good with reductions to graph algorithms, since the two authors are arguably some of the best graph theorists alive.

u/the_lie · 3 pointsr/compsci

Maybe this one: Algorithmics - The Spirit of Computing

A good conceptual overview of Computer Science
>The best selling 'Algorithmics' presents the most important, concepts, methods and results that are fundamental to the science of computing. It starts by introducing the basic ideas of algorithms, including their structures and methods of data manipulation. It then goes on to demonstrate how to design accurate and efficient algorithms, and discusses their inherent limitations. As the author himself says in the preface to the book; 'This book attempts to present a readable account of some of the most important and basic topics of computer science, stressing the fundamental and robust nature of the science in a form that is virtually independent of the details of specific computers, languages and formalisms'.

u/lorpus_the_porpus · 1 pointr/learnprogramming

While it's not purely a data structures book (and may be a bit too close to a textbook for you), The Algorithm Design Manual is hands down the best Data Structures/Algorithm book I've seen.

It does a great job explaining the concepts and has some very helpful examples. If you're interviewing, it also has several exercises and interview questions for each topic.

u/qna1 · 1 pointr/learnprogramming

I know java, but currently speed learning c++ here, so that I can complete this Think Like a Programmer. Might seem extreme to try to learn a complete language just to improve my problem solving abilities, but the more I practice programming, the more I run into the very common problem of not being able to break problems down enough to solve them/ think algorithmically. This book is highly recommended for this issue, so I figured I would give it a shot, would love to learn and work together in a group. I don't know what your schedule is like but maybe we can get a discord channel going and invite other people who want to learn c++ and problem solving as well.

u/rby90 · 2 pointsr/learnprogramming

I find explaining to a beginner (especially one that feels overwhelmed by the vast amount of languages) that, programming languages are very similar to tools. These "tools" (programming languages) are used to solve a problem. One language might be like a hammer, while another language is more like a nail gun or even a swiss-army knife. Once you learn how to use one tool like flat-head screw driver you can easily pick up another one like a phillips-head screw driver. With that said, pick up a book for any one language you wish to learn and pair it with a book like Exercises for Programmers. Follow this up by solving the problems you wanted to solve through programming.

u/fireatx · 2 pointsr/algorithms

Not either of those, but I can vouch for Algorithm Design. Really innovative practice problems, and they provide some really awesome, novel explanations for concepts.

u/acwaters · 4 pointsr/cpp

I would pick up both a data structures book and a C++ book; for instance, Data Structures and Algorithms in C++ and Programming: Principles and Practice Using C++.

Of course, you can use any data structures book you like; some are better than others, but they all teach the same stuff. But when you're learning the abstract stuff at the same time as basic programming, it can be nice to see examples in your language. Principles and Practice is one that I wholly recommend, though, as an excellent introduction to modern C++.

Also, be aware that there is way more bad C++ material out there than there is good C++ material. If in doubt, check out the semi-official book list or ask around here.

u/VSMNeophyte · -6 pointsr/compsci

The best book by far is the Art of Programming.

The best textbook my university used was Introduction to Algorithms for Algorithms I, and Algorithms II. If you can understand that textbook, you've learned some of the most important lessons in computer science.

u/halocupcake · 1 pointr/TeenDeveloper

Lots of people are gonna recommend sites like CodeAcademy to get started, and I do believe it's a good start, but in my experience it's not that good with teaching you the logical thinking required for programming. If you have trouble with this, you should read a book like Thinking Like a Programmer combined with a lot of practice. Have fun!

u/SQLSavant · 2 pointsr/learnprogramming

Some of these are directly related to programming and some are not but are additional reading that touch on skills that most every programmer should have some concept or idea of.

I've read all of these at some point throughout my career and can attest to their usefulness. Here's my personal list:

u/shadeofmyheart · 6 pointsr/AskComputerScience

You might want to check out this book:
Think Like a Programmer: An Introduction to Creative Problem Solving https://www.amazon.com/dp/1593274246/ref=cm_sw_r_cp_api_i_QOnEDbQBH1PW0

For me, I find the trick is trying to break down the problem into the smallest steps. For math related stuff I often do a few iterations on paper so I can see where the patterns lie and answer questions like “what repeats here” which would tell me I need a loop or recursive function. Or “what decisions does the computer need to make? Using what information?” Tells me what conditionals I’ll need etc.

For Fibonacci, for example, you know adding is involved.... so you are going to need math operators. you know it repeats ... so you’ll need a loop or function. Etc.

I hope that helps!

u/roboticc · 1 pointr/AskComputerScience

At last, a question in my domain! Wikipedia actually provides a very good beginner's introduction to computational complexity theory. You should start at O(n) notation (big-O notation) and go from there to the articles on computational complexity.

There are also wonderful books like Dasgupta, Papadimitriou, and Vazirani's textbook "Algorithms". The latter third of the book will teach you about computational complexity theory, but the first two-thirds will teach you much of what you need to know to understand it. http://www.amazon.com/Algorithms-Sanjoy-Dasgupta/dp/0073523402

If you have any questions as you read feel free to PM me directly.

u/djhaskin987 · 6 pointsr/algorithms

My algorithms class presupposed that I took linear algebra, I think. I think you'll need to be able to do maths, but they taught me the maths I needed to know as I went along. It depends on the course, though. Here's the book we used in class. Here's its home page, but the link seems to be broken. It should be online for free. For example, I found another copy here. Here's the PDF Also a free book on linear algebra.

u/New_Age_Dryer · 1 pointr/UMD

I don't know why you're getting downvoted.

Unless you want to learn programming and what it entails (algorithms and data structures), this is fine. A course, in all honesty, would be too slow. The majority of the material in the codeacademy course, it appears, is covered in the official Python tutorial, which goes even further in depth. Here's to save you googling:

u/ryanplant-au · 2 pointsr/learnprogramming
u/tanenbaum · 40 pointsr/learnprogramming

I mean, there's books out there like this.

In my own experience, it's a matter of coding enough. You have to try to create something and do it naively. Having done something yourself gives you a reference for when you study programming in books or videoes or when talking to others that you can compare new information to, so you can realize how you could have done things better in your own project. If you don't have any reference experience, you wont learn from the information in the same way. It's part of becoming a programmer that you'll write some crap code.

Try to code some simple desktop application, like a text editor, or some other simple program. Make a list of features it should have - for a text editor, you should be able to input text, modify the input text, save the text and load a text file.

u/r4and0muser9482 · 0 pointsr/math

Not sure what you mean by CS background, but depending on the book, you may need more books to understand that one.

For introduction to computers and programming I recommend David Harel and some people really dig Jon Bentley. There's probably a ton of other recommendations out there, but ultimately they all lead to the bible :)

So yea, getting some background on programming may be necessary, but not too difficult. I mean, if a highschooler/college freshman can do it, so can anyone, right?

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/chamcham123 · 13 pointsr/compsci

Proving algorithms is much harder than coding algorithms. I think you should get good at doing the analysis yourself. It is a very valuable skill.

There are entire books dedicated to string matching. Maybe something similar to your idea is in one of them.

Here are a couple:
https://www.amazon.com/Algorithms-Strings-Trees-Sequences-Computational/dp/0521585198/

https://www.amazon.com/Algorithms-Strings-Maxime-Crochemore/dp/1107670993/

Also, in the C code, why are you starting the clock before the “start of program” print statement (instead of after)? Printing text to the screen is a slow process and will add a lot of time to the clock.

u/Ars-Nocendi · 2 pointsr/compsci

Algorithms in a Nutshell

Use it as a practical rendition of the math-rigorous material presented in CLRS, even though it does not cover everything CLRS has to offer. Nevertheless, it should make your journey a lot easier.

As for Math reference, try getting through [Concrete Mathematics] (http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025). Legend says that if you can get through that book, you are prepared in math rigor for most of algorithmic materials. XD

u/mrstacktrace · 1 pointr/learnprogramming

I highly recommend Algorithms Unlocked by Thomas Cormen (one of the authors of the famous CLRS book)

It's very readable; it's about 240 pages. It's basically a bit of a simplified, summarized version of CLRS. He takes time to walk through the algorithms with "real-world" examples, and gives you the algorithmic analysis as well. It doesn't contain the mathematical rigor or any of the problems/exercises of CLRS. It's supposed to be approachable by people who are not CS majors (but do have some Math under their belt).

It's a perfect book to read before studying CLRS, during, and even after (when you are in the industry and haven't touched CLRS since you graduated and you want to prepare for interviews).

u/SatanicSaint · 1 pointr/learnprogramming

There is literally a book called Think Like a Programmer. I haven't read the entire thing but Reddit recommended it to me. Maybe check it out. Also, please chime in if you have read this book and whether you recommend it or not.

u/Chr0nomaton · 1 pointr/dataengineering

I attended UCI for CS, and am going through the process of masters right now. I'm a data engineer / data platform engineer at a startup, and have been doing it for ~2 years or so. I find that the traditional CS knowledge is a tool belt that you don't necessarily *need* to get through industry.

​

There are a lot of really good algorithm books out there, O'Reilly has Algorithms In A Nutshell which does talk about O notation, and then a walk through of some basic data structures and algorithms (Linked list, trees, sorting). DS and Algos are really like the *core* CS things that one would need. Some community colleges offer these courses, which might be better depending on your circumstance.

​

The upper division classes are useful I think. I took a few classes on distributed systems and computer architecture which have been insurmountable. I took a class on databases (useful I suppose but meh), some classes on machine learning and artificial intelligence and operating systems. Those have become more useful now that I'm doing data platform work.

​

All that being said, I think the only disadvantages you have are the terminology ("This will give o(nlogn) lookup while retaining referential integrity") and the boxes to tick. Terminology though you can learn. The boxes to tick though might be tougher. I think some companies will be really stingy about that stuff. You did say that you have an undergraduate education though so I don't think that will matter.

u/a_goestothe_ustin · 8 pointsr/EngineeringStudents

u/tyggerjai is speaking the truth. Learning programming has very close similarities to learning math. You first learn the method or theory and then, through practice, learn the implementation.

There is a great book, Think Like a Programmer, in which the author tries teaching this exact skill of breaking down programming problems, which you may not know how to do, into small steps, each of which you do know how to do. Then by adding all of those steps together you get the answer you were looking for.

That, in a nutshell, is what makes for a good programmer.

u/fuck-my-username · 1 pointr/learnprogramming

Think Like a Programmer

Easily the best book to get when you're in this situation.

u/brcosm · 2 pointsr/cscareerquestions

Steve Yegge's 5 Essential Areas

When I was preparing to interview I broke up the studying into the 5 areas mentioned in Steve's post. From my experience, the two most critical things are:

  • Writing reasonable code on demand (like on the whiteboard)
  • Knowing the core data structures (including time and space complexity)

    If you have never written code on a whiteboard, you need to practice -- it isn't natural and will almost certainly trip you up. For the data structures, try explaining something like a heap or a map a friend who has no background in CS. It will get you comfortable talking about that kind of stuff and also help cement your knowledge. This book is excellent as a resource.
u/LWRellim · -1 pointsr/programming

>Point me to one page explanations of them and I'll be amazed by them too.

http://en.wikipedia.org/wiki/List_of_algorithms

Take your pick, each of the links on that page is to a brief summary explanation, and many of them will probably be "amazing" to relatively new/less widely-experienced programmers.

EDIT: Also, there are a host of standard reference books with a plethora of such things in them: Sedgewick's is a classic, then there is Wirth's Algorithms and Data Structures which used to be considered a "must read" for anyone in the profession, and then there are more recent things, like O'Reilly's nice little handbook/guidebook

u/e7hz3r0 · 4 pointsr/cscareerquestions

I haven't been in or done a junior dev interview in a long time so I can't speak to whether most companies ask algorithm questions these days.

What I can say is that many of the mid- and senior-level interviews I've been in do. This means, to me at least, that you should learn this stuff even if you don't get asked it in a junior dev interview.

As as self-taught developer, you have shown that you've got the drive and curiosity to learn a lot of stuff enough to do useful work. That says something. So bravo!

Practicing is a great idea. However, if you're constantly looking at the hints before coming up with your own answer, that's probably not as helpful. It sounds like you should learn more about algorithms as a whole topic.

To shore up your weaknesses with algorithms I'll suggest a few resources that I've come across over the years. Since I went the traditional CS degree route, I haven't used these personally but I know many people who recommend them:

u/Viginti · 14 pointsr/learnprogramming

Stupid question on my end perhaps but have you ever read How to Think Like A Programmer?

Think Like a Programmer: An Introduction to Creative Problem Solving https://www.amazon.com/dp/1593274246/ref=cm_sw_r_cp_apa_sjOCAbTSAJPKT

u/JuiceBoxUP · 4 pointsr/HowToHack

I'm in the same boat as you but decided to go through code academy all the same. They make you start on basic HTML/CSS which I would argue anyone interested in coding should know. My only problem with the academy is that while they are the premiere place to learn syntax they don't always present the problem solving /analytical mindset you need. I recommend combing academy w/ this book and watching videos on the YT channel "crash course" about computer science and algorithms (find more in depth vids on anything that interests you). I'm still a beginner and most the people on this sub know a great deal more than I, but this is my current learning structure so I though I would share.

u/gfody · 84 pointsr/programming

First don't think of this as "DBA" stuff - you're a developer, you need to know database technology, period. Read this rant by Dennis Forbes in response to Digg's CTO's complaints about databases it's very reminiscent of TFA.

Read Data and Reality by the late William Kent (here's a free copy) and get a fundamental understanding of "information" vs. "data". Then read Information Modeling and Relational Databases to pickup a couple practical approaches to modeling (ER & OR). Now read The Datawarehouse Toolkit to learn dimensional modeling and when to use it. Practice designing effective models, build some production databases from scratch, inherit some, revisit your old designs, learn from your mistakes, write lots and lots and lots of SQL (if you want to get tricky with SQL I suggest to pickup Celko's SQL for smarties - it's like the Hacker's Delight for SQL).

Many strange models you may encounter in the wild are actually optimizations. Some are premature, some outright stupid, and some brilliant, if you want to be able to tell one from the other then you're going to dive deep into internals. Do this generically with Modern Information Retrieval and Managing Gigabytes then for specific RDBMSs Pro SQL Server Internals, PostgreSQL Internals, Oracle CORE, etc.

Reflect on how awesome practically every modern RDBMS is as a great technological achievement for mankind and how wonderful it is to be standing on the shoulders of giants. Roll your eyes a little bit whenever you overhear another twenty-something millenial fresh CS graduate who skipped every RDBMS elective bleat about NoSQL, Mongo, whatever. Try not to fly into murderous rage when another loud-mouthed know-nothing writes at length about how bad RDBMS technology is when they couldn't be bothered to learn the most basic requisite skills and knowledge to use one competently.

u/tyroneslothtrop · 4 pointsr/learnpython

As I recall, that's a pretty decent book/course. It's free, so just dive in and you can decide yourself if it's worth sticking with. Plus, the favicon kind of looks like Professor Farnsworth, so that's a bonus, I guess.

Other options:

Keeping to python, there's these two:

http://www.brpreiss.com/books/opus7/html/book.html
http://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275

And the MIT 6.006 Intro. Algo. course is taught in Python:

http://courses.csail.mit.edu/6.006/spring11/notes.shtml

Beyond python this is a pretty standard text (and is used for 6.006):

http://mitpress.mit.edu/books/introduction-algorithms

u/me2i81 · 1 pointr/compsci

A few more to consider:
A recent book that looks like fun is the Nature of Computation.
Sipser's book on theory of computation is good.
Algorithms by Dasgupta, Papadimitriou, and Vazirani is a very accessible algorithms book, as is Skiena. CLRS is a good reference, but dull as a read.
Comprehensive Mathematics for Computer Scientists volumes one and two might be interesting to look at.

u/smalltownoutlaw · 1 pointr/AskProgramming

If there is one that is specifically used in your upcoming university course, probably pick that it will give you a head start on the stuff you will be covering.

Algorithms wise CRLS is probably the best book to have.

u/liverandeggsandmore · 2 pointsr/videos

The Wikipedia article "Sorting Algorithm" is a good place to start.

The best place to finish is with Don Knuth's Art of Computer Programming, Volume 3: Sorting and Searching.

u/MajorDerp4 · 1 pointr/learnprogramming

Hackers Delight
Talks about some stuff and things that you might enjoy.
(Not a hacking book)
https://www.amazon.com/Hackers-Delight-2nd-Henry-Warren/dp/0321842685

u/Catatonick · 2 pointsr/learnprogramming

This might interest you.

Think Like a Programmer: An Introduction to Creative Problem Solving https://www.amazon.com/dp/1593274246/ref=cm_sw_r_cp_api_i_inmzCbX7V5G4Z

It’s a book I found a while back that sort of teaches you how to tackle this sort of thing.

u/Artmageddon · 3 pointsr/programming

I used this one in my Algorithms class when I was studying for my CS degree. VERY good book, I highly recommend it. Algorithms tend to be pretty heavy on logarithms and some calc knowledge, which has always been a problem for me since I'm not very good with maths :(

Bonus: This book was co-authored by Ronald Rivest, one of the designers of the RSA encryption algorithm.

u/rafiss · 2 pointsr/AskComputerScience

I think these lecture slides are great. They are meant to go along with the book Algorithm Design, which does have a few sample chapters available. The slides and book do a good job of coming up with understandable, and often practical, examples.

u/JustThe-Q-Tip · 1 pointr/learnprogramming

www.geeksforgeeks.org is nice, in lieu of specific books. Lots of practice problems, lots of explanations, which I think are key to learning the stuff. A bit of linear text can certainly help, in case you want justifications for certain concepts, but you're usually better off keeping that light and as-needed, and jumping into problems as soon as possible. Break your brain and rebuild stronger.

And... https://www.reddit.com/r/learnprogramming/wiki/books

Oh and one text I don't see mentioned is Algorithm Design by Kleinberg and Tardos.

u/sgt_fred_colon_ankh · 1 pointr/learnprogramming

"Algorithm Design" by Kleinberg and Tardos (https://www.amazon.com/Algorithm-Design-Jon-Kleinberg/dp/0321295358) is a good textbook. It's actually readable. Most algorithms textbooks are more like reference books ... helpful when you already know algorithms and want to look something up, but not helpful to teach it to you.

There are some slides based on the book here (http://www.cs.princeton.edu/~wayne/kleinberg-tardos/) which could be useful too.

u/mwassler · 4 pointsr/webdev

Everyone seems to have good things to say about khan academy's comp sci courses.

A few good lower level books in my opinion are this one which is maybe less technical but a good lower foundation and then From Mathematics to Generic Programming by Alexander Stepanov.

I think your probably just experiencing outliers in your job search. If you keep at it your luck will probably turn around.

u/RainbowHearts · 2 pointsr/AskComputerScience

If you only read one work on the topic, it should be The Art of Computer Programming by Don Knuth: https://www.amazon.com/dp/0321751043/

The textbook for MIT's 6.001 (introduction to computer science) is the much loved Structure and Interpretation of Computer Programs by Abelson, Sussman, and Sussman: https://www.amazon.com/dp/0262510871/ . Originally it was in Scheme but the 2nd edition is in Python.

Finally, because people asking about computer science are often asking about something a bit broader than pure computer science, I recommend Code: The Hidden Language of Computer Hardware and Software by Charles Petzold. It is a thorough tour of computing in practice at every level, top to bottom. https://www.amazon.com/dp/073560505X/

u/gawen · 1 pointr/AskReddit

To enter a great engineer school in France, you need to do what is named a TIPE. This is a kind of mini-thesis about a scientific topic you need to present orally. My topic was about sorting algorithms. I studied really really hard for one year, I read the best book about the subject and my trainers told me it was one of the finest work they've seen.

People to whom I present my thesis thought I wasn't the author of the thesis because I "could not do such a good job". The note they gave me was disqualifying. I could not enter the engineer school I wanted because of this.

I knew later these people weren't computer science specialist, but secondary school's physic & biology teachers. They were two, one of them was playing with his pen half of the time of my oral.

Makes 5 years now since this event. When I think about it, I'm still shocked by how a single event can change your personnality, your life, and your faith in humanity.

TL;DR: hard-worked to present a mini-thesis to people who thought I wasn't its author, which disqualified me to enter in one of the greatest school in France

u/markgraydk · 2 pointsr/algorithms

I liked Algorithm Design. It's not really that more advanced but does a good job at expanding on the design and use of algorithms. It's good for bridging that gap from a theoretical course based off Cormen to real-life application of algorithms, which I think is a problem many CS students run into.

u/justinlilly · 5 pointsr/compsci

http://www.amazon.com/gp/aw/d/0387948600 -- great book. I used it when studying for my Google interview. The first quarter or so is theory and the rest is just a BUNCH of algorithms, what problems they are good for, what their trade offs are, etc. I'd recommend it.

u/the_omega99 · 5 pointsr/compsci

You should mention more specifically what kinds of problems you're looking for. Do you want to merely implement well known algorithms? Design novel algorithms for specific problems? Analyze the efficiency of a given algorithm?

For the first two possibilities that I listed, you should not need solutions (and there's no single way to write code and many algorithm problems have multiple solutions). Instead, you should be writing test suites that can let you know when they code works. This isn't 100% perfect because it's always possible that there'll be some edge case that you'll miss (although test suites should be rigorous to try and avoid this), but it'll do well for most cases and is how you'd work in the real world.

And of course, you can always try and formally prove novel algorithms work. There's isn't really an easy way to check for answers here, though, since there's more than one way to prove many algorithms (and some algorithms are extremely complicated to prove). So there isn't really anything you can do besides having a more experienced person check your answers. If you have a low volume of questions, Reddit might be able to help (find specific subreddits). But otherwise expect to have to pay for a tutor (if you're in school, your university might have something free available for CS help).

As for some actual advice, I thought Kleinberg's Algorithm Design was very good for creating novel algorithms. It has lots of problems. No answers, though.

You're right that it's pretty hard to find quality books that come with solutions (even if it's just one solution to a problem that has many possible solutions). It seems that most texts of a reasonable quality are targeted towards universities and thus don't make answers available so that universities can use the problems in assignments. I wish more books would do something like giving answers to even numbered problems. It's a major pain in the ass for those who would try and self-learn something.

u/craiig · 5 pointsr/compsci

I agree, CLSR is too much like a dictionary and not enough like a story. For my graduate algorithms course, we used Algorithm Design by Kleinberg and Tardos. I could actually read this book because they took the words to explain the formulas they used. I'd recommend it! Not only did I learn about algorithms, but it also helped with reading formulas. Website Amazon Link

That said, they focused more on algorithms than on data structures, so this might not be for you.

u/arry666 · 3 pointsr/programming

O'Reilly's Algorithms in a Nutshell is a good practical book. It describes the algorithms for the regular programmers, with focus on implementing and without heavy mathematics used in classic books on algorithms. All algorithms are presented in pattern form, with a motivation to use them, pictures with pseudocode giving a high-level overview, and working code (in C, C++, Java, and Ruby). They also have benchmarks to provide empirical proofs of the theoretical performance of the algorithms.

u/turning_tesseract · 1 pointr/compsci

For Algorithms and Data Structures, I would recommend the book by Goodrich and Tamassia. There are three versions of the book that you can choose from, depending upon which programming language you are most comfortable with - Java, Python, or C++ .

u/kitsune · 2 pointsr/programming

Some books I enjoyed:

The Algorithm Design Manual by Steve S. Skiena, $61.15

Real Time Rendering, 3rd. Edition by Tomas Akenine-Moller, Eric Haines, Natty Hoffman, $71.20

Structure and Interpretation of Computer Programs, by Hal Abelson's, Jerry Sussman and Julie Sussman, Free

Clean Code by Robert C. Martin, $37.85

u/MrNetTek · 3 pointsr/computerscience

CS is almost pure math, especially beyond the freshman year. You can learn to code with almost no advanced math. So, what's up with that?

Numerous---everyday---apps are actually very simple coding, which do not require much math. This lures people who code into thinking math is not required in programming. That is a false assumption. This is the rub...anything advanced in technology requires equally advanced mathematics. AI, machine learning, data science, robotics, graph theory, geometric modeling, parallel architectures, electronics, telecom transmissions, cryptography, etc., etc., etc., all require advanced mathematics skills. The list goes on forever.

You'll never be a great programmer without at least a strong foundation in discrete mathematics (maybe you'll be a elementary app coder or maybe you'll be a low-level developer). Anyone saying you don't need math in CS is wrong. Anyone saying CS is easy is mistaken. For those that claim all you need is 3rd or 4th grade math, are 3rd or 4th grade coders. At least 1/3 of people drop out of computer science degrees---stating it was just too difficult.

I suggest to everyone to pick up The Art of Programming, by Knuth (and/or Introduction to Algorithms, from MIT Press). Come back and tell us if you think CS is hard, and...if math is required in programming. Find a quiet corner to cry in....the books are as intense, as they are inspirational.

My advice? Take a few discrete mathematics courses. You may have a job one day that requires you to know the cost of nodes in a tree, based upon the mathematics of recursion and exact powers: Example - That isn't 3rd grade math. Stare at this gem for a while: https://www.tug.org/texshowcase/cheat.pdf

The good news is...you live in the best possible era to learn CS. Millions of resources are at your disposal. You just need to be dedicated.

-MrNetTek

u/pasteleiro · 1 pointr/portugal

> Desculpa, não sabes do que estás a falar.

Sinceramente, cada vez tenho menos paciência para ti.

> Programar é fácil. É apenas a definição de instruções de maneira a expressar um algoritmo.

Nunca na minha vida vi a palavra "programar" ser interpretada com esse significado. Para além qualquer curso de programação (independentemente do nível) requer que se faça mais que isso.

Quanto ao significado da palavra programar. Começando pelo básico, i.e. wikipedia.

> "Computer programming (often shortened to programming) is a process that leads from an original formulation of a computing problem to executable computer programs. Programming involves activities such as analysis, developing understanding, generating algorithms, verification of requirements of algorithms including their correctness and resources consumption, and implementation"

Se quiseres ler livros sobre o assunto, alguns clássicos são,

Systematic Programming: An Introduction - Niklaus Wirth

The Art of Computer Programming - Donald Knuth

The Science of Programming - David Gries

The Algebra of Programming - Richard Bird, Oege de Moor

The Mathematics of Programming - Tony Hoare

E porque sei que ler livros dá muito trabalho, ficam algumas quotes,

Edsger Dijkstra

> "Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians."



Tony Hoare

>"Programming is a mathematical activity. Like other branches of applied mathematics and engineering, its successful practice requires determined and meticulous application of traditional methods of mathematical understanding, calculation and proofs"

u/dhjdhj · 2 pointsr/compsci

I understand completely. I’m just entertained by the bit manipulation. There is a great book called Hackers Delight that is full of such things. The author once gave a talk where I used to work and his response to people who were aghast with some of his tricks was perfect - “Bits go in, bits come out”

u/dietsnappleman · 1 pointr/cscareerquestions

The most common textbook is this:
http://amzn.com/0262033844

I learned from this:
http://amzn.com/0073523402

Can't say anything about Free Code Camp, but I will say that work experience at the best company that will take you is likely going to trump anything you do on the side OR a master's. You should, ofc, learn as aggressively as possible regardless.

u/blueshiftlabs · 1 pointr/AskEngineers

If you're a CompE, you're gonna be writing a lot of C. If you haven't read The C Programming Language, by Brian Kernighan and the late Dennis Ritchie, shame on you - it's one of the best, most helpful, and most concise programming books I've ever read. (The design of the book is a lot like the design of C, really.)

Also, if you want a reference for any algorithm you could possibly think of, I can guarantee it's in Knuth's Art of Computer Programming somewhere. CLRS, mentioned by xibernetik below, is another good algorithms book that's more accessible, but less in-depth.

u/mavelikara · 3 pointsr/programming

The book has a different approach than standard textbooks. While all other books I have read classify algorithms by the problem they solve, this book classifies algorithms by the technique used to derive them (TOC). I felt that the book tries to teach the thought process behind crafting algorithms, which, to me, is more important than memorizing details about a specific algorithm. The book is not exhaustive, and many difficult topics are ignored (deletions in Red-Black trees, for example). The book is written in an engaging style, and not the typical dry academic prose. I also liked the use of puzzles as exercises.

The only other comparable book, in terms of style and readability, is that of Dasgupta, Papadimitriou and Vazirani. But I like Levitin's book better (only slightly). These two books (+ the MIT videos) got me started in algorithms; I had to read texts like CLRS for thoroughness later. If someone is starting to study the topic my recommendation would be to read Levitin and get introduced to the breadth of the topic, and then read CLRS to drill deeper into individual problems and their details.

u/cntx · 1 pointr/learnprogramming

Think Like A Programmer was the best book for me to learn how to break down problems and solve puzzles programmatically

u/frater_horos · 5 pointsr/math

Lots of recurrence relations, set theory, formal logic and proofs, and of course graph theory. Every once in a while, a little calculus. ( I should note I do not have a PhD, this is just my experiences from some graduate-level courses) I hope this is the sort of description your looking for?

If you'd like a non-gargantuan book to read that gives a good intro to this topic, I'd recommend this one It mostly covers the analysis of algorithms but does go into complexity classes towards the end.

u/Tayacan · 2 pointsr/java

Not Java-specific, but this book should give you a solid foundation and will serve as a good reference manual too.

u/ZenBound · 2 pointsr/computerscience

I found Think Like a Programmer to be very helpful. The book uses c++ as it's main language and has a lot of varying exercises.

Here you go

u/Neres28 · 2 pointsr/learnprogramming

A hash function is a function (in the literal sense) that takes an element of some large element space and returns an element of a smaller element space. A typical hashing function takes a string and returns an int.

A naive, but instructional, version of a string hashing function:

int hash(String string){
int value = 0;
for(char c : string){
value += (int)c;
}
return value;
}

The largest problem with the above, ignoring the potential overflow, is that it does a poor job of distributing elements from the String space to the integer space. For instance the strings "abc" and "cba" map to the same integer. Perhaps the worst part of the above is that it is terribly nonuniform. It strongly favors the lower range of the integer space. See this for a few good alternative string hashes. See this for a discussion of various hashing methods and their performance. See Knuth's Sorting and Searching page 514 for an explanation of what makes a good hashing function and how to write one.

So now that we have a means to convert a string to an representative integer, how can we use that to look up and store elements in an array? We could use the hash function as the index of the element in the array, but since the hash could conceivably return INT_MAX we'd need an array of that many elements, potentially impossible and definitely a waste of space. The easiest way is to simply mod (%) the hash value by the size of our array, yielding a value within the range of our array.

But there's a problem, right? 1. our hash function could map two different strings to the same integer, and 2. our modulus operation could map two different hashes to the same index. How do we resolve this conflict, or collision as it is called? There's a few different methods, but I think the one you're thinking about is typically referred to as separate chaining. What this means is that when storing an element, we take it's array index, as computed by the modulus of the hash of its key, and look at that array slot. That slot holds a pointer to a linked list that we insert our element into. When doing a lookup we do the same thing to get to the linked list, then traverse the list in the standard fashion looking for our element. In the best case, where we have a lot more slots than elements to be stored, we get constant time insertions, and near constant time retrievals. In the worst case, where every hash value degenerates to the same array index we get constant time insertions (assuming we insert at the head of the linked lists) and linear time retrievals (since our fancy data structure has degenerated to a linear search of a linked list).

u/apfelmus · 3 pointsr/programming

The standard reference is the Introduction to Algorithms by Cormen, Leiserson, Rivest and Stein. But it's huge and very detailed.

A much more gentle and very practical introduction to algorithms and complexity is the Algorithm Design Manual by Steven Skiena.

u/Gr8ingPresence · 10 pointsr/compsci

I don't think it's reasonable to speak about "canon" books in computer science - the field has become so broad that a handful of PhDs in the modern era could get to the very bleeding edge of their niche and not share any crucial books in common among their libraries.

That said, here are a few I think are fantastic:

u/_vikram · 9 pointsr/learnprogramming

He has a more readable version called Algorithms Unlocked. It covers search, sort, graphs, cryptography, shortest path, data compression and other topics pretty well.

u/goldfaber3012 · 6 pointsr/programming

http://www.programming-challenges.com/

The accompanying book has quite good problems (all your CS intro ones, Towers of Hanoi etc)

Another book by the same author (Steve Skiena) called The Algorithm Design Manual is great.

u/ChrisRathman · 4 pointsr/programming

A better solution might be to teach algorithms and data structures by not using a programming language at all. This is the course taken by the widely used CLRS. If the student understands the fundamentals, then applying that knowledge to any particular programming language is an implementation detail.

Edit: I guess I should also mention that CLRS is soon to catch the Java wave.

u/e_vampire · 2 pointsr/compsci

Either Introduction to Algorithms

or Algorithm Design

Those books were the textbooks for the algorithm and data structures courses, respectively during my bachelor and master's degree in computer science, I find both of them really well written.

u/Amros · 9 pointsr/programming

I've found the book by Cormen a great place to start.

u/PythonDev2018 · 2 pointsr/learnpython

Learn here www.sololearn.com and practice here https://codesignal.com

Most importantly, get the following book: Think Like a Programmer ( by V. Anton Spraul )

u/__LikesPi · 3 pointsr/learnprogramming

The lectures you found from MIT professors are pretty good. Depending on which set you found, one of the teachers might have written the book that you are studying out of. As for more resources I will refer to a comment I wrote for a similar question.

> Algorithms are language agnostic but certain books are not. I recommend Introduction to Algorithms which is language agnostic and accompanied by lectures here. But there is also Algorithms by Robert Sedgewick which is in Java and accompanies these lectures and The Algorithm Design Manual which is language agnostic.

u/hhrjrq · 1 pointr/cpp

I like this book: http://www.amazon.de/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275

It starts with quickly skimming over the basics because it assumes the reader to be familiar with C or Java. Later it deals with algorithms and data structures. Those were always my favorite programs to learn a new language.

Oh and I use Emacs but I think you are fine with Eclipse.

u/bautin · 1 pointr/cscareerquestions

I have most of these books.

The Art of Computer Programming
The Art of Computer Programming is dense. It is deep. You can likely put off this one. It should be a goal to be able to get through it though.

Introduction to Algorithms
Introduction to Algorithms, I don't have it. All I know is that it does come highly recommended.

Code Complete
Code Complete is excellent. Well written, it feels a lot shorter than it is. It will get you thinking about every step of the software development process.

The Pragmatic Programmer
Another one I don't have but gets recommended time and time again.

The Mythical Man Month
The Mythical Man Month is less directly relevant. It will go over meta issues in software development.

Don't Make Me Think
Don't Make Me Think is also not about code itself, but about design. Because if no one uses your application, does it matter if you made it?

u/uhwuggawuh · 1 pointr/compsci

I'm kind of in the same position as you, OP. Thinking of getting CLRS, New Turing Omnibus, The Elements of Computing Systems, and Algorithmics!

So excited.

u/verifiedOFFICIAL · 1 pointr/cscareerquestions

http://www.buildingjavaprograms.com/

http://www.amazon.com/Building-Programs-Student-Value-Edition/dp/0133375277

A great and intuitive textbook used at a lot of high-powered CS intro classes. Particularly useful for a "interview-level" understanding of OO and proper use of key data structures. Probably not enough info on algorithms, but you can use knowledge from this book to implement the key ideas in "Algorithms Unlocked,"
(http://www.amazon.com/Algorithms-Unlocked-Thomas-H-Cormen/dp/0262518805) which is basically CLRS junior.

u/sv0f · 2 pointsr/compsci

This book was handed to me by my data structures and algorithms professor at CMU back in the day and it was really inspirational -- and totally accessible.

u/Slayer706 · 1 pointr/programming

There is another book by one of those authors that's supposed to be more approachable for people without CS degrees. I haven't read it, but it's on my wish list: http://www.amazon.com/Algorithms-Unlocked-Thomas-H-Cormen/dp/0262518805/ref=pd_sim_b_11

u/16BitMode7 · 11 pointsr/learnprogramming

Check out the book Think Like A Programmer by V. Anton Spraul. Although he uses C++ for his examples, his principles on problem solving can be related through any language. As mentioned, Code Wars is a great place to go for practicing what you covered in the book.

If you want to get an idea of what is covered in the "Think Like a Programmer" book, the author has a Youtube Channel and Playlist with tutorials on some of the practices in his book. This book along with Code Wars helped get over that hump from just understanding to practical application.

Edit for Errors in linkage.

u/unclesaamm · 3 pointsr/programming

An entire book of tricks like these, for the enthusiasts: https://www.amazon.com/Hackers-Delight-2nd-Henry-Warren/dp/0321842685/

u/mpyne · 2 pointsr/programming

For those interested in this, Henry Warren has a very good book covering more bitwise tricks than you can shake a stick at. It's called Hacker's Delight.

u/WhyHellYeah · 1 pointr/AskReddit

"Algortihms + Data Structures = Programs"

There are books for different programming languages.

Also, check out MITs web site. All of their courses are on line for free.

u/MoTTs_ · 2 pointsr/webdev

> 4) All this aside, I wish I spend more time in college learning computer science. I don't mean how to use PHP, or Ruby, or what HTML is. I mean how to properly setup an R-tree, how low-level systems work, proper indexing methods, security, etc. These topics would be incredibly valuable, but not always easy to learn.

You should read Knuth. You'll effectively be learning from one of the most prestigious computer scientists of one of the most prestigious schools for the low price of $177.

u/clownshoesrock · 1 pointr/programming

I've had correspondence with the author before. He's a really good guy. If this is more than just a simple curiosity, then man up and buy the book.

http://www.amazon.com/gp/offer-listing/0387948600/ref=dp_olp_used?ie=UTF8&condition=used

u/Warlord_Okeer_ · 1 pointr/cscareerquestions

It's all the same material. Here's the book we used in uni:
https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275/ref=sr_1_1?keywords=Data+Structures+and+Algorithms+in+C%2B%2B&qid=1558918108&s=books&sr=1-1

These authors wrote the same book in like 6 languages, just find the language you want.

u/know_prashant · 2 pointsr/learnprogramming

Sorting and Searching are one of the oldest yet one of the most modern algorithm which are going in rapid development. This topic so much studied that Donald Knuth has an entire book dedicated to this topic https://www.amazon.com/Art-Computer-Programming-Sorting-Searching/dp/0201896850

u/ixAp0c · 1 pointr/learnprogramming

I'm reading through Think Like A Programmer (there are other ways of obtaining it without buying it nudge, but it's quite cheap compared to other coding books, if you want to add it to your collection), and it's a pretty good read so far. I'm only on the first chapter's exercises, but the main focus of the book is to teach good problem solving skills (defining the problem, restating the problem into easier to understand terms, dividing the problem, etc.). It focuses on C++ with the examples (the author explains a language had to be chosen, but the thinking patterns can be applied to any language). It's only 260 pages total, compared to some other heavy logic/algorithm books which can be intimidating with high page counts.

u/GNULinuxProgrammer · 9 pointsr/compsci

Algorithms by Dasgupta, Papadimitrou, Vazirani. This is the most concise algorithms book I've read. It is very to-the-point and has a good collection of algorithms with their proofs.

u/the_gnarts · 3 pointsr/ProgrammerHumor

> what is a good resource to learn about search functions?

Knuth vol. 3 is as canonical
an answer as you can get.

u/benfitzg · 1 pointr/compsci

Thanks - wasn't aware of this

u/BrightCandle · 6 pointsr/compsci

http://www.amazon.co.uk/Introduction-Algorithms-T-Cormen/dp/0262533057/ref=sr_1_1?ie=UTF8&s=books&qid=1268281259&sr=8-1


Introduction to Algorithms is anything but an introduction. It covers all the basics you've described with the mathematical rigour necessary to understand their performance. It also goes into more advanced things such as heaps and B* trees. If you learn all of the data structures in this book you'll be ahead of 99% of programmers I've ever met.