(Part 2) Best object-oriented design books according to redditors

Jump to the top 20

We found 1,631 Reddit comments discussing the best object-oriented design books. We ranked the 321 resulting products by number of redditors who mentioned them. Here are the products ranked 21-40. You can also go back to the previous section.

Next page

Top Reddit comments about Object-Oriented Design:

u/samort7 · 257 pointsr/learnprogramming

Here's my list of the classics:

General Computing

u/phpdevster · 87 pointsr/webdev

You need to build up a foundational set of programming skills. Frameworks and libraries are important to know, but not as important as knowing how to program. The difference between a program/website/webapp that works, and a program/website/webapp that works AND has sensible code, is significant to a company. I've seen the simplest of features take weeks to implement in very poorly written code bases. This is valuable and expensive time that could have been spent building other features.

Companies are sensitive to this because very few companies are immune to the effects of poorly written and maintained code bases, so they are going to ask you code design questions and even have you do live programming challenges to see how think about the problem, and whether the design of a solution is important to you, or whether you're content to just shit out any old solution that works and move on.

To start, with, I would familiarize yourself with the basic mechanics of the language by reading the You Don't Know JS series: https://github.com/getify/You-Dont-Know-JS/tree/1st-ed

Next, I would read Clean Code by Robert Martin. It's based in Java, but the general principles are the same.

Next, I would read Refractoring: Improving the Design of Existing Code (2nd edition - which is JavaScript based). You can read the Java-based 1st edition for free.

Finally, I would read A Mostly Adequate Guide to Functional Programming.

Yes, it's a lot of reading, but these books will help you think about your code design choices, and in combination with practice, will help you write better code. But of course there is no substitute for practice. The more you write code, the better you'll be at it. The resources I linked to are just guides, not magic bullets.

In terms of other things that are necessary to learn, you'll need to learn how to use git (not to be confused with GitHub). Git is basically the industry standard version control system. You don't have to be an expert at it, but you do need to know the basics of it.

You're also going to want to get familiar with the basics of node and npm, because even doing front-end work, you'll be relying on 3rd party packages, and running builds, all of which are managed through node and npm (or yarn).

u/joshlemer · 28 pointsr/scala

You absolutely can become productive in Scala in much less than six months. For reading material, I suggest you go through Programming in Scala, Second Edition by Martin Odersky, the creator of Scala. Skip the stuff on Actors though, since Scala Actors aren't thing any more (they have been replaced by akka actors).

In addition, I recommend you read Functional Programming in Scala, and probably not before Programming in Scala.

You may also want to check out the Coursera course Functional Programming Principles in Scala, also by Martin.

Links to these resources (and more) are available in the sidebar.

Edit: Wrong link

u/RogueJello · 22 pointsr/programming

Psst! Maybe it's time to think about moving to F#?

u/gregK · 19 pointsr/programming

It's one of the best OO languages, with one of the best books to go along with it OOSC. But it was never mainstream. And a purely OO language is becoming a thing of the past.

All the current new languages are more or less hybrids between OO and FP, for example: Scala and F#. Even C# which is touted as an OO language has a lot of FP features that were not available in Eiffel.

It is probably not a bad language for teaching OO, probably better than Java and C++ especially when used with the book mentioned above. But it's not my favorite language. Haskell is, but it's not OO so I'm not sure if it counts. (Not a big fan of OO either anymore) .

u/Thedabit · 18 pointsr/lisp

Some context, I've been living in this house for about 3 years now, my girlfriend and i moved in to take care of the owner of the house. Turns out that he was a big lisp / scheme hacker back in the 80s-90s and had developed a lot of cutting edge tech in his hay day. Anyway, these books have been hiding in his library downstairs...

It was like finding a bunch of hidden magical scrolls of lost knowledge :)

edit: I will compile a list of the books later. I'm out doing 4th of July things.

update: List of books

  • Lisp: Style and Design by Molly M. Miller and Eric Benson
    ISBN: 1-55558-044-0

  • Common Lisp The Language Second Edition by Guy L. Steele
    ISBN: 1-55558-042-4

  • The Little LISPer Trade Edition by Daniel P. Friedman and Matthias Felleisen
    ISBN: 0-262-56038-0

  • Common LISPcraft by Robert Wilensky
    ISBN: 0-393-95544-3

  • Object-Oriented Programming in Common Lisp by Sonya E. Keene
    ISBN: 0-201-17589-4

  • Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Jay Sussman w/Julie Sussman
    ISBN: 0-07-000-422-6

  • ANSI Common Lisp by Paul Graham
    ISBN: 0-13-370875-6

  • Programming Paradigms in LISP by Rajeev Sangal
    ISBN: 0-07-054666-5

  • The Art of the Metaobject Protocol by Gregor Kiczales, Jim des Rivieres, and Daniel G. Bobrow
    ISBN: 0-262-11158-6

  • Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp by Peter Norvig
    ISBN: 1-55860-191-0

  • Practical Common Lisp by Peter Seibel
    ISBN: 1-59059-239-5

  • Common Lisp The Language by Guy L. Steele
    ISBN: 0-932376-41-X

  • Anatomy of Lisp by John Allen
    ISBN: 0-07-001115-X

  • Lisp Objects, and Symbolic Programming by Robert R. Kessler
    ISBN: 0-673-39773-4

  • Performance and Evaluation of Lisp Systems by Richard P. Gabriel
    ISBN: 0-262-07093-6

  • A Programmer's Guide to Common Lisp by Deborah G. Tatar
    ISBN: 0-932376-87-8

  • Understanding CLOS The Common Lisp Object System by Jo A. Lawless and Molly M. Miller
    ISBN: 0-13-717232-X

  • The Common Lisp Companion by Tim D. Koschmann
    ISBN: 0-417-50308-8

  • Symbolic Computing with Lisp and Prolog by Robert A. Mueller and Rex L. Page
    ISBN: 0-471-60771-1

  • Scheme and the Art of Programming by George Springer and Daniel P. Friedman
    ISBN: 0-262-19288-8

  • Programming In Scheme by Michael Eisenberg
    ISBN: 0-262-55017-2

  • The Schematics of Computation by Vincent S. Manis and James J. Little
    ISBN: 0-13-834284-9

  • The Joy of Clojure by Michael Fogus and Chris Houser
    ISBN: 1-935182-64-1

  • Clojure For The Brave and True by Daniel Higginbotham
    ISBN: 978-1-59327-591-4



u/michaeljsmalley · 17 pointsr/pics

I was there today and I bought two books:
http://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025
and
http://www.amazon.com/Programming-Python-Mark-Lutz/dp/0596158106/ref=sr_1_5?s=books&ie=UTF8&qid=1299370602&sr=1-5

I get to the counter..."There are no refunds or exchanges, just a heads up man". Yeah, so what? No problem.

Then he proceeds to take out a black indelible marker and scribble on the back of the brand new books I just purchased. I am standing there thinking, "Okay, these books are now my property, and the guy just basically defaced it."

Since I was happy I got these books for a very good price, I didn't put up much of a fight, and the guy working at the register was extremely nice through and through. It just appears the business prodigies who run Borders and have successfully managed to run it into the ground also instructed their front line employees to make like Banksy on all sales. What is the logic here? My wife thinks it was to prevent resale, but how does that hurt Borders?

u/wrelam · 12 pointsr/C_Programming

C Interfaces and Implementations has some decent advice for designing C programs. This is also a skill which you 'll develop with time (e.g. over your entire career) so don't worry too much about figuring it out immediately; it requires experience. As you work on various projects you'll get a sense for what works and what doesn't so that over time you'll have developed strategies for solving particular types of problems.

OOP concepts are still valid even though C may not have ways to necessarily implement them within the language proper. Object-Oriented Software Construction is a fantastic book for learning OOP concepts. As your C experience grows, you'll begin to see ways of implementing some of those design strategies with C, even though it's not an OO language.

Knowing when to use what type of data structure can also aid in simplifying your code base. The standard book for this is CLRS, but for C specific implementations and advice, see Algorithms in C.

u/fadmmatt · 12 pointsr/Compilers

I just taught a compilers class. I've been posting my lecture notes on my blog (with many more to come); these might be useful to you:

  • Meta-circular evaluators and first-class macros
  • Compiling to Java
  • Compiling to C

    I recommend writing a Scheme compiler first, and I'd use Lisp in Small Pieces instead of the Dragon book.

    The Appel books are also a good treatment of compiler writing.

    Try writing a recursive descent parser by hand first. This is a manageable endeavor for a Scheme-like language. I wouldn't bother with ANTLR for a second attempt; I'd use one of the hot parser combinator libraries instead.

    In total, a good first compiler project would be something like:

  • A hand-written lexer.
  • A recursive-descent parser.
  • A normalizing pass to flatten expressions.
  • An escape-analysis pass.
  • A closure conversion pass.
  • A lambda-lifting pass.
  • A C-emission pass.

    You could then retarget to x86 if you write a register allocator.

    Good luck!
u/sriramalka · 11 pointsr/compsci

This is a good list. I'd definitely not go for Winskel's book, and I'd skip the Dragon book because I think it is quite out of date (nothing on type systems, or first-class functions or even objects).

For languages, I'd go with Andrew Appel's Modern Compiler Implementation in Java (or "in ML"), and for language semantics, I'd go with
Semantics with Applications: An Appetizer, followed by Pierce's Types and Programming Languages (TAPL).

Also, Knuth's Concrete Mathematics is very very good, but is heavily skewed towards number theory. It is a must-read if one's interests are in crypto, but won't help you at all if for example, you want to work with databases, theorem proving, programming languages etc. You need a solid set theory foundation. Or if you were interested in graphics or machine learning, I'd go for a solid linear algebra foundation.

There are no systems books on your list, so I'd suggest one on operating systems: it is free and very good.
Operating Systems: Three Easy Pieces

u/BroDudeGuy · 10 pointsr/iOSProgramming

You can dive right into Objective C, I was only vaguely familiar with C and I've published a few apps without any problems. However, if you're intent on learning C pick up 'The C Programming Language' (K&R), not only the best C programming book, but one of the best programming books ever written.

Objective C books, I recommend one of the two or both books,
'Programming in Objective C 3rd edition' or
'Objective C: The Big Nerd Ranch Guide'

Both of these books are excellent resources for learning and I keep them close by whenever I have a question.

In terms of learning iOS development. I recommend going into iTunes U and downloading the latest Stanford University iPhone development course. I believe Winter 10 is the newest, follow along those classes and the class website, treat it like a real class, do the homework and all the assignments. There is no text book for the class, but this other book by Big Nerd Ranch, 'iOS Programming: The Big Nerd Ranch Way' is totally awesome.

After these classes and books you should have a great foundation for iOS development. Once you feel comfortable with everything and have an app or two under your belt, download Madison Technical College's Advanced iPhone Development course videos from iTunes U and Apple's own WWDC Session Videos.

Each MTC video is about 3 hours, watch them in chunks. The professor, Brad Larson is one of the best iPhone developers out there and in my opinion is one the best contributors to the community, (see his posts on stack overflow).

Lastly, check out www.raywenderlich.com. My personal favorite iPhone development website. It's updated every Monday, Wednesday, Friday with great technical tutorials that are funny and educational.

Best of luck to you and welcome to iOS development :-D.

u/2ht · 10 pointsr/learnpython

While I find doing challenges such as Project Euler fun, and they're good for making me think outside the box, I need to feel "accomplished" when I program. Solving a puzzle generally has no practical purpose, and it isn't something I can go back to later to experience again.

So work on either something practical or something entertaining, like a game. As long as it is something you can run later and be proud of.

  1. Write small programs that will improve your daily life. E.g. track all your movies, what shows you watch or books you read, a todo list app, write a simple command line finance manager, etc.
  2. Learn a web framework such as Flask or Django
  3. Read http://www.greenteapress.com/thinkpython/thinkpython.html if you are interested in a computer science approach to Python (as well as the MIT class)
  4. Buy and read http://www.amazon.com/Programming-Python-Mark-Lutz/dp/0596158106 if you want a more advanced book on Python (well worth it)
  5. Read and work through http://inventwithpython.com/ - both books - if you think game dev might be fun.
u/teknocide · 10 pointsr/scala

I'm not sure I'm quite over the gap yet but what's brought me this far is probably unhealthy levels of enthusiasm coupled with trial-and-error.

Truth be told it took a while, but we started out on different terms. I started learning Scala the same week I started learning C-sharp for a new employment some 3.5 years ago. Digging into the now a bit dated second edition of Programming in Scala was for me a timely decision as my hobby helped me in my professional work.

Scala and modern C-sharp have some similarities in that they use high level abstractions to process collections. Things like map, flatMap, filter (Select, SelectMany and Where in C#) are commonplace and the times I reach for foreach, let alone a lowly for-loop, are easily counted.

There are some details that differ in how collections are handled: .NET has them lazy by default and everything end up an IEnumerable<OfSomeType> whereas Scala is mostly eager. Both variants have pros and cons but I must say I prefer .NET here, it feels like the "more functional" way of doing things and also interestingly enough the way Java 8 has decided to do it. A lot of people like to argue about this, which is a good thing as it means we'll see development in both aspects.


Anyway, the message that I am trying to convey is that you need to know how it works, and why it works, before you can understand why it's slow. That Scala runs on the JVM by default doesn't mean its constructs are equal, no matter how similar they may seem. Scala's for-comprehensions, for example, are not analogous to a vanilla Java for or even foreach. Rather, they are literally a way of expressing flatMap, map and filter in a more linear fashion. They are functional and carry an overhead

I'll agree with both the enthusiasts and the pessimists and say that Scala gives you more than enough rope to shoot you in your foot. Maybe unfortunately so as we are much more likely to screw up spectacularly while transitioning from one language to a seemingly similar language, as we are a couple of years down the road.


To round off, getting over the gap is as much about taking in as it is about letting go. It is an investment in spare time: a worthwhile investment in my experience.

Finally a few tips:

  • Use the REPL to explore snippets of code;
  • Use worksheets in either IntelliJ or Scala IDE to explore slightly longer pieces of code, unless you're comfortable with copy/pasta;
  • Try to get a good grasp of Scala's type system; learn to love higher kinded types;
  • Do not be afraid of implicits;
  • Daniel Westheide wrote an excellent guide to Scala. It is quite brief; there's also
  • Twitter's Scala school, used internally I imagine. It might be coloured by how Twitter uses Scala;
  • Look/ask on StackOverflow if you have concrete problems; it helps the knowledge base grow and be accessible in a beautiful way;
  • Google the heck out of everything

    Sorry for the rant!

    addendum: Yes! I feel I am more productive in Scala compared to both Java and C#, even for bigger projects. The ability to try ideas and flesh out code is much faster once you get used to how the type inference works (and doesn't work in some instances)
u/akevinclark · 9 pointsr/AskProgramming

These are great suggestions. The three books I typically give devs early (that fit in well with the two presented here) are:

Refactoring by Martin Fowler

This is a list of patterns of common refactoring a and how to do them safely. It’ll help you recognize transforms you need to make in your code as it changes.

The Pragmatic Programmer by Dave Thomas and Andy Hunt

This is a great guidebook for how to get better at being a software engineer. Essential read.

And while there are lots of options for design patterns books...

Head First Design Patterns was the one that helped me internalize them. Even if you aren’t writing much (or any) Java, the method of teaching is hugely valuable.

u/dnew · 9 pointsr/google

> how to use google to solve a programming problem

You can't. You have to figure out how to solve the problem yourself. Then you use Google to look up individual pieces of that.

In other words, you have to go "Well, I need to open the file, then read it line by line, find the first opening brace, find the last closing brace, and extract the piece of the string between those two braces, then print that out."

How do I open a file? I can google that.

How do I find the opening brace? I can google that.

How do I chop out the middle of a string into a new string? I can google that.

See what I mean?

> CS textbooks in general just aren't as well written

Not any more. People just generally don't give a shit, I've found. I've learned numerous programming languages by reading the manual for the compiler in older times. Nowadays, you're lucky if there's even a formal spec of the syntax of the language, let alone a complete readable manual. The "Ruby on Rails" text that seems to be the authoritative text is full of stuff like "this routine seems to do ...." meaning the guy writing it doesn't actually know, and didn't bother to read the source code to figure it out for sure.

However, the good news is that the classic books full of the knowledge that does not become outdated are actually very well written. Start with some of Knuth's texts (https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming), Date's book on SQL and relational models (http://www.amazon.com/Introduction-Database-Systems-8th/dp/0321197844), Bertrand Meyer on OOP (http://www.amazon.com/Object-Oriented-Software-Construction-Book-CD-ROM/dp/0136291554) and so on. (That last is even available as a PDF floating around.)

> some of the knowledge you gain could become potentially outdated in the future

Everything that you could look up on Google will be outdated in about five years. The stuff about how computers work, how to solve problems, etc never gets outdated.

On the other hand, it's one of the few jobs where you can take a job to do X and start working on it without any idea of how to do X. I've been programming almost 40 years and I've never taken a job that I knew how to do when I took the job.

u/lacosaes1 · 9 pointsr/programming

> Modern Compiler Implementation in Java

One question about this book. Everyone here bitches about how the code sucks on that one because Appel tried to write Java as if it was SML. It seems, however, that people here are talking about the first edition. Palsberg made a lot of improvements in the second edition to the code:

http://www.amazon.com/Modern-Compiler-Implementation-Andrew-Appel/dp/052182060X

Has anybody here read the second edition?

u/mhd · 8 pointsr/programming

Friedman & Felleisen Little Schemer seems noteworthy. Unorthodox, but nicely done.

And while I think that Meyer's technical writing isn't exactly the best, Object-Oriented Software Construction has a nice visual layout and is one of the few computer books that uses color effectively.

u/DonaldPShimoda · 8 pointsr/ProgrammingLanguages

I've peeked at this free online book a few times when implementing things. I think it's a pretty solid reference with more discussion of these sorts of things!

Another option is a "real" textbook.

My programming languages course in university followed Programming Languages: Application and Interpretation (which is available online for free). It's more theory-based, which I enjoyed more than compilers.

But the dragon book is the go-to reference on compilers that is slightly old but still good. Another option is this one, which is a bit more modern. The latter was used in my compilers course.

Outside of that, you can read papers! The older papers are actually pretty accessible because they're fairly fundamental. Modern papers in PL theory can be tricky because they build on so much other material.

u/ThereKanBOnly1 · 7 pointsr/csharp

There's a lot of good answers here, but I'm going to take a more abstract position. I'd argue that the point of async/await is to not have to worry about, or understand all the minute mechanics of, writing asynchronous code.

As many stated, what you might need those asynchronous operations for might be something as straight forward as some disk I/O, a database call, a network call, or maybe even a long running computation of some sort. Without async/await, you're simply waiting for those to finish, rather than being able to switch contexts and do something else.

Maybe you don't need to, and that's fine. Not every application needs async calls, but chances are it can be useful to quite a large number of cases.

Fundamentally, the threading model is simply too complex, full of far too many pitfalls, and far too inaccessible to be widely used and widely effective for the vast majority of .Net programmers. Async/await is a different approach to programming for concurrency that puts the onus on the framework itself, and with a little imposition on the programmer, allows the programming of concurrent operations that would be largely impossible for a lot of us.

That is the advantage. Don't worry about threads, because as Stephen Cleary has said, once you write code with threads, it's already legacy code.

u/shadow31 · 7 pointsr/rust
u/GreyDeck · 6 pointsr/java

I liked "Core Java", but it is not as concise as Kernighan/Ritchie.

u/kradef · 6 pointsr/learnjava

Cay S. Horstmann
Core Java Volume I--Fundamentals

https://www.amazon.com/Core-Java-I-Fundamentals-10th/dp/0134177304

u/death · 6 pointsr/learnlisp

The Keene book is good.

There are also some good essays about CLOS on RPG's website.

Finally, the AMOP book shows that CLOS is simple at its core.

u/ece_guy · 6 pointsr/kindle

To be honest with you, I'd rather not steal books as well. But what really pisses me off is the fact that there are so many e-books that are MORE expensive than the paperback edition, which makes absolutely no sense to me at all. Here's one example.

Yes, this may have been already discussed to death. Publishers claim that there are extra costs of editing for the electronic version, etc. I still don't see how that can justify a higher cost, considering the bandwidth or the disk space it takes up is negligible in this day and age.

EDIT: Also, don't forget the fact that you'd also get a physical copy of a CD, that would have all the necessary example codes, etc. You don't get that with the Kindle edition. I'm sure you can get the examples online, but there have been cases where there were no supplementary materials (that are usually essential) online.

u/KryptosFR · 6 pointsr/csharp

You beat me to it :)

Another recommendation is Concurrency in C# Cookbook by Stephen Cleary. It is easy to read, even on a trip. But you might want to do that at the end of said trip because it will make you want to experiment it yourself.

u/1331 · 6 pointsr/rust

The ISBNs are the same, so it is likely that they are the same book and the data on the UK site is just out of date.

u/rjett · 6 pointsr/javascript

Advanced

Medium

Old, but probably still relevant

Yet to be released, but you can get the in progress pdf from the publisher

Docs

The one that everybody recommends

HTML5 spec

HTML5Rocks

Latest Webkit News

Other than that build build build. Make demos and play. Ask questions here or on stackoverflow and read other people's code. Also, lots of great old JSConf videos out there.

u/hem10ck · 5 pointsr/learnprogramming

I was gonna say the same. You'll get much more bang for your buck and a much more wholistic and comprehensive understanding by just grabbing a book like Core Java Fundamentals.

Core Java Volume I--Fundamentals (10th Edition) (Core Series) https://www.amazon.com/dp/0134177304/ref=cm_sw_r_cp_api_BO7oxbBAE9CXE

u/C385 · 5 pointsr/learnpython

I found the first couple of chapters of Programming Python by Mark Lutz helpful

https://www.amazon.com/Programming-Python-Powerful-Object-Oriented/dp/0596158106

u/paultypes · 5 pointsr/programming

I think things would be much easier with a small team of average developers, primarily because converging on any given set of things you want to do/want to avoid in the language is much cheaper from a communication-cost perspective. If the group is small enough (say 5-10 people), you can probably get 50,000-foot agreement, at least, over a nice lunch, and hash out the details on a Wiki or something.

Scala's great strength remains that it goes out of its way to accommodate you whether you're treating it as "Java without semicolons" or "Haskell without pervasive laziness and with much poorer type inference." Given that, your biggest question, regardless of the size of your team, is: what kind of software development culture do we have/want to create?

Let me sketch a few example scenarios:

  1. You have a non-trivial existing codebase in Java and Spring. You're excited about Scala, maybe are reading Programming in Scala or taking a Coursera course, and this typifies your team. You've looked around for information about how to use Scala with Spring, and found that information is thin on the ground, at best, and when you ask in the #scala IRC channel or on mailing lists, the response is "Yeccch. Don't." Not very helpful with your existing codebase! For this, I would say: work at whatever comfort level with Scala you have, and take advantage of spring-scala (full disclosure: I took over maintenance of spring-scala from the folks at Pivotal Labs who did the actual heavy lifting).
  2. You have the opportunity to do a greenfield project, maybe because you're refactoring your organization's monolith to be microservice-based, and you get to implement one of your organization's first microservices. You've heard great things about using Scala for microservices, but you still fall into the "reading books and taking Coursera courses" category in 1), so important factors here are availability of semi-pre-packaged solutions, community, documentation, etc. Here I would suggest looking at Lightbend's Activator and its templates for opportunities to quick-start a microservice, like the Akka HTTP microservice. Then you can gradually add functionality as requirements and/or your learning curve permit.
  3. You've heard a lot about pure functional programming in Scala, maybe you're reading Functional Programming in Scala, maybe you have at least one team member who's an intermediate-to-advanced Scala developer and/or you have a clear direction in HR to find them. Your colleagues might look at you funny when you say that a REST microservice is obviously just a HttpRequest => HttpResponse that "does some stuff," so it's actually an HttpRequest => F[HttpResponse] where F is a Monad, but they don't run screaming into the night; they want to know more. You decide to do a Proof of Concept with http4s for the REST stuff and Doobie to talk to good ol' PostgreSQL (because not all of your tech choices can be totally nuts). You might have a look at this example to get you started, and one of the things you notice about it immediately is... how straightforward and unscary the code actually is, strongly resembling what you'd write in any other language. But when you change the code, the compiler, way more often than not, tells you how you screwed up, before your code even can run.

    All of these scenarios are, in my opinion, completely reasonable, even if I got a little tongue-in-cheek on the last one. :-)
u/CSMastermind · 4 pointsr/learnprogramming

I've posted this before but I'll repost it here:

Now in terms of the question that you ask in the title - this is what I recommend:

Job Interview Prep


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

    Junior Software Engineer Reading List


    Read This First


  10. Pragmatic Thinking and Learning: Refactor Your Wetware

    Fundementals


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

    Understanding Professional Software Environments


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

    Mentality


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

    History


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

    Mid Level Software Engineer Reading List


    Read This First


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

    Fundementals


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

    Software Design


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

    Software Engineering Skill Sets


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

    Databases


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

    User Experience


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

    Mentality


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

    History


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

    Specialist Skills


    In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.

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

If you want to learn lisp I would read the following books in the order listed.

u/BinaryLust · 4 pointsr/Compilers

Here are few more advanced books that I highly recommend after you learn the basics and want to really implement something.

​

- Modern Compiler Implementation in Java 2nd Edition

- Advanced Compiler Design and Implementation 1st Edition

​

Also here is a link to a GitHub page with tons of compiler related resources. awesome-compilers

u/po8 · 4 pointsr/rust

I'm confused. Steve Donovan is the author of the website A Gentle Introduction to Rust. I like Donovan's website a lot and use it together with Programming Rust and a few other resources in teaching.

Step Ahead with Rust, the linked book by Jonathan Creekmore and James Miller, doesn't seem to have anything to do with Donovan's website? I haven't had a chance to look at this book yet. Honestly, Programming Rust is great and thus I'm not really looking for another book right now, but maybe there's something in this one that stands out?

u/fluicpana · 4 pointsr/italy

Per testare le acque velocemente puoi usare https://rubymonk.com/ (introduce Ruby in modo basico). Anche Coursera, Khan, Udacity e simili hanno corsi introduttivi sulla programmazione.

Mentre se vuoi imparare a programmare, il percorso deve toccare almeno tutte queste tappe, in ordine:

  1. [Computer Organization and Design](http://www.amazon.com/Computer-
    Organization-Design-Fourth-Edition/dp/0123744938)

  2. The Structure and Interpretation of Computer Programs

  3. Un buon libro di Assembly

  4. The C programming language

  5. Compillers

  6. Code complete, The practice of programming

  7. Fai finta di aver letto tutto The art of computer programming

  8. Un linguaggio a oggetti, magari Programming Ruby

  9. O/E Python, Dive into Python

  10. Design patterns

  11. Impara un linguaggio funzionale.


    Da qui puoi partire e specializzarti in quello che ti interessa

u/readitmeow · 3 pointsr/ruby

I started learning ruby 3 months ago. I started with "Learn Ruby The Hard Way" that really holds your hand so that should help you with how to get started. Then I read the first 9 chapters of pickaxe. Then I did enough easy, medium and a few expert problems on codeeval.com to hit top 95% for ruby. Now I'm going through a few rails tutorials. Good luck.

u/cunttard · 3 pointsr/C_Programming

I think the Deitel C How to Program books seem really decent. I have a friend that is learning with this book at the moment. There is a lot of emphasis on modern C programming and discusses common pitfalls that arise.

I honestly wouldn't start with K&R C but that's my own opinion. It is a dull read and the beginning exercises are incredibly dull. As a reference it is quite fantastic.

u/angryfuck · 3 pointsr/C_Programming

It is an accurate book on C. Modern? Probably not. This book and this book are modern. The former gives you coverage of modern C environments and the latter is just a modern tutorial text in C.

u/project2501a · 3 pointsr/greece

Του Μακρή το homework λύνεις, ρε συ;

"C How to Program" Κεφάλαιο για pointers

u/mahalo1984 · 3 pointsr/learnmath

If you have truly finished single variable calculus (including infinite series and polar coordinates), the direction you head from this point depends on the direction you wish to go. I see three paths from here:

You can go up.

You can go down.

Or you can go sideways.
.

.

.

By up, I mean, more complicated calculus and other math techniques that would help you if your end goal is to eventually do physics or engineering. The courses to take next would be:

a. Multivariable calculus

b. Linear Algebra

c. Differential Equations

d. Probability and Statistics (with Calculus, so that you actually understand what you're doing)


the above can be taken in any order
.

.

.


By down, I mean, you can investigate the fundamentals. If you are interested in becoming a math teacher or a math professor or just a math theory person in general, this is the way to go.

a. Discrete Math (you may have done this already, not sure)

b. Basic Proof Writing

c. Number Theory

d. Abstract Algebra

e. Computability Theory


These are listed from entry to more advanced, though they don't necessarily build off each other. Realize that a lot of this, while interesting won't necessarily have direct applications if you really want to get into some particular applied field.
.

.

.

.

By sideways, I mean something applied. Learn how to solve new problems with the math you already know:

a. Physics

b. Data Analysis or Inferential Statistics (helpful to have Prob and Stat first)

c. Modeling and Simulation (helpful to have Prob and Stat)

d. Numerical Analysis

e. Information Theory (helpful to have Prob and Stat)

f. Computer Programming


*Note that it might be helpful to learn more about the other subjects before getting too heavy into any of these save computer programming.
.

.

.

.

Here are some nice books in no particular order:

http://product.half.ebay.com/Linear-Algebra-by-Ray-Kunze-and-Kenneth-Hoffman-1999-Hardcover-Revised/50499&tg=info (Linear Algebra)


http://product.half.ebay.com/_W0QQprZ57268950 (A well-written approach to Multi-variable calculus that makes you think to learn)


http://product.half.ebay.com/_W0QQprZ43118664 (The text book on Computability)


http://product.half.ebay.com/Discrete-Mathematics-by-Charles-R-Wright-and-Kenneth-A-Ross-2002-Paperback-Revised/2379179&tg=info (a more readable treatment of Discrete Math)


http://product.half.ebay.com/_W0QQprZ77981207 (a less readable treatment of discrete math but uncommonly thorough and rigorous, don't do this one alone though, you need a helper of some kind)


http://product.half.ebay.com/John-E-Freunds-Mathematical-Statistics-with-Applications-by-John-E-Freund-Irwin-Miller-and-Marylees-Miller-2012-Paperback/124286253&tg=info (sometimes obtuse, but generally very sound treatment of probability)

.

.

.

Some of the beaten path stuff:

http://product.half.ebay.com/_W0QQprZ290535 (a fun read that makes you think)


http://product.half.ebay.com/_W0QQprZ109083098 (to help with reasoning and understanding what formal systems are, perhaps get this new as it comes with a one use cd that gives you lots of interactive exercises)

.

.

.

Programming:

http://www.amazon.com/Introduction-Java-Programming-Comprehensive-Edition/dp/0132130807/ref=sr_1_2?ie=UTF8&qid=1373519082&sr=8-2&keywords=java+liang (Java Programming)


http://www.amazon.com/Starting-Out-Early-Objects-8th/dp/013336092X/ref=sr_1_1?s=books&ie=UTF8&qid=1373519198&sr=1-1&keywords=addison+wesley+starting+out+with+c%2B%2B (C++)
.

.

.


Unfortunately, I'm not qualified to recommend any other books.

u/Gearhart · 3 pointsr/programming

>I just started a job with a lot of legacy code.

Good news! The 2nd edition of Refactoring has been released (almost a year ago), this time using JavaScript instead of Java!

u/suhcoR · 3 pointsr/ProgrammingLanguages

Yes. Here are some papers about it if you're interested: https://web.archive.org/web/20050510122857/http://www.iis.sinica.edu.tw/~trc/languages.html They refer to earlier work which again refers to Lisp and a precursor of CLOS.

The Art of the Meta Object Protocol describes the MOP. If you're looking for a general book about CLOS then you could e.g. have a look at https://www.amazon.com/Object-Oriented-Programming-COMMON-LISP-Programmers/dp/0201175894.

u/timlee126 · 3 pointsr/ProgrammingLanguages

Thanks.

Are MOP and CLOS the same thing?

Now there are three books mentioned

u/JackStratifPapaJohns · 3 pointsr/learnprogramming

> I'm just afraid to fail that too or be too overwhelmed.

You said you learned math on your own via Khan Academy and you're afraid to fail. Clearly you need a refresher about what Khan Academy is all about. :)

I think you need to become more structured in your studies and really sit down to complete something from start to finish rather than knowing a little bit about a lot of things. I'd suggest picking up a book like Learning Python and setting a schedule each week where you'll sit down and read the book. Once you complete that book cover to cover, you can move onto a book like Programming Python.

​

I absolutely think college is a great option for you. If you're scared, start off by getting 2 year degree then move onto a 4 year degree. What a disservice to the world it would be for such a curious mind to be wasted working in a construction store.

​

Always remember bud, life is a marathon not a sprint.

​

u/JavaAndMIPS · 3 pointsr/javahelp

Make a personal project. I made a game editor.



Read more books.

Java Swing:

https://www.amazon.com/Java-Swing-Second-James-Elliott/dp/0596004087

Java I/O:

https://www.amazon.com/dp/0596527500/

Java Generics and Collections:

https://www.amazon.com/Java-Generics-Collections-Development-Process/dp/0596527756/

Java Concurrency:

https://www.amazon.com/Java-Threads-Understanding-Concurrent-Programming/dp/0596007825/

Java Network Programming:

https://www.amazon.com/Network-Programming-Elliotte-Rusty-Harold/dp/1449357679/

Java Web Services:

https://www.amazon.com/dp/1449365116/

Java Database Programming:

https://www.amazon.com/dp/1565926161/

Java Performance:

https://www.amazon.com/dp/1449358454/

Intro to Design Patterns w/ Java:

https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly-ebook/dp/B00AA36RZY/

Design Patterns (not Java and very dry, but much more in depth):

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

If you read every O'Reilly book on Java and do two or three big projects (or ten small ones) with what you learn in each book, you will learn how to do anything with Java. Java can do anything any other language can, but it takes longer to get there. Once you get there - once you build it - it will run forever, provided it's built well.



Online resources.

http://www.tutorialspoint.com/swing/

https://www.javatpoint.com/java-swing

The javax.swing class:

https://docs.oracle.com/javase/7/docs/api/javax/swing/package-summary.html

The Java API specification:

https://docs.oracle.com/javase/7/docs/api/

Never took one of these, defer to someone else's advice:

https://www.udemy.com/java-swing-complete/

It takes a while to figure out how to effectively use google. Look up my posting history to see how to format posts. You may need to make a test class to simplify things or provide a simple (and obviously safe) thing that people can execute and debug, if they decide to help you.

You will spend a lot of time on the Java API spec, so make sure that you know how to read a method header and signature. You'll get used to it after a few weeks.

*

General advice.**

Debugging is the single most important thing you do. If you can't see what's going wrong, you won't fix it except via trial and error (which is frustrating and takes forever). Any time something goes wrong, either walk through it with a debugger or get print statements working. Getting print statements working is often a job in itself.

I spend more time debugging than I do programming, because when things are going right it's a breeze but when they aren't it takes ages.

Take up some other hobby that keeps you active.

When you're frustrated and nothing is working, do something else. Go for a walk, garden for a bit, cook something. Make sure you have a notepad or note-taking program on your phone so you can stop and take notes when the solution comes to you.

If nothing else is working, just screw around with things and make print statements to see what they do. That's how I learned everything.

Try to break everything.

Don't be afraid of embarassing yourself.

u/andrewcooke · 3 pointsr/programming

i don't know what AP means, and sorry for being bad tempered, but if you're curious, the book by wadler explains them well and includes the historical context and compromises in the design (wadler is a big haskell / functional programming guru who was also involved in the java generics design).

http://www.amazon.com/Java-Generics-Collections-Maurice-Naftalin/dp/0596527756

u/Kalanthroxic · 3 pointsr/AskProgramming

It depends on taste. If you want the taste of functional while having the comfort of your object oriented world available, I'd recommend Scala, as it lets you do functional stuff while remaining sorta in the Java-sphere. A lot of people just use Scala as "Better Java". For learning Scala, I'd recommend "The Staircase Book" by Martin Odersky (https://www.amazon.com/Programming-Scala-Comprehensive-Step-Step/dp/0981531644). Looking at the cover, you'll probably figure out why it's known by that name.

If you want to properly try on functional programming, I'd go straight for Haskell with the help of a suitable book. Learn You a Haskell for Great Good is available online at http://learnyouahaskell.com/chapters and should work well enough for the purpose.

u/guiness88 · 3 pointsr/scala

I second this. Great course to get you started. This book is also amazing (main author is the father of Scala himself, the same man that did the coursea course - M. Odersky).

u/root_pentester · 3 pointsr/blackhat

No problem. I am by no means an expert in writing code or buffer overflows but I have written several myself and even found a few in the wild which was pretty cool. A lot of people want to jump right in to the fun stuff but find out rather quickly that they are missing the skills to perform those tasks. I always suggest to people to start from the ground up when learning to do anything like this. Before going into buffer overflows you need to learn assembly language. Yes, it can be excellent sleep material but it is certainly a must. Once you get an understand of assembly you should learn basic C++. You don't have to be an expert or even intermediate level just learn the basics of it and be familiar with it. The same goes for assembly. Once you get that writing things like shellcode should be no problem. I'll send you some links for a few books I found very helpful. I own these myself and it helped me tremendously.

Jumping into C++: Alex Allain

Write Great Code: Volume1 Understanding the Machine

Write Great Code: Volume2 Thinking Low-Level, Writing High Level

Reversing: Secrets of Reverse Engineering

Hacking: The Art of Exploitation I used this for an IT Security college course. Professor taught us using this book.

The Shellcoders Handbook This book covers EVERYTHING you need to know about shellcodes and is filled with lots of tips and tricks. I use mostly shells from metasploit to plug in but this goes really deep.

.

If you have a strong foundation of knowledge and know the material from the ground-up you will be very successful in the future.

One more thing, I recently took and passed the course from Offensive Security to get my OSCP (Offensive Security Certified Professional). I learned more from that class than years in school. It was worth every penny spent on it. You get to VPN in their lab and run your tools using Kali Linux against a LOT of machines ranging from Windows to Linux and find real vulnerabilities of all kinds. They have training videos that you follow along with and a PDF that teaches you all the knowledge you need to be a pentester. Going in I only had my CEH from eccouncil and felt no where close to being a pentester. After this course I knew I was ready. At the end you take a 24-long test to pass. No questions or anything just hands on hacking. You have 24 hrs to hack into a number of machines and then another 24 hours to write a real pentest report like you would give a client. You even write your own buffer overflow in the course and they walk you through step by step in a very clear way. The course may seem a bit pricey but I got to say it was really worth it. http://www.offensive-security.com/information-security-certifications/oscp-offensive-security-certified-professional/

u/Mat2012H · 3 pointsr/learnprogramming

it doesn't matter what editor you use to write code, the code will be exactly the same at the end of the day (unless you use Visual C++ gimicks).

I recommend buying a book.

Following video tutorials will just be you copy and pasting code, which really doesn't help learn.

I learned from this book and so I know it is a good book to learn from :)

u/markdoubleyou · 3 pointsr/csharp

As others have mentioned, writing code is the best way to get exposure. But if you're a book guy like me then there are a lot of option out there that'll accelerate the process. You'd be insane to read all the following--these are just starting points that can accommodate different interests/tastes.

Having said that, I'll start with the one book that I think every C# developer should own:

Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries

... it's a good read, and it includes a lot of direct input from the designers of the C# and the .NET Framework. Microsoft has been really good about sticking to those guidelines, so you'll immediately get a leg up on the Framework libraries if you work through this book. (Also, you'll win a lot of arguments with your coworkers about how APIs should be designed.)

General knowledge books (tons to pick from, but here are some winners):

u/RedditWithBoners · 3 pointsr/csharp

I purchased TCP/IP sockets in C a while back, and at the time was working a job doing Linux network development. So, seeing the low-level APIs and diving straight into the work is what I recommend, but I know it's not the most accessible route. Unfortunately, I don't have any other book references as the majority of my understanding is documentation, blogs, and code. Honestly, my knowledge of sockets in Windows is far from complete.

There is a regular poster to /r/csharp who writes a series of articles and code about networking in C#. I believe he started from simply opening a socket, then continued onto TCP, UDP, and eventually creating a networked game. Surprisingly, I came across this when I was trying to find his posts. You might have better luck searching reddit (I only searched Google).

As for async, I purchased Stephen Cleary's book Concurrency in C# Cookbook and Alex Davies' book Async in C# 5.0, but I have barely cracked open either. :( Stephen Cleary's blog has a significant wealth of information on how async/await works, and things to do and avoid. Once you get over a few humps, MSDN's documentation is pretty thorough and readable as well.

Edit:
Found the networking series I mentioned above - https://16bpp.net/tutorials/csharp-networking/, written by /u/def-pri-pub.

u/GeekBoy373 · 3 pointsr/rust

Why not link directly to the content?

link

u/henzosabiq · 3 pointsr/learnprogramming

Do you need something quite fast or really fast?

If its the first, Java is pretty good at is. Syntax is kinda verbose but that can change (hint: learn modern Java). JavaFX is one of the finest Java library I've ever tried so far. Gradle is the pip here in some aspect.

Don't like Java? Try Kotlin instead. 100%(-ish) interoperable with Java (some blog post found a few flaw in code conversion; some are not an edge case).

For the latter, Rust almost got all the points covered. The learning curve is quite high and the good news are the community are so welcoming; they wont treat you like a punching bag. Awesome way to include external libraries through Cargo and .toml files (its like NodeJS in a sense of ease of use).

Still, no mature desktop GUI toolkit yet if we don't count WebAssembly (plus rust-bindgen that handles interop with js nicely) in since its on the web.

For desktop, you can try the Qt binding if you like. You might found some unresolved issue and when you do, just ask in r/rust or SO and come back tomorrow to find it answered most of the time.

Books? Programming Rust: Fast, Safe Sytems Development and The Rust Programming Book (official live book; maintained by the team).

Hope this helps.

u/TheRealQwade · 3 pointsr/JobFair

Yea, it actually worked out really well. As far as books, the only ones I have real experience with are the O'Reilly "animal" books (hopefully you know which ones I'm talking about), especially the "cookbooks." The downside about using Google as my teacher is it meant my programming fundamentals were not very good when I started. I do have an Object-Oriented JavaScript book that did an amazing job teaching me how to do my job better.

u/magenta_placenta · 3 pointsr/web_design

Pro JavaScript Design Patterns

http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X

JavaScript Patterns

http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752/ref=sr_1_1?s=books&ie=UTF8&qid=1303912468&sr=1-1

High Performance JavaScript

http://www.amazon.com/Performance-JavaScript-Faster-Application-Interfaces/dp/059680279X/ref=sr_1_3?s=books&ie=UTF8&qid=1303912468&sr=1-3

Object Oriented JavaScript

http://www.amazon.com/Object-Oriented-JavaScript-high-quality-applications-libraries/dp/1847194141/ref=sr_1_1?s=books&ie=UTF8&qid=1303912517&sr=1-1

JavaScript: The Good Parts

http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_4?s=books&ie=UTF8&qid=1303912536&sr=1-4

Everyone loves to swing from Crockford's nuts, but I found this book a little hard to read. I lack a CS background and I fully admit I need to re-read this book as last time I read it was beginning of 2009

JavaScript: The Definitive Guide 6th Edition

http://www.amazon.com/JavaScript-Definitive-Guide-David-Flanagan/dp/0596805527/ref=sr_1_1?s=books&ie=UTF8&qid=1303912643&sr=1-1

I just ordered this yesterday, the 5th Edition is the book that really kicked it off for me back in 2005.

jQuery is cool and all (as are all the other libs) but you should try to learn core JavaScript as much as possible.

u/duggieawesome · 3 pointsr/ruby

Sounds like you want to grab the Pickaxe book. It's a tome, but it'll take you through the Ruby way of doing things. The Ruby Way is great and easily accessible, but I don't believe it's been updated for Ruby 2.0.

Lastly, you can always skim through the Ruby docs.

Edit: You should also check out POODR. Great way of learning how to refactor!

u/baultista · 2 pointsr/learnprogramming

I've always felt like C is a good language for a programmer to think in. With that being said, I often recommend that a programmer who doesn't need to know C++ learn C if (s)he wants to learn something that will improve his/her skill across the board.

C will give you a good appreciation of what's going on behind the scenes in many of the languages you use. You'll get an appreciation for how passing by value and reference works in other languages thanks to pointers. You'll learn how your strings are actually managed in memory. You'll have a better understanding of how many of those built-in generics you may use (List<>, LinkedList<>, HashMap<>) actually work, because if you want to use them in C you'll have to implement them yourself or download a source file and read it to understand the author's implementation.

This knowledge will help you build more elegant solutions. You'll be less sloppy and gratuitous creating new strings anywhere and everywhere, and may even find yourself using references more often. Your code may or may not be cleaner, but you'll have an appreciation for how and why you should write code for runtime efficiency. You'll be more likely to use the right data structure for your task at hand.

The best part is that C has a great standard resource for learning the language. Pick up The C Programming Language Second Edition and read it cover to cover. By the time you're done you'll know everything you need to know about C, and will have a wonderful reference in the even that you need to use C later on.

If you want to improve your object-oriented programming skills, you don't need to learn a new language. It is best to learn OO independent of any language in order to gather a strong understanding of the underlying concepts and to be able to apply it to any language. Craig Larman's Applying UML and Patterns is the best book I've ever read on the subject.

u/CodeTamarin · 2 pointsr/computerscience

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

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

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

    ​

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

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

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

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

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

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

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

    FINAL NOTE: Read the soft skills books first.

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

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

Don't leave on that account alone. If you have a passion for programming, these concepts you missed can still be learnt. You do not stop learning once you finish your studies, on the contrary, CS is one of those professions where you have to constantly update your knowledge pool.

I would not worry as much about the details of what a protected class and if a subclass can access private members or not. Master instead concepts like encapsulation, separation of concerns, abstraction, ... concepts that transcend language-specific syntax. If you are actively studying by yourself, you will get always improve.

If you want to polish your OO skills, I highly recommend you find yourself a copy of Applying UML and Patterns. I would also recommend reading Code Complete 2, a must-read for all software developers.

u/legobreath · 2 pointsr/C_Programming

The King book is a gem. I alternate between that one and Deitel and Deitel's C: How to Program.

u/anundergroundnote · 2 pointsr/cscareerquestions

Just a heads up: they are planning on changing the text for the 161/162 sequence (Intro to CS I & II). They're moving away from Absolute C++ and towards Gaddis' "Starting out with C++: Early Objects". I don't know which term they are making the switch, but it's coming.

The main reason is that the Gaddis is easier for absolute beginners (which there are a lot of in the Intro class) than the Savitch. I like both for different reasons: I found the Gaddis to explain concepts in a much more beginner-friendly way as opposed to the Savitch which assumes you have a programming background (he even mentions this in the introduction). Conversely, the Savitch had a bit more depth on technical concepts and the how's and why's things are the way they are.


If you're currently working through Savitch's "Absolute C++" I would keep at it until classes start. You'll be ahead and have no trouble with the first term. Heck, you'll cover most of the class subjects by chapter 11-ish.

u/bestjakeisbest · 2 pointsr/learnprogramming

i would also recommend c++ after java, these two languages are like the basis for all programming jobs out there, though it wont be easy. c++ wont hold your hand like java does, but it is far more efficient, and there is less overhead with c++. If you want a good book for c++ then here is the one i used in my recent associet's in coputer science(cs1 and cs2). and if you have the money my favorite ide is called clion, made by the people that made intellij for java if you know of it, if you dont want to spend money on an ide for c++ code blocks, and code lite are 2 very good free c++ ide(s) i have used all of these ide(s) at one point or another and i stand by all of these ide(s). but i agree with all of the other people a certification isn't going to be important for getting a job, but proof you can actually do these things is far more important. i'm starting on my bachelor's in computer science and i realise that the most important things that will get me a job is the projects i work on in my spare time.

u/seanprefect · 2 pointsr/learnjava

Interfaces are often hard to understand, that's more a java thing than an OOP thing. As far as books go this one

https://www.amazon.com/Core-Java-I-Fundamentals-10th/dp/0134177304/ref=la_B000AQ1QDY_1_1?s=books&ie=UTF8&qid=1519328730&sr=1-1

is written by the same guy who wrote the java textbook i learned from (but that was like java 5 so my exact book would be out of date, this is up to date) I haven't read this one but going by how much I like my text book i'd imagine it's pretty good.


Going into interfaces and inheritance I'll attempt to provide a more approachable explanation. So classes can be sub classes of another object. This has 2 important affects.

First the subclass can access the properties and methods of its parent, this is useful for many reasons. You don't have to change every class when you want to make a change to some aspect, it also helps keep any given class from getting too large and complicated.

But the second important affect of being a subclass is that it allows other classes to know what a class can or can not do. So for example lets i have a class called animal, and it has the subclass dog, and I have another class called home which has a method that expects an animal. Since dog is a subclass of animal my home class knows it can treat dog like an animal. which involves casting the dog to animal, basically you're telling the JVM "Until i tell you otherwise treat this dog as just an animal" so after that casting you've got a dog but it's only treated as an animal (until you cast it back to dog) this is called polymorphism.

now the thing about subclassing , in java you can only be the child of one class, (this is a java thing not a general OOP thing, different languages have different approaches and there are pros and cons) but what if you want multiple superclasses ?

This is where we have interfaces. Implementing an interface basically promises the JVM that the methods that exist in the interface exist in the class. This means that you can treat classes that implement the interface the same way because you have a list of what you can do with the class , but you don't really make it a proper child of the class.

u/phao · 2 pointsr/java

I've heard good things about these two:

u/ziptofaf · 2 pointsr/learnprogramming

Ah! You have few options available then:

Helsinki's university MOOC:

https://moocfi.github.io/courses/2013/programming-part-1/

And two popular and often recommended books, you should be able to find them at your local university bookstore easily (even if you live outside US, at least Horstmann book is available in multiple languages):

https://www.amazon.com/Introduction-Programming-Structures-Comprehensive-Version/dp/0134670949

https://www.amazon.com/dp/0134177304

u/I_make_ur_toe_Curler · 2 pointsr/UCalgary

Computer Science is not about programming so if you worried about programming don't be! When I program I am usually googling most of the times lol. For example when I forget how to initialize an array in Java I will quickly reference the Oracle documentation online here.

This book is REALLY good! I use it all the times as a reference and it explains the concepts really well without all the bullshit that introductory books use such as weird cartoons or sample programs. I remember when I first took the introductory Java course at UofC I did okay but I never got a deep understanding of the language.

So in the Spring/Summer break I read this book and it cleared up a lot of things. Now I use it when ever I need to refresh up on a topic such as Interfaces in Java. Most of the computer science courses you will take in the future will require you to know the basics such as control statements and that's about it actually.

NOTE: I've only probably written at most 1000 lines of Java code during my undergrad in computer science, excluding assembling of course and my side projects.

EDIT:
TIPS:

1). Learn the basics of object orientated programming (use the book mentioned above) and then play around with an API such as the Java Swing API. I learned a lot! I learned how to MVC and structure my code. Its one thing to write code for a school assignment but it's a whole entire other thing if you plan on making a fully functional program. You will also get a good feeling for how GUI code is structured through out most software application.

2). Join the Problem Solving Club. You will get a deeper insight into solving and thinking about certain problems.

3). Have side project! Like make a basic game or a program that can do basic things such as open and edit files BUT with added complexity like implementing an actually user interface using an API such as the swing library in Java.

4). If you learn enough Java consider playing around with Android development. You will learn a lot and in some courses they actually make use of mobile development so you will be one step ahead of everybody else.

Good Luck!

u/GekkePop · 2 pointsr/learnjavascript

Here's a short list of what I used:

  • https://www.freecodecamp.org/ Use this for basics and just a general refresher from time to time. Also has lots of challenges you can use.
  • https://watchandcode.com/ This one really made some basic things click for me and made me really understand some important concepts.
  • The Modern JavaScript Bootcamp (2019) (Already mentioned by you, but funnily enough also one of my favorites)
  • The Complete Node.js Developer Course (3rd Edition) (same guy as above, this time some node.js)
  • https://developer.mozilla.org/nl/docs/Web/JavaScript , MDN docs are just great in general, but they also have some guides. Another way I like to use them is just make myself familiar with all the methods of for example an array. So I go to https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Global_Objects/Array and just go through everything one by one. This way I have way more knowledge about all the options I have when I get to an array problem.
  • Book: Secrets of the JavaScript Ninja
  • Book: Refactoring: Improving the Design of Existing Code
  • Book: Eloquent Javascript (not the biggest fan of the write style, but the content is still quite good)
  • Preordered book: Professional JavaScript for Web Developers

    This is all the result of lots of googling and personal experience. I am not in any way affiliated with any of these links and I have paid for everything myself when I bought them.

    How I 'invented' my project idea is basically by adopting the strategy to write down every idea I had. So did something annoy me at work? Write it down. Did I need something and it wasn't available or reasonably priced? Write it down. Had a random idea? Write it down. Every few weeks review your list and see if you are still convinced it will work otherwise delete it from the list. Keep this up and you will end up with a lot of deleted ideas, some decent ideas and a few good ideas. Keep expanding on your best ideas and keep reviewing everything. In the end you will have an idea that has survived lots and lots of reviews and has a fighting chance in the real world.

    Some things I like about my current project:

  • Doesn't need a huge investment besides my time;
  • Achievable by a small number of people or even just myself;
  • Can make a simple version first, but also have lots of opportunity to expand on this version;
  • Doesn't need huge amount of support.
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/kryptiskt · 2 pointsr/programming

> If the author truly cares about advancing software engineering, I'd ask what he's doing to advance software engineering (apart, of course, from proposing laws and writing about it on his blog)?

Bertrand Meyer has done a fair bit to do that, Eiffel and Object-oriented Software Construction sticks out.

u/wleahcim · 2 pointsr/programming

> The basic point of this was to gear your mind to think in terms of objects, methods, and the interactions between them.

Well, it depends on the problem domain. Sometimes, it's a good start to write down the nouns and verbs of your spec, and relate them to each other. That does not necessary lead to an OO design, especially if you concentrate on the verbs.

> how can us OO-thinkers learn how to "structure the solution differently"?

I can only recommend to go by example and look at existing designs. CLOS will show you a more "functional" OO style, and you'll loose some misconceptions from other OO languages. Keene's book is a good introduction. Otherwise look at papers from the FP community.

u/smallfishbigpond · 2 pointsr/lisp

On Linux I recommend grabbing the latest SBCL. If you really need to stay on Windows, then CLISP is fine.

You can edit code in any text editor, so simply choose your favorite one on any platform. You will find most of the main CL nerds use emacs and SLIME as their "IDE".

As for books, there are no good books on Lisp. I'm serious, every last one of them sucks ass out loud. But here is a list, taken in order from beginner level (that's you) to CHICK MAGNET (that's me).

u/ewiethoff · 2 pointsr/learnprogramming

For language-specific "clean code" and design advice, it's hard to go wrong with an "Effective" book:

u/webitube · 2 pointsr/Unity3D
u/petrithor · 2 pointsr/simpleios

> (assume i have programming background in javascript/web front end.)

Um, are you sure you're ready to jump into iOS development?

Unless I'm reading this incorrectly, it doesn't seem like you have any C or OOP (like Java) programming experience. You'll definitely want to be at least comfortable with C-like syntax and message-passing, inheritance and objects, etc.

Actually, I'll have you answer that for yourself. Watch the first lecture in the iOS dev series from Stanford on iTunes. Around minute 11 the professor goes over what concepts you need to understand in order to be able to follow along with the course. If you don't understand all of the concepts listed, then you aren't ready yet.

Also, you've got to have a Mac. Have at least a Mac Mini (which are the cheapest Macs you can get refurb'd / used).

Here's what I would do assuming I am correct about your programming experience:

1. Learn C on the Mac.

It's for beginners, and will go over the basics of C. Objective-C, the programming language for iOS, is a strict superset of C, so they share a lot of syntax.

1.a The C Programming Language (recommended)

This one isn't for beginners, and is a bit stale, but is the de facto book for learning all of the intricacies of C. While it isn't absolutely necessary, the better you understand C (including pointers, memory, etc.), the easier time you'll have with iOS dev. I absolutely recommend going through it in its entirety, though this isn't necessary. It'll also be good to know C in the future if you plan to pursue software development.

2. Programming in Objective-C

This will teach you Objective-C, related OOP, and using XCode 4.

3. Beginning iPhone 4 Development

This will probably rehash some stuff related to Objective-C and XCode, but for the most part is a great introduction to iPhone development.

Use this book in tandem with the Stanford lecture series. Read the first few chapters, watch the first 2 lectures, do the homework exercises as if you were in the course along with the examples from the book, and just go from there. There might be some redundancy, but I think the combination of reading, listening, and doing will really help you understand the material.

If you need short tutorial refreshers at any point, Cocoa Dev Central is a great resource.

From there, you should be able to start making your own apps, and just use Google, StackOverflow, and http://developer.apple.com/ for all of your questions not previously answered or if you get stuck.

As you go through the process of learning all of these new programming concepts, try to develop ideas for what apps you want to develop. As you learn more, try to piece together how you would accomplish certain aspects of the ideas, and if you can, maybe even code the bits (like certain functions) you can.

There are no set milestones.. it's a gradual process of learning and getting better at programming and iOS development. Your goal should be to just create your own working app entirely based of your own ideas and work.

u/Waitwhatwtf · 2 pointsr/learnprogramming

A fair amount of iOS devs I know say that starting with a background in C can definitely help you in the long run, so I'd highly recommend K&R for that.

After you're done with that, you're definitely going to want to learn the Cocoa API along side Objective-C, and Hillegass does that quite nicely. Once you're familiar with that, this book will help you familiarize yourself with the language further.

Bonus round dice roll:

If you want to make a game, I recommend learning some opengl.

u/CarlZeiss · 2 pointsr/learnprogramming

I'm not aware of many free resources to learn Objective-C other than Apple's reference to Objective-C.

If you are new to programming I would highly recommend you check out Programming in Objective-C by Stephen Kochan. Another good introduction is Beginning Mac Programming by Tim Isted.



u/MattTheGr8 · 2 pointsr/apple

My stock suggestions:

  1. the Big Nerd Ranch book on iPhone/iOS programming (called iPhone in the 1st edition, iOS in the second... here's a link to the second edition: http://amzn.com/0321773772).

  2. the Developing Apps for iOS class on iTunes U (http://is.gd/CPqCvY)

  3. if you have never programmed in a C-like language before, I have heard that "Programming in Objective-C" is a good book, though I haven't read it myself (http://amzn.com/0321711394)
u/officialgel · 2 pointsr/learnpython

Buy a book and go through it. Programming Python is good and is in the middle of beginner and advanced - Covering MANY topics with excellent examples and detail.

https://www.amazon.com/Programming-Python-Powerful-Object-Oriented/dp/0596158106/ref=sr_1_3?ie=UTF8&qid=1541000040&sr=8-3&keywords=programming+python

u/Shadow703793 · 2 pointsr/arduino

It's pretty standard to use methods in programming. You actually do want to use methods for most programs unless it's a very simple program like just blinking a single LED. And yes, most if not all my programs use methods and similarly structured like the example code I linked to.

If you haven't done any coding/programming at all before Arduino programming, I recommend getting a beginner's C/C++ book. That will teach you the basics like functions, classes, etc.

edit:

If you're interested in a C++ book, I recommend: Sams Teach Yourself C++ in One Hour a Day and once you go through that, get C++ in a Nutshell as a refference book.

You can most certainly find free and very good C/C++ tutorials online, but I personally prefer having a hard copy esp. for reference.

u/Eindacor_DS · 2 pointsr/learnprogramming

I learned from this: http://www.amazon.com/Sams-Teach-Yourself-Hour-Edition/dp/0672335670#


Again, thanks for the input. This is the kind of stuff I need to know more about. You think I might benefit from trying another book? One that has more emphasis on "idiomatic C++"?

u/owner_of_chaturbate · 2 pointsr/IAmA

I used to go to bookstores to get the Sams Teach Yourself series of books.

Nowadays, I've been recommending people go to /r/learnprogramming/

u/amazedballer · 2 pointsr/scala

If you want to learn Scala, the best reference book is Odersky's: http://smile.amazon.com/dp/0981531644

Dean Wampler's book is very good and more accessible:

http://shop.oreilly.com/product/0636920033073.do

Finally, if you want the full on FP experience, then you probably want:

https://www.manning.com/books/functional-programming-in-scala

If you're looking for a functional programming library on top of Scala (which is not at all the same thing as Scala the language), there are a number of options available, but they are constantly shifting -- last I heard, cats and shapeless are being actively worked on.

u/mlin6436 · 2 pointsr/scala

'Programming in Scala' is a good book I'd recommend (http://www.amazon.co.uk/Programming-Scala-Martin-Odersky/dp/0981531644)

u/CheapShotBot · 2 pointsr/cpp

Want to learn to code? Want to learn C++? Struggling to follow your lecturer or books and tutorials written for experts?

Jumping into C++

u/PianoConcertoNo2 · 2 pointsr/learnprogramming

C++ Primer is good to have, but when I first started, it was way over my head. Same for the Stroustrup books (he's brilliant but not a good teacher..)

​

Jumping Into C++ by Alex Allain is the better book for beginners, I think. He explains things very clearly (especially pointers). I think the Allain book, followed by C++ Primer is a better path for beginners.

u/Liam2349 · 2 pointsr/csharp

The event handler is synchronous. The main thread cannot process both the event handler and the UI at the same time. This means the method is processed, and once that is finished, the main thread can resume processing the UI.

To solve your problem, you need to make the event handler "async void" and "await" Task.Delay, rather than ".Wait()"-ing it. When you "await", you will free up the thread to process other things, which in this case is the UI.

You don't have this problem with your other method because it's not running on the main thread. Since you "Task.Run()"-ed the method, it's running on the thread pool, and you are delegating units of work back to the main thread.

It seems like you're new to ideas of parallel and asynchronous processing, so I recommend you read some of Stephen Cleary's book: https://www.amazon.co.uk/Concurrency-C-Cookbook-Stephen-Cleary/dp/1449367569/ref=sr_1_1?ie=UTF8&qid=1523129261&sr=8-1&keywords=stephen+cleary

u/RankFoundry · 2 pointsr/javascript

If you check out the first chapter on Amazon, the author says that's exactly why and who he wrote it for. He explains how to get the same OO features you're used to out of JS but also how to utilize the unique aspects of JS: http://www.amazon.com/Principles-Object-Oriented-JavaScript-Nicholas-Zakas/dp/1593275404

Hope it helps. It helped me out quite a bit as I transitioned towards more front-end work

u/idboehman · 2 pointsr/devops

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

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

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

u/brandonweiss · 2 pointsr/ruby

I realize this is something you probably don't want to hear, but you've got a way larger problem than the problem you posted about. If you're unable to figure out why you're getting an undefined method error from a really simple bit of Ruby code, then the actual problem is that you don't understand Ruby well enough yet. You should stop using Rails and first learn how to use Ruby properly. There are some excellent Ruby-only books, like the pickaxe book. And there are some great online courses as well. Once you can write non-Rails Ruby programs with ease, then you can start using Rails, and you'll find it'll be a thousand times easier.

u/Myhorta · 2 pointsr/portugal

Eu prefiro um bom livro. Prefiro ter uma boa introdução de conceitos, complementada por exercícios. Se estivesse agora a começar a aprender começava por pyhton ou Ruby.

Para Ruby recomendo Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide (The Facets of Ruby).

Para Python nunca li nenhum, pelo que não sou o melhor para recomendar, mas uma pesquisa rápida revelou este: Python Programming for the Absolute Beginner, 3rd Edition que parece ser bem fixe.

Outra opção que acho bastante boa, é fazer um curso no Coursera, ou parecidos. Podes pegar num curso já concluído e avançar à velocidade que quiseres.

u/Scavenger53 · 1 pointr/learnprogramming

I think this is the book they use for software engineering planning https://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0131489062

I'm also still learning but it talks about iterative design of OOP and UML to layout the designs. I wonder what other books there are for this, but his question is similar to mine. OP may be a little further in learning than I am since I'm still working through data structures and algorithms of my C++ book.

u/simonsays · 1 pointr/java

its actually in the http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0131489062 which is used in many educational institutions. still see it used on my friends education and he just started in january. i had it back in 2005 or so

u/lampyridae · 1 pointr/javascript

I'd suggest to work on analyzing and designing before coding.

Analysis is about breaking down the problem (the use cases the software needs to fill).

Design is about building a solution out of components, assigning responsibilities to those components and identifying their relationships.

My rule of thumb is: if what I'm about to code is complex enough that I have no idea how I'll piece it together, I'm not ready to code yet.

A whiteboard or a sketch pad and basic diagram drawing skills are really useful. The point isn't to draw a blue print, it's to sketch out ideas about how to articulate your components and to gain insight on the hard parts through visualization.

The challenge is structural (how many classes? whose method is this? composition or inheritance?) and dynamic (A calls C, which calls B, which asynchronously calls X… is this optimal?).

I've really enjoyed Larman's book on Object-Oriented Analysis and Design. The title sounds much more narrow than the actual subject matter.

u/MPIS · 1 pointr/compsci

Some great text resources on the subject:

u/meteorfury · 1 pointr/ObjectiveC

C How to Program by Deitel is an extremely awesome book and you can knock out two birds with one stone by learning how to program in C. After that I would suggest Programming in Objective-C by Stephen Kochan from there I would then go into the Nerd Ranch Books and even take the Stanford iOS Courses which are free through iTunes University. You need to build a solid foundation of a programming mentality. It will take a little time but, then again, rome wasn't builit in a day. Good luck!

u/dmazzoni · 1 pointr/learnprogramming

Well, that sounds like a pretty lame class, but if you want to learn C, you're in luck - it's one of the most widely-used programming languages in the world.

The absolute best way to learn C is from a book. Not a free online tutorial, an actual book. Get these two:

https://www.amazon.com/C-How-Program-Paul-Deitel/dp/013299044X

u/skepticalmonkey · 1 pointr/SDSU

Google is your friend.

https://www.google.com/search?q=9780132990448&sugexp=chrome,mod=12&sourceid=chrome&ie=UTF-8

Also here is a review I stumbled upon:

"The authors must believe that the date is due for a new edition, without actually having anything new content-wise to show for it, and the result is again, another edition that deals with the same problems that have plagued the earlier editions. You should read the reviews of the previous editions of this book and you'll get more information that might save you from wasting your time and money. Not much has changed in the new editions, other than the abundant use of colors in vain attempts to revitalize the overall poor quality of the content, but most importantly, there are much better alternatives, if you want to spend on a book to learn C and enjoy yourself while you're at it. I highly recommend the very best one out of my stack of C books: C Programming A modern approach by K. N. King.

It's obvious that new editions bring in more money to the authors and it keeps their books proudly filed under "new" on the store bookshelves, but without enough valid material to make it a worthy investment for students and programming enthusiasts, it is very difficult to recommend this book. I regret buying a copy of the latest edition and i compared it to an older 4th edition from a friend. The content is about the same, retaining its poor structure but some paragraphs of text were extended to meaningless conclusions, which are completely lost into the pages of text that are used to describe simple examples. Really, there was no need for the new edition. It's just not worth it, at least, from the point of view of the buyer/reader."

Here is the 5th edition (only $5!!): http://www.amazon.com/gp/offer-listing/0132404168/ref=sr_1_3_up_1_main_olp?s=books&ie=UTF8&qid=1345193151&sr=1-3&condition=used

Edit: Cheapest-
http://www.amazon.com/gp/offer-listing/013299044X/?tag=wwwcampusboocom-20&condition=used

Second Cheapest: http://www.alibris.com/booksearch.detail?invid=11365280428&cart=1&cm_sp=cart-_-listing-_-title

u/b_poore · 1 pointr/OSUOnlineCS

It's been a while since I've taken 161, but when I did, this was the book: https://www.amazon.com/Starting-Out-Early-Objects-8th/dp/013336092X

Back then 161 and 165 were using the same book. We made it through most of the book in 161 and 162 and my understanding is that 165 is the same story, just twice as fast, so looking at the book might help you decide as well!

u/passthejoe · 1 pointr/computerscience

If your school teaches in Java, you might want to do the http://mooc.fi/english.html. That gets you learning Java and using an IDE (NetBeans), and it's a good way to ease you in. Oracle's documentation is really good, too: https://docs.oracle.com/javase/tutorial/tutorialLearningPaths.html.

If they do C++, that's another story. My community college teaches C++, and I can tell you that the first course was VERY doable for somebody who has a little programming experience -- even very little. I'm at a loss for good online tutorials, but the book my class used -- https://www.amazon.com/Starting-Out-Early-Objects-8th/dp/013336092X -- was very good. I'm considering getting the author's Java book: https://www.amazon.com/Starting-Out-Java-Early-Objects/dp/0133776743/.

The only problem is that "real" textbooks are very expensive. There are some great online resources. One I am using for Java is http://greenteapress.com/wp/think-java. David Eck's free book -- http://math.hws.edu/javanotes/ -- is also very good.

u/maze-le · 1 pointr/softwaredevelopment

Try to make a sketch: What are the dependencies of each function / class / module. How are they interconnected, what is the scope of each dependency (can they be bundled into a module / class on its own?). I usually make such sketches on paper -- old school.

If you have the sketch, you can start unbundling it by trying to minimize the dependencies of each part to one another. Once that is done, you can either refactor or outright reimplement the code. Depending on how big the mess is, a complete reimplementation can be simpler sometimes (albeit more time consuming).

There are also very good books on that issue:

u/mlester · 1 pointr/programming
u/paulfdietz · 1 pointr/lisp

This cover is more greenish, but has some dark blue to it.

https://www.amazon.com/Object-Oriented-Programming-COMMON-LISP-Programmers/dp/0201175894

u/KingPickle · 1 pointr/csharp

I'd recommend the book Effective C#.

It's a lot like the Effective C++ books. It gets into the potential pitfalls and nuances of using the language. Since C# is similar enough to C++, learning about its quirks should get you most of the way there.

u/Hollyw0od · 1 pointr/cscareerquestions
u/enkafan · 1 pointr/dotnet

the effective c# book probably has what you are looking for

u/ChrisF79 · 1 pointr/learnprogramming

How much knowledge of Objective C do you already have? If you already have a good working knowledge of it, you should look into the Big Nerd Ranch books (Amazon link). They're pretty awesome because they show you, in steps, how do write simple programs. If you don't already know Objective C, read Kochan's Programming in Objective C as that starts you at ground zero.

Another option is to watch the Stanford University courses on Objective C. I believe there are 3 semesters online (same class, different teachers) and those are pretty great as well.

u/chalks777 · 1 pointr/Purdue

please don't use url shorteners, it tends to get caught in the spam filter. For anyone wondering, his link goes here.

u/Musaab · 1 pointr/learnpython

May I suggest Mark Lutz Learning Python and Programming Python. (in that order. You'll get where you need to be and you'll be happy getting there.

u/Eviltape · 1 pointr/learnpython

It seems that the O'Reilly book Programming Python literally has a Hello World C extension example in Chapter 22, as well as a more traditional book-ish walk through what using C in Python actually entails.

u/autisticpig · 1 pointr/Python

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

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

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

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

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

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

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

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

  • the pragmatic programmer
  • design patterns
  • clean code

u/CodeShaman · 1 pointr/java

Someone made a comment about this yesterday: here

The article is extremely informative, enough so that I immediately ordered a copy of Java Generics and Collections.

u/tzjmetron · 1 pointr/javahelp

To get a better answer, you probably need to provide a bit more of your background. For instance, if you come from a C background vs C++ background vs beginner to programming, the level of explanation will vary accordingly!

Also, if you want to know all about Generics as implemented in Java, the best resource I can recommend is this - https://www.amazon.com/Java-Generics-Collections-Development-Process/dp/0596527756/

Philip Wadler (of Haskell and Monads fame) is one of the authors of Generics in Java. The book is rather old, but it covers almost everything about Java Generics and also how the Collections framework uses this feature. Superlative book, but it moves quickly from basics to advanced stuff, so caveat emptor.

u/RagingOrangutan · 1 pointr/java

Oi, caution against taking the advice in that article too seriously; the article is barely readable and has at least a few mistakes. For example, this syntax is incorrect:

public V put(K key, V value) {
return cache.put(key, value);
}
You need to let the compiler know that K and V are generic type placeholders, so the proper syntax is

public <K,V> V put(K key, V value) {
return cache.put(key, value);
}
Java Generics is a great a resource for those trying to get familiar with Java Generics and Collections.

u/Astral_1357924680 · 1 pointr/learnprogramming

I use this

u/scramblejam · 1 pointr/learnjava

Doing a deep dive into a C++ book this summer. Looking foward to asking questions in the discord.

This is the book if anyone is curious.

Sams Teach Yourself C++ in One Hour a Day (7th Edition) https://www.amazon.com/dp/0672335670/ref=cm_sw_r_cp_apa_i_XHy3Cb9MTK0MN

Or if you've read it let me know what you think!

u/ebookit · 1 pointr/learnprogramming

Find a mentor, you need someone with experience to debug your programs and teach you how to write better code.

Learn from your mistakes, try not to make the same mistake more than once.

Remember to keep track of the scope of your variables, and remember to use a naming convention. Usually like adding a "g" to the start of global variables for example, "int" added to the front of integers, etc.

Michael D. Crawford is a friend of mine and here are some of his tips and tricks:
http://www.goingware.com/tips/

He is moving his website here: http://www.dulcineatech.com

He has a Software Problem Web Site here: http://www.softwareproblem.net/ where he talks about the ethics of a software engineer and the seven deadly sins of software engineering, programming, and business.

I know he seems a little crazy or eccentric, but it is important to follow a code of ethics when working as a programmer or software engineer. You need to learn more than just the programming language and technical skills.

Books to read:

C++ Primer (5th Edition)

http://www.amazon.com/gp/product/0321714113/ref=as_li_ss_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=0321714113

Beginning Programming with C++ For Dummies (For Dummies (Computers))

http://www.amazon.com/gp/product/0470617977/ref=as_li_ss_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=0470617977

Safe C++: How to avoid common mistakes

http://www.amazon.com/gp/product/1449320937/ref=as_li_ss_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=1449320937

Sams Teach Yourself C++ in One Hour a Day

http://www.amazon.com/gp/product/0672335670/ref=as_li_ss_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=0672335670

u/SkyMarshal · 1 pointr/learnprogramming

Check out Program Development in Java: Abstraction, Specification, and Object-Oriented Design. One of the best intro to OO books, which just happens to use Java to demonstrate the concepts. Probably the easiest way to learn Scala's OO roots.

After that, also check out Programming in Scala by Odersky et al. Very well written and explanatory, a good Scala-specific followup to Program Development.

Good article on books & resources for learning Scala from scala-lang.org: http://www.scala-lang.org/node/1305

u/dysfunctionaltrav · 1 pointr/cscareerquestions

Absolutely, it's a very clean and easy to use language. It is object oriented and functional which allows someone who has never done functional programming to ease themselves in. Before I started learning scala I only knew python so it was nice that brackets and semicolons weren't really necessary. Higher-order functions are fantastic. /u/bananaboatshoes brings up a good point that scala builds on the jvm so it's usability is the same as java. It also allows you to use java libraries in scala pretty easily. Once you have learned scala going back and picking up java is fairly easy if you find it necessary.

 

I'll see if I can't conjure up a few resources.

Scala website

The book I read

A good book on functional programming

 

I hope this all is formatted correctly I'm fairly new to commenting on reddit.

*Edited my formatting

u/beeb2010 · 1 pointr/learnprogramming

I cannot comment on the Sam's book as I haven't read it - however, I thought I would recommend 'Jumping into C++'. It's a great book - I don't know where you live so I'll post the amazon.com link http://www.amazon.com/Jumping-into-C-Alex-Allain/dp/0988927802

u/TheMartyr5 · 1 pointr/learnprogramming

Then learn c++ as it's the most commonly used language in the industry. Also learn how game engines and games work though. Go on amazon pick up a few books on game development, then try using a few game engines like unity3d and unreal engine. create stupid basic games just so you have a feel of how the engine works, then Get the book Game Engine Architectures 2nd edition by Jason Gregory, it gives the ultimate description on how engines work at the low level and high level. Give your self a few months to a few years to fully understand games, game engines, programming and everything I just said as it takes a while to master these subjects. I started learning c++ two years ago and now I'm starting to write my first real software ( A 3D Rendering Engine). But if you stay focused and it's interesting to you time won't matter. These are my steps:

  1. Take a few months to learn C++, these are some good books (in the order they should be read) http://www.amazon.com/Jumping-into-C-Alex-Allain/dp/0988927802/ref=sr_1_2?ie=UTF8&qid=1420731768&sr=8-2&keywords=c%2B%2B and http://www.amazon.com/C-Programming-Language-4th/dp/0321563840/ref=sr_1_1?ie=UTF8&qid=1420731824&sr=8-1&keywords=c%2B%2B

  2. Learn how 2d games and engines work (plenty of source online)
  3. Learn how 3d game engines work (unity3d, unreal engine)
u/Gabisonfire · 1 pointr/learnprogramming

Alright, much thanks for the advice. How about this one: Jumping into C++

u/zabi15 · 1 pointr/learnprogramming

try cookbooks https://www.amazon.ca/Concurrency-Cookbook-Asynchronous-Multithreaded-Programming/dp/1449367569/ref=asc_df_1449367569/?tag=googleshopc0c-20&linkCode=df0&hvadid=292950359971&hvpos=1o1&hvnetw=g&hvrand=2094012217590572301&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9000633&hvtargid=pla-330197456780&psc=1

​

​

you can probably find free pdfs or something.

never tried it for c# but i used cookbooks for sql and c++

the way they work is they give you a bit of theory and then give good exercises to do.

i find them really good.

other ways would be to follow a lesson plan on c# and then find lots of exercises online about that chapter.

example:

you just studied the chapter on if statements, had 1 exercise and then it continued to next chapter. what you can do is google for if statements exercise for c#, there are load of em. and if you need more just look for exercises in any language and do them in c#. anything beginner level should be possible to do in most languages.

anyway good luck man c# is fun,

u/gilmi · 1 pointr/AskProgramming

I'm going to give a completely different idea that might be a hit or a miss. But Rust is a fairly new programming language that should be interesting to both C++ and Python programmers (C++ programmers that want more python in their language, and Python programmers that wants more C++ in their language).

I have not read this book, but Programming Rust, while new, got quite a few positive reviews. This might be the book your husband didn't even know he wants!

u/timurcat99 · 1 pointr/angularjs

Hmm,
I read this book 3 times already and it helped me landing a decent job recently. You will love it.

https://www.amazon.com/Principles-Object-Oriented-JavaScript-Nicholas-Zakas/dp/1593275404

I am also subscribed to frontendmasters.com. Not as good though. Please share your links also.

Thanks

u/sibilith · 1 pointr/webdev

I recommend you take on some kind of project that interests you and will expand your skills/knowledge. I made a site blocker chrome extension for one of my first projects and it introduced me to chrome’s api. Or you could try making a portfolio site/blog for yourself to get the hang of different design practice. I used a static site generator for mine. The bottom line is to choose something that interests you and is outside your comfort zone.

I recommend perusing The principles of object oriented javascript and Understanding ECMAScript 6 for a good reference for JavaScript practices and for a good understanding of the language. I also like O’Reilly publishers JavaScript Cookbook and Refactoring JavaScript.

u/AjaxSolutions · 1 pointr/javascript

To learn JavaScript I'd recommend "The Principles of Object-Oriented JavaScript".

https://www.amazon.com/Principles-Object-Oriented-JavaScript-Nicholas-Zakas/dp/1593275404/ref=la_B001IGUTOC_1_2?s=books&ie=UTF8&qid=1497101229&sr=1-2

Zakas is a good writer and he knows JavaScript.

u/ginzer · 1 pointr/javascript

I come from the same background. Lot's of good recommendations here. I read this book: http://www.amazon.com/Principles-Object-Oriented-JavaScript-Nicholas-Zakas/dp/1593275404, watched a video series version of Crockford's "Good Parts", and went through this Udacity course: https://www.udacity.com/course/ud015. Hope that helps. Good luck!

u/qwertylurker · 1 pointr/learnprogramming

Object-Oriented JavaScript is my personal favorite for basic JavaScript (i.e. traditional, non-jQuery js).

u/nura2011 · 1 pointr/cscareerquestions

> Which of the three will give the best chance to telecommute?

From my experience, as a general rule, I have found that anything related to web development is especially suited for telecommuting, so your choice would be Ruby on Rails. You can telecommute with roles like Sharepoint developers, DBA, sysadmin, but my impression is that most of these roles are in traditional big companies and they may not always be open to 100% telecommuting.

But be aware that by choosing a field that doesn't require your presence on-site, you're competing with developers from developing countries who will be able to outbid you.

> Which of the three is the least challenging to be learned on your own (and if you have any good learning resources you can recommend, I'll take them all, thanks)?

I think all are equally challenging if your aim is to be really good in that field and difficulty is a subjective notion anyway.

As for resources: when I was dabbling in Ruby on Rails a few years ago, I found this tutorial very useful: Ruby on Rails Tutorial

You also need a good understanding of the Ruby programming language. I recommend Programming Ruby, though I liked The Ruby Programming Language because it was a lot more concise (if dated). You can ask /r/ruby for more suggestions.

u/nixonone · 0 pointsr/learnprogramming
u/robby_w_g · 0 pointsr/programming

Compilers at Marquette? I remember the worst part was the awful Tiger textbook

u/logic_programmer · 0 pointsr/learnprogramming

Yeah, it costs a fair amount to get a half decent lab together but once you do!

Instead of electronics, what about getting a book that takes you through a software project and work your way through that. If you wanted to build a compiler for a language then there is plenty of choice, e.g.:
http://www.amazon.com/Modern-Compiler-Implementation-Andrew-Appel/dp/052182060X/ref=sr_1_1?ie=UTF8&qid=1427095404&sr=8-1&keywords=compiler+design+java

http://www.amazon.com/Modern-Compiler-Implementation-Andrew-Appel/dp/0521607655/ref=la_B000AP5X0W_1_5?s=books&ie=UTF8&qid=1427095531&sr=1-5

http://www.amazon.com/Modern-Compiler-Implementation-Andrew-Appel/dp/0521607647/ref=la_B000AP5X0W_1_1?s=books&ie=UTF8&qid=1427095531&sr=1-1


There's other books for other types of project.

u/DaveRune · 0 pointsr/gamedev

Excellent thank you, it looks like I'm along the right lines then.

I'm currently reading through SAMS C++ which covers C++11 and the UI is among the next tasks in my mobile game and I can't wait to get implementing it.

u/ThingsOfYourMind · 0 pointsr/learnprogramming

(http://www.amazon.com/Sams-Teach-Yourself-One-Hour/dp/0672335670/ref=sr_1_1?ie=UTF8&qid=1452460537&sr=8-1&keywords=Sams+Teach+yourself+c%2B%2B)[Sams Teach Yourself C++ in one hour a day]

This book, dont read this book, its filled with errors. It uses C codes in it's C++ examples, and doesn't include the necessary header files. I was wondering why my code wasn't compiling. Its still good, but you have to have enough knowledge to differentiate between C and C++.

u/piglet24 · 0 pointsr/csharp

Always use tasks. In Stephen Cleary's book he even writes "As soon as you type new Thread(), it’s over; your project already has legacy code."

u/zach_will · 0 pointsr/javascript

MDN Doc Center (or MDC) is indispensable.

If you're looking for a solid book to learn it quick, Stoyan's Object-Oriented JavaScript or Nicholas Zakas' Professional JavaScript are the easiest to read and hit the ground running (as opposed to Crockford's book).

I actually learned quite a bit from Crockford's older talks on YUI Theater — scroll around halfway down the page for his Advanced Javascript and The Javascript Programming Language talks.

Also, word of advice, JavaScript itself is really easy to pick up — especially if you've programmed before. The thing that is going to cause you the most trouble is interacting with the DOM (and browser quirks, etc). There are multiple libraries to help you out, and, while everyone has their own preference of which to learn, jQuery is probably your best bet. I'm not saying it's better than the others, but you will need to know it if you apply to front-end developer jobs.

Lastly, if you are willing to pay money, I really feel you can't go wrong with Stoyan's book.

u/Gp5Aloy · -3 pointsr/learnprogramming

i've been using early objects with C++ for my last 4 c++ classes the books really good
http://www.amazon.com/Starting-Out-Early-Objects-Edition/dp/013336092X