(Part 3) Best products from r/learnprogramming

We found 219 comments on r/learnprogramming discussing the most recommended products. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 1,804 products and ranked them based on the amount of positive reactions they received. Here are the products ranked 41-60. You can also go back to the previous section.

Top comments mentioning products on r/learnprogramming:

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/sarpunk · 3 pointsr/learnprogramming
  • I second the other comments about practice & sticking with projects. Perfectionism can be a great thing, but if it keeps you from finishing a project, let it go. The first iterations of your projects don't have to be perfect - just getting through them will help you grow.

  • Procrastinating on homework assignments will also tank your grade (been there, done that), even if the material seems easy - some programming assignments just take loads of time.

  • It sounds like you're still in school, so you'll probably be exposed to lots of different languages and paradigms, and that's a good thing. If you're going to insist on perfection in personal projects, though, it might be easiest to focus on one area, like halfercode suggested.

  • Finally, for reading material: It sounds like you don't need any basic intros, so look for advanced tutorials to new languages you want to learn, or just read the language documentation. This is a pretty good competency matrix to rate yourself against - if something looks unfamiliar, browse through the wiki page. Other great books: Computer Systems: A Programmer's Perspective - doesn't assume a ton of prior knowledge, but gets to a fair amount of depth pretty quickly. There are also really cool systems programming labs. Matt Might's list of everything a CS major should know is really comprehensive, with lots of reading material referenced. If I were you, I would focus specifically on the Data Structures & Algorithms and Theory sections, supplementing with practical projects.

  • As for projects: Start small, no matter the final size of the project. Focus on getting out a minimal example of what you want to do before you worry about what the UI looks like or perfect functioning.

    tl:dr Practice & perserverence are the main points. No one is really any good at programming until they've got a few years of churning out code, so don't get discouraged. Finally: don't let the breadth of the computer science/software world overwhelm you. Focus on small pieces, and in a few years you'll have learned more than you would have expected.
u/Handsdowndopestdope · 3 pointsr/learnprogramming

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

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

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

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

u/Thought_Ninja · 5 pointsr/learnprogramming

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

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

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

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

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

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

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

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

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

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

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

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

u/DeliveryNinja · 2 pointsr/learnprogramming

Read these books to get to grips with the latest techniques and ways of working. As an employer I'd be extremely impressed if you'd read these books. They will give you a big head start when trying to move into the professional work environment. Most of them will apply to any programming language but they mainly use Java as the example language but it's very similar to C#. It's books like these that are the difference between a beginner and an expert, but don't forget when you start coding 9-5 with good developers you will very quickly pick things up. We were all in your position at one point, if you get these read it'll all be worth it in the end!

Coding

C# in depth - I've not read this one since I do Java but I've just had a quick glance. This should be pretty useful and it's a respected publisher. I think you should start with this one.

Clean Code - Great book which explains how to write clean concise code, this 1,000,000x. It doesn't matter what language you are using it should apply where ever you write code.

Cleaner Coder - Another Robert Martin book, this one is easy to read and quite short, it's all about conducting yourself in a professional manner when you are coding. Estimating time, working with co-workers, etc.. Another good read.

Growing Object-Oriented Software - This book is about writing code using test driven development. It explains the ideas and methodologies and then has a large example of a project that you build with TDD. I just read this recently and it is really good.

Head first design patterns - This book goes through essential design patterns when coding with an object orientated language. Another essential read. Very easy to read, lots of diagrams so no excuses to not read it!

Work Methodologys

Kanban

Succeeding with Agile


p.s

Start building stuff, get an account on linked in and state the languages you are working with. This will help as well because having something to show an employer is priceless.

u/insandrium_heart · 1 pointr/learnprogramming

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

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

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

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

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

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

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

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

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

u/TonySu · 1 pointr/learnprogramming

Probably start with Artificial Intelligence: a modern approach. This is the state of the art AI as of 2009, of course in AI years that's ancient history but it's background you must know if you're serious about AI.

Following on from that you have the very popular statistical techniques, you can read about these in Pattern Recognition and Machine Learning. These are a wide range of statistical models and algorithms that allow machines to infer, classify and predict. Another very important concept is Chapter 14 on combining models. IBM's Watson for example uses a complex network of "simple" models who combine their answers to form the final responses.

From all the techniques in the previous book, neural networks from Chapter 5 have become the most popular and powerful. These are covered in Deep Learning, and are currently the cutting edge of machine learning. They are extremely general models that seem to be highly successful at a range of tasks. In particular their popularity comes from their amazing accuracy in image recognition, which really challenged past algorithms.

Ultimately nothing you can learn from anyone is sure to bring you close to sci-fi AI. The techniques to produce such an AI eludes even the foremost experts. You may also become disillusioned with your dream as you realise just how mechanical and constrained AI is. I personally think we'd have better luck genetically engineering intelligence in a random animal/insect than creating true intelligence in silicon and circuits.

u/YuleTideCamel · 3 pointsr/learnprogramming

Follow interesting people on twitter, ready up on development subreddits to get a grasp. These are useful for keeping a pulse on what's new.

As for learning, go to local user groups and technology meetups. Most cities have them and these events are a cheap and good way to learn from you peers.

Go to local code camps in your area (again these are becoming more popular). It's worth taking a weekend to go and learn new stuff. Also keep an eye out for one off developer events. In my area we always have something going on.

See if your company will pay for you to go to paid conferences.

Lastly get a Pluralsight subscription, it's worth its weight in gold and will teach you a ton of technology. They're constantly adding new stuff by industry experts.

Don't make getting a leadership position your goal, instead focus on becoming a good developer. Don't just learn new buzzwords or technologies, but try to understand how to write good clean code. Learn about unit and refactoring and in time you will move up the chain and you'll see new job offers all the time.

A few books you might want to read:

  • Clean Code a great book on how to write better code, maintainable code.

  • The Clean Coder - Not code related, but how to be a professional programmer

  • Domain Driven Design

  • Head First Design Patterns

    There are more obviously, but these are a few good generic books. If you are going into a specific area (like front end dev or javascript) there are a ton of specialized books on those topics. Read the latest ones there.

    All in all, technology will change, but having a good programming foundation and understanding what is going on (not just using a framework) will allow you to easily pick up new skills as they arise.

    I've been a professional developer close to 15 years and I'm always learning something new and that's just how I like it :)

    Edit: I forgot to add, work on personal projects , open source projects and practice practice practice. I do a lot of code katas and koans, like on a regular basis. Even simple intro katas often help.
u/[deleted] · 1 pointr/learnprogramming

With Eclipse there is a plugin for C/C++ development, same with netbeans, you also have visual studio, dev bloodshed, and a variety of text editors to choose from. I personally just use a text editor and compile in the command line which is really easy, but if you don't feel comfortable with than just try out some IDE's and see which one you like best. Eclipse isn't your only option. Try googling C++ IDE's and you should be able to work something out for yourself. In terms of C++ with eclipse, I haven't used it in a while, but you should be able to download the necessary plugin/extension directly from your IDE. Again, quick google search should sort this out for you.

In regards to game development, C++ is an industry standard cause of DirectX, but don't limit yourself to one language just because it is a standard. Plenty of awesome games have been written in a bunch of different languages so just try something out and see what works best for you. There is a bunch of great resources out there for beginners who want to learn programming AND really basic game development at the same time. This one is free: http://inventwithpython.com/ Also make use of your interactive tutorials out there like on codecademy.com

This is the book I started with and I thought it was great: http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ref=sr_1_1?s=books&ie=UTF8&qid=1346873688&sr=1-1&keywords=python

Edit: Did I seriously just get downvoted for answering someone's question? really /r/learnprogramming I tell someone to check the sidebar in one thread and get downvoted, so then I answer a question instead and I get downvoted. At least be consistent.

u/caindela · 2 pointsr/learnprogramming

I'd take a more tools- and methodology-driven approach. The programming language itself is secondary by a long shot. It's hard to be convinced of this when you're starting (hindsight is 20/20), but the fact is you don't need to spend hundreds of hours "learning a language." To a newbie, learning to program and learning a language is almost synonymous, but the latter is a far smaller subset of the former.

Here's how I would guide the younger me:

  1. I would start by learning some of a language. The Pareto Principle (i.e., the 80/20 rule) applies here. In many languages you can spend a lifetime really exploring the details, but you'll largely forget these details through disuse. Why waste your time with that? It shouldn't take much more than a day to learn what you need to move past this step.

  2. Learn very high level concepts of programming methodology. Engineering is about making complex systems easier to manage through things like encapsulation, information hiding, and abstraction layers. This is key to making software and is a lot more important than language-specific details.

  3. Learn your tools inside and out. Learning a text editor is actually a great way to learn how to program. After all, a great text editor like vim is fully programmable. Things like snippets allow you to think about programming on a higher level beyond "do I need a bracket here?" etc. Another important tool is a debugger. There are some folks that advise against them, but it's incredible how much you'll learn by watching the way your code transforms your input. The third vital tool I'd suggest is using version control. Make a github account and use it in conjunction with your vim configuration files so that you may continually refine your environment (and never lose it, thanks to git).

  4. Learn to use test frameworks, and then be adamant about writing tons of tests (preferably before writing any code).

    I think this is a great foundation. You don't need a lot of books, but I think Code Complete is a great one stop shop. I would probably also add something like Growing Object-Oriented Software because I feel Code Complete is a bit lacking when it comes to the actual practice of testing (though it provides a great overview of it).
u/solid7 · 3 pointsr/learnprogramming

With regard to debugging, I would say the major hurdle for me was learning how to deeply inspect and interpret the contents in memory. It's pretty easy to step through a program and see what it's currently doing, but interpreting why it did something it wasn't supposed to do is more challenging. For me, this was a matter of repetitive "learn by doing".

To aid with this, I used gdb as a tool to reverse engineer and write a couple of keygen and serial-cracks for various freemium things randomly downloaded from the internet. This was purely for fun and not connected to my job past learning how to really use gdb. It's not as hard as you might think, though some familiarity with assembly helps. Despite looking like an early 90s bullshit interpretation of computers, this is actually a really great book if you're interested.

As far as testing is concerned, it's not something I had really encountered until my first professional programming job. Testing certainly wasn't taught to me in college. The basics of testing are pretty straight forward. What isn't so straight forward is the skill of writing testable code. It's actually pretty easy to code something up that seems to work but is utterly untestable for a variety of reasons. I think this is the major hurdle when it comes to testing, and a skill I work very hard to teach my junior peers. It just so happens to the case that testable code also tends to be decoupled maintainable code - which is beneficial for obvious reasons.

u/Yogi_DMT · 2 pointsr/learnprogramming

I've found that the official oracle reference was very well written and helped me understand what's really going on with OOP, rather than sugarcoating things and holding off on establishing the more general concepts until later. The author explains things the right way from the get go, it's more of a bottom-up approach than a top-down approach like some of the other textbooks i've gone through.

I wouldn't necessarily say it's easier than some of the other resources but it is definitely better IMO. It's concise, so there won't be tons of examples or exercises and it won't take pages trying to reexplain the same concept in 10 different ways, but the information they give you is accurate and the examples they give you serve their purpose well.

The book is completely self contained and if you really want to learn Java i'd definitely say this is your best bet. Best of luck.

http://www.amazon.com/Java-The-Complete-Reference-Series/dp/0071808558/ref=dp_ob_title_bk

u/beyond-antares · 1 pointr/learnprogramming

This is a popular topic but I don't often see a comprehensive answer. I'm by no means an expert and currently learning myself.

There's two key stepping stones before jumping into AI, that being learning Python and data science. Python has wide support and a host of libraries reflecting the latest research on AI development.

There is also R, Octave and Java depending on the libraries you're looking to use, but they aren't nearly as popular as python. Note that if you want to embed your AI scripts into web apps or apps, then you'll need to learn javascript and java respectively.

The best resources for Python are

  1. Automate the Boring stuff - Al Sweigert

  2. Hitch hikers guide to Python

  3. Dive into python

    Great resources can be found here:

    The next step is to get a brief grasp of data science. You can learn these from:

  4. www.datacamp.com for Python and R

  5. Coursera course on data science

  6. Udemy courses in Python and R (Note these would most likely be paid courses so wait for the monthly discounts to kick in to purchase them for $10-$15)

    I wouldn't recommend codeacadmy since it's dated written in Python v2.x whereas Python 3.6x is more widely used

    Then I would consider AI Specific courses found online. Theres two routes again here, there's the heavily academic route that delves into the theory and mathematics then there;s the practical route. Depends on the speed and pace you want to learn at because it's a massive field.

    Theoretical

  7. Udacity - Introduction to Artificial Intelligence (standford course)

  8. Coursera - Andrew Ng's Deep Learning specialization course. Note the course uses octave which is similar to Matlab style programming. The courses when accessed individually are for free or you can pay for a certification.

  9. Various lectures on youtube for MIT and Stanford's Artificial Intelligence courses.

  10. A really good text book to check out is Artificial Intelligence - A modern Approach. AI was traditionally scripted in Lisp or prolog. This has been coverted into Python over here

    Practical:

  11. Krill Ermenko - AI, Machine Learning and DEEP Learning from A-Z

  12. Fast.ai Dives into keras a top level library
u/samort7 · 3 pointsr/learnprogramming

I saw someone posting Head First Java and you might want to take a look at this thread and this thread in regards to that book. Here's my opinion from those threads:

Headfirst Java was published in 2005. It's 13 years old. If you're looking to learn Java, there are plenty of excellent resources that also cover the latest features of the language:

u/guifroes · 2 pointsr/learnprogramming

Interesting!

Looks to me that you can "feel" what good code looks like but you're not able to rationalise it enough for you to write it on your own.

Couple of suggestions:

When you see elegant code, ask yourself: why is it elegant? Is it because is simple? Easy to understand? Try to recognise the desired attributes so you can try to reproduce on your code.

Try to write really short classes/methods that have only one responsibility. For more about this, search for Single Responsibility Principle.

How familiar are you with unit testing and TDD? It should help you a lot to write better designed code.

Some other resources:

u/llFLAWLESSll · 3 pointsr/learnprogramming

Since you know Java I would suggest that you a read one of the best programming books ever written: [K&R The C Programming language] (http://www.amazon.com/The-Programming-Language-Brian-Kernighan/dp/0131103628/), this book was written by the people who made the C language and it's one of the best books ever written. It is a must read for every C programmer. [Computer Systems: A Programmer's Perspective (3rd Edition)] (http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/013409266X/) is a great book to learn about computer systems. But I would recommend [Operating Systems Design and Implementation (3rd Edition)] (http://www.amazon.com/Operating-Systems-Design-Implementation-Edition/dp/0131429388) because it has some minix source code which will go really well with learning C.

Best of luck buddy :)

u/dmazzoni · 2 pointsr/learnprogramming

Artificial neural networks are great, but keep in mind that they're just a means to an end. The best way to learn them is to go through a good textbook or online course where you'll try them out on good examples that have been designed specifically to be good for beginners.

To a professional, you don't start with the tool and search for a problem - you start with a problem and figure out the best tool. Sometimes that tool is neural networks, but probably 99% of the time it's not. Even when the right tool is "machine learning", there are a lot of machine learning techniques other than ANNs.

As a beginner, the best thing you can do is start by learning about machine learning in general. You can't properly use ANNs if you don't understand the principles of machine learning in general, which is what the book or course I linked above will give you.

​

u/okiyama · 7 pointsr/learnprogramming

Yeah, it's actually really interesting! When I say ARM, MIPS and x86 I'm talking about the processor architecture. Basically, your desktop has a processor that speaks x86 whereas your smart phone only knows ARM. MIPS is primarily for low power things like routers. Learning an assembly language means learning a lot about processors, which is also a lot of fun.

If you do want to learn about all of that, this book is great. Well written and pretty fun to read

http://www.amazon.com/Digital-Design-Computer-Architecture-Edition/dp/0123944244

u/Osempu · 1 pointr/learnprogramming

Hi i personally loved Web Design with HTML, CSS, JavaScript and jQuery Set. Have really good examples and easily explained concepts which i think is cornerstone for programming itself. Also don't get discouraged if you don't remember things, is totally normal that you have to go and look for definitions, code snippets, etc . The more you code the more you learn, as easy as that, remember that and your life will be a lot easier. Happy coding!!!

Edit: Also practice, practice and practice more. Here's a link to my favorite coding challenges page.

u/Mydrax · 118 pointsr/learnprogramming

Well, this is usually because C++ is not really a beginner friendly language. You need to understand the architecture/fundamentals of a computer system at times to understand certain concepts and are often difficult to understand ex: pointers, dynamic memory allocation etc. and with C++ you never finish learning!

Yes, you are very correct about understanding basics before doing actual game-based programming, C++ Primer is pretty old but it's definitely a golden book alongside it though for someone like you I will suggest some of the books I read a couple years back and some that I believe are better for beginners:

Accelerated C++: Practical Programming by Example

Programming: Principles and Practice Using C++

The C++ Programming Language, 4th Edition- Very big book, read this after you've read the rest.

And a book that I've heard is pretty good for game development with c++: https://www.amazon.com/Mastering-Game-Development-professional-realistic/dp/1788629221

u/khedoros · 3 pointsr/learnprogramming

Jumping into C++ as a first programming language, especially with the kind of impatience that you seem to feel. I might characterize a few programming languages in this way (It's an old joke to talk about how to shoot yourself in the foot in various languages):

C will allow you to aim the gun at your foot and pull the trigger with no complaints. C++ will let you aim the gun and fire, without telling you that it was aimed at your foot the whole time. Java will warn you repeatedly as you aim the gun, warn you as you pull the trigger, and shoot you in a single toe.

C++ is a complicated language. Yes, it's powerful, but it's powerful in ways that you may not need, writing business apps. Python isn't a bad idea, if you want to work more on the web side, or write automation scripts. Java and C# would both be good options if you want to develop applications (C# especially, provided you want to do development on Windows).

If you're determined to jump in the deep end, consider this book. It's written by the original designer of C++, and it's written as a programming primer for beginners. It doesn't include the C++11 features (the most recent update to the language), but it ought to cover everything before that.

But, seriously: Slow down. You can learn the basic syntax of a language in a few weeks, and you can start feeling reasonably comfortable within a few months. You won't be as competent of a programmer as you feel like you are for a long time, though, and rushing through things isn't the way to get good.

u/jbos1190 · 1 pointr/learnprogramming

This free book is pretty good at teaching assembly language programming in a 32-bit environment. The best book imo to learn low level programming / computer concepts is this. It assumes only that you know C, and does a great job at teaching assembly language, computer architecture, and the basics of operating systems. It has great projects that you can do on its website. One of the projects is to reverse engineer a malicious program. Another project has you write buffer overflow attacks on a vulnerable program. Its a really great foundational book.

u/zzyzzyxx · 3 pointsr/learnprogramming

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

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

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

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

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

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

u/Idoiocracy · 2 pointsr/learnprogramming

I also recommend the C Programming: A Modern Approach by K.N. King. It's considerably longer than Kernighan & Ritchie's book, but does provide more explanation which can be helpful for a beginner. A Modern Approach is considered one of the best starting C books among those who read it. Your local library might have a copy of both if you want to read them cheaply.

If you wish to start with Python instead, a good book is Python Programming: An Introduction to Computer Science by John Zelle.

u/ramwolf · 1 pointr/learnprogramming

Python is the best place to start I think. Its syntax is super easy and it helps you think systematically and gives you a good introduction to how to code. This is the book that I read and it was fantastic.

http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418

After a little python intro then I'd move on to java

u/white_nerdy · 1 pointr/learnprogramming


What you need to learn depends on exactly what you want to do. If you want computer assistance to help you beat your best friend at correspondence chess, then getting AI to work for you may be as simple as buying or downloading a ready-made off-the-shelf program.

AI is a very broad label that applies to a lot of different things. If you want to write your own chess-playing program, then you need to know about binary trees, depth-limited depth-first search, alpha-beta pruning, and heuristics. These things are great for playing chess and other games that resemble it, but are rather useless for other things that people also call "AI", like computer vision or natural language processing.

My advice is to start by learning programming, practicing your programming skills on less challenging problems, and then working up to whatever you want to do. This subreddit's FAQ will help you.

Alternatively, you can buy a good introductory AI textbook, such as Artificial Intelligence: A Modern Approach. However, before you buy an expensive textbook, be warned: If you don't already have a decent grasp of how programming works, the information is likely to be somewhat overwhelming and not very useful.

u/abstractifier · 22 pointsr/learnprogramming

I'm sort of in the same boat as you, except with an aero and physics background rather than EE. My approach has been pretty similar to yours--I found the textbooks used by my alma mater, compared to texts recommended by MIT OCW and some other universities, looked at a few lists of recommended texts, and looked through similar questions on Reddit. I found most areas have multiple good texts, and also spent some time deciding which ones looked more applicable to me. That said, I'm admittedly someone who rather enjoys and learns well from textbooks compared to lectures, and that's not the case for everyone.

Here's what I gathered. If any more knowledgeable CS guys have suggestions/corrections, please let me know.

u/BICHO_CHICKEN_ · -3 pointsr/learnprogramming

Unless you're gifted with coding and algorithms, don't expect to be able to land an interview and then land a job. Interviews will test you on algorithms, and coding.


If I were you, I'd just focus on learning Java syntax very well, then move on to OOP principles, and then move on to MVC principles.


Assuming you already have the required math background, you need to open this book, and starting going through the important parts in each chapter, and committing it to memory. You will be tested on things from this book during job interviews. You are expected to code them as well. Amazon specifically ask about Linear Programming whereas Google might ask about other stuff.


Not many make it without a CS degree. I have made a few bucks selling game apps, but there is always better things to do out there.

Algorithms book, considered to the holy bible in CS

https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844




Start using Java, and commit things to memory.


You will need at least 9 months of prep time.


Use this book to learn java https://www.amazon.com/Introduction-Programming-Structures-Comprehensive-Version/dp/0134670949/ref=sr_1_3?keywords=liang+java&qid=1564003011&s=books&sr=1-3






Use this other book as well:


http://www.deitel.com/Books/Java/JavaHowtoProgram11e/tabid/3683/Default.aspx




I assume you already know how to study and memorize and take good notes.





To get started on making game apps, visit this, and download it, it may help to fund you https://www.scirra.com/

u/UK_Dev · 1 pointr/learnprogramming

Hello there I cannot help with your code because I am almost falling asleep but I made a version of Tic Tac Toe and think you would benefit from looking at it. I am not sure of what your skill level is - mine isn't good so don't worry - but have a look at how my named my variables and function names and how they handle things.

https://github.com/RyanSwann1/Tic-Tac-Toe/tree/master

Also, this book has been invaluable for me in teaching good design for applications. http://www.amazon.co.uk/Beginning-C-Through-Game-Programming/dp/1305109910/ref=sr_1_1?ie=UTF8&qid=1452898795&sr=8-1&keywords=c%2B%2B+through+game+programming

Whilst it isn't theory heavy it gives fun examples on coding principles and is honestly an incredibly good introductory book.

u/Artist_Ji-Li · 2 pointsr/learnprogramming

I had a lot of my start with C++. This was the textbook I used to learn it initially and I had a lot of fun going through this book:

https://www.amazon.com/Beginning-C-Through-Game-Programming/dp/1305109910/(I would suggest reading only up to right before DirectX chapter though, since I believe the DirectX section has been outdated for a long time now for these books. Personally, I only briefly learned to do DirectX programming in general in college and never used it professionally, so I'm not aware of how often much older versions of DirectX is used, but I remember hearing things like the X files format we used in college got deprecated.)

I have worked professionally as a developer in and out of the game industry and I definitely agree that learning C++ to start would actually be advantageous, regardless of what languages you may have to work in later on because it makes everything easier to learn in comparison I feel. I use C# now for my current role and never had taken courses in it or such, but I was able to self teach it because of my C++ background.

u/myrrlyn · 8 pointsr/learnprogramming

https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319

This book is an excellent primer for a bottom-up look into how computers as machines function.

https://www.amazon.com/gp/aw/d/0123944244/ref=ya_aw_od_pi

This is my textbook from the class where we built a CPU. I greatly enjoy it, and it also starts at the bottom and works up excellently.

For OS development, I am following Philipp Opperman's excellent blog series on writing a simple OS in Rust, at http://os.phil-opp.com/

And as always Wikipedia walks and Reddit meanders fill in the gaps lol.

u/wisam · 1 pointr/learnprogramming

Java, A Beginner's Guide. is a well-paced book that's not huge (about 700 pages).

Java, The Complete Reference. by the same author of the above book is, as the name suggests, a huge comprehensive reference (about 1500 pages). I wouldn't use it to learn the basics, but would use it later as a reference.

Introduction to Java Programming, Comprehensive Version. is a slow-paced huge book (more than 1500 pages) that will benefit a beginner a lot.

Now if you are in a hurry and you need to go through the basic s quickly and possibly miss some details, I would recommend Think Java. It's a small (about 300 pages) free fast-paced book that will get you hooked quickly.

u/attekojo · 2 pointsr/learnprogramming

If you want an excellent whirlwind tour to computer science basics with a language you've probably never heard of, I'd recommend MIT's Structure and Interpretation of Computer Programs course. The video lectures and the course book are available free online. It's pretty tough going but will seriously expand your mind :)

For design stuff I'd recommend reading books about OO testing and refactoring, like this or this.

u/Watabou90 · 1 pointr/learnprogramming

If you want x86 assembly, this book is very good: http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/0136108040/ref=dp_ob_title_bk/180-6741587-3105245

I'm talking an assembly class this semester that involves writing assembly from scratch and this book (which is required for this class) is a lifesaver because the professor isn't that great at summarizing the important points.

I think it's a good book. It starts easy and it has a lot of exercises that have answers on the back of the chapter so you can check your answers pretty easily.

u/sanedave · 10 pointsr/learnprogramming

Three books I have been using:

The Definitive Guide to How Computers Do Math

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

Assembly Language Step-by-Step: Programming with Linux

Hacking: The Art of Exploitation, 2nd Edition

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

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

Have fun!

u/slowfly1st · 3 pointsr/learnprogramming

> Should we start learning how to build for Android, iOS, or some cross-platform tool? What are trade offs for each?

For instance https://ionicframework.com/

But honestly, as long as you don't need to develop native, as /u/Xen0_n mentioned, I'd go with a progressive web app. You write it once and it runs in all modern browsers. You also have access to e.g. GPS, can send push notifications, etc. But make sure, a PWA provides all the technical features you need! (Proof of Concept! -> I need to decide on the tech stack by the end of this month)

It's also important to consider your team's abilities. If everyone is a python developer, don't use c#. If everyone knows angular, React is probably the wrong decision. If there's not enough knowledge and experience present in the team - the people of a team can usually give quite good feedback about technologies (complexity, learning curve, if it's fun to work with it)

​

>What are common components of an app's architecture that we will likely have to think about? I know we'll need a front end and a back end with a database, but I'm guessing we'll need to consider things like communications with the server storing the database? -How do apps link these components together/let them talk to each other?

Usually Multitier architecture. E.g. the front end communicates with a REST-api, rest API with a business layer, business layer with a persistency layer. What you use (programming language and back end) will determine how the communication will work. With Java and a relational database it will be most likely be JDBC with the given driver of the DBMS.

But also think about the cloud - this has some impact on the software architecture (aka could readiness).

​

>What are common mistakes when making early design decisions that cost you down the line in efficiency and maintainability?

From my experience:

  • In general violating basic object oriented design principles (SOLID, cohesion, coupling,...), e.g. passing around Objects from the OR-Mapper directly to the client, instead of designing API's. Or bi directional dependencies of packages.
  • not applying good software development and delivery practices (software delivery pipeline, high test coverage, high quality tests, code reviews, release and deploy regularly, decoupled architecture..). You should never be afraid to change your software.

    ​

    > What should our development process look like? Simultaneous front end and back end development? Back end before front end?

    Don't split the team into front end and back end if you can avoid it. Only if the team is getting too large to be effective, a split should be considered - having two teams will usually end up in finger pointing. Better is to code by feature. And split up a feature into smaller tasks (work in small batches), think about MVP: A small batch which already generates value to the customer and also generates feedback. It doesn't need to be feedback from production, but can be from a customer.

    How you write and deliver software - from requirements engineering, UX testing, actual coding and whatnot to deployment into production - is a really large subject. And there's no 'one size fits all'-approach - every environment is different. I'm a disciple of agile software development: The Manifesto for Agile Software Development and Continuous Delivery (and: Accelerate).

    Important is, that you guys always improve the process (as in continuous improvement). Not only within the team, but also and especially with the customer.

    ​

    Another thing: Don't forget security. The outcome of a security audit can be painfully expensive.
u/eric_weinstein · 5 pointsr/learnprogramming

Seconding The Pragmatic Programmer and Cracking the Coding Interview. I'd also recommend:

  • Code Complete: verbose and somewhat self-congratulatory, but extremely good.
  • The Mythical Man-Month: a little dated and weirdly religious at times, but has great insights into how software problems are actually people problems and how large projects are (mis)managed.
  • Design Patterns: a.k.a. the Gang of Four book. This one's a classic.
  • Pro Git: you mentioned version control systems. IMHO, you should learn Git if you don't know it, and this book is a great resource.

    If you let us know which languages you primarily write, I can probably recommend some good language-specific titles, too.
u/Noamyoungerm · 4 pointsr/learnprogramming

You can program without math, but you'll run into limits. Even math at a high school level will totally change the way you look at and think about some parts of programming.

This is something that I can attest to personally because I began programming with a 3rd grade math level myself. I can't really say what part math had in my perspective on programming, because I was also in the process of growing out of third grade, but when math finally "clicks" somewhere between high school and college, you learn to tackle these things differently.

You can program without math, but if you know the math you'll have a better understanding of what you're doing. You'll look at some problem you're trying to solve and say "hey, that looks awfully similar to a set of equations, instead of trying to solve them inside my program I should solve them by hand and plug in the solution".

Algebra is the really important one. Calculus also doesn't hurt. Trig is a must only if you see yourself doing anything related to graphics or games in the future. I also highly reccomend Concrete Math, but to understand that text you'll have to have a solid grasp of calculus.

u/Tiberius1900 · 33 pointsr/learnprogramming

To get a feel for low-level computing you should learn C. All modern operating systems and low level utilities are written in C (or C++, which is C with objects). It is as close to the metal as you can get while still being useful. Maybe you could fiddle around with some assembly afterwards.

Now, as for understanding how an operating system form top to bottom works, Windows is a pretty shit place to start for the following reasons:

  • Proprietary nature means little documentation about how the OS actually works internally.
  • Single desktop environment and lack of naked shells makes it hard to understand how and why some things work.
  • Limited capabilities for programming without an IDE, which is what you should be doing if you want to learn C (note that I said learn C. Particularly in the context of understanding, say, how data streams and the like work, programming without an IDE is infinitely better).
  • etc.

    Instead, you should learn Linux, and learn how Linux works. Installing it in a VM is fine. If you're looking to learn, I suggest you start with Debian, and, after you get comfortable with the command line, move to Arch. Arch is great for learning, if not much else, because it makes you do most things manually, and has a pretty extensive wiki for everything you may need to know.

    Resources:

    A Linux tutorial for beginners: https://linuxjourney.com

    A pretty decent online C tutorial (note, you should compile the programs on your own system, instead of doing their online exercises): http://www.learn-c.org

    K&R2 (the "proper" way to learn C): https://www.amazon.com/dp/0131103628/ref=cm_sw_r_cp_awdb_t1_FSwNAbFDJ3FKK

    Computer Systems A Programmer's Perspective, a book that might just be what you're looking for: https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X
u/myanrueller · 1 pointr/learnprogramming

Having gone through something similar where I worked at a hospital from 2-11 (not nearly as bad as your hours, but still):

If you can manage it financially, find a way to go to school, even if it's part time. Large employers are required by law in most countries to give you reasonable accomodations if you're a full or part time student. It requires you telling your employer and HR once you start classes: I need X amount of time for homework per week. I need in order to be successful here and at school to work no more than X hours.

In this case the X is what you need.

School gives you structure for programming, and someone (your professors) to hold you accountable to working on it. And you're paying for it in most cases, so you have a financial incentive to do the work. You get out of a class what you put in, financially or otherwise.

But returning to school isn't a reality for everyone either. Maybe you just give yourself one problem a week you find in a "Learn [Language Name] through [Whatever Interests You]" book or website. I heartily recommend Beginning C++ Through Game Programming personally. It's how I started, and the chapters/projects are small enough to be digestible in the limited time frame you have. I'd look for a book like that in a language that interests you if you can't justify school financially. They give you small enough projects to learn with that you can work on when you can.

Check with your local library for any resources they have. I know Omaha (Nebraska) Public Library has Lynda access for every patron.

I also watch Humble Bundle. They have bundles on coding, even game development ones are useful tools. $15 for enough books to keep you going a while isn't a bad deal.

u/jayrobin · 1 pointr/learnprogramming

I took CS50x when they first offered it on edx in 2012 and it was by far my favorite online course. It's been a while and it may have changed a bit, but from memory a few things that helped me:

  • Watching the videos at 1.5 speed and repeating/slowing down at more complex parts (David Malan is a great lecturer but the lectures have a lot of filler)

  • Watching all the videos, including the workshops (or whatever they're called)

  • Helping out others who are stuck (see CS50 subreddit): teaching is a great way to solidify learning concepts

  • Read Programming in C
u/loamfarer · 2 pointsr/learnprogramming

The C++ Programming Language, 4th Edition - Bjarne Stroustrup
Effective Modern C++ - Scott Meyers
21st Century C - Ben Klemens
Learn You A Haskell For Great Good - Miran Lipovača
The Book & Rustinomicon - Rust Contributors
A Byte of Python - Swaroop Chitlur
Java The Complete Reference 9th Edition - Herbert Schildt

These are the books I got the most out of. None of them are good for beginners to programming, except maybe A Byte of Python.
But they have given me deeper essential knowledge over the tools that I'm working with than any sort of "zen of patterns" or "corporate feng shui" style book has offered.

Of course I have also come across other computer science books that are fantastic, namely AI and machine learning stuff. I know a handful of solid game engine and graphics books have also come out in the past few years.

u/dev_bry · 12 pointsr/learnprogramming

You've already done the first step: admitting that college can only teach the fundamentals while the rest of the things you need to know, you will learn while working.

With that out of the way, here's the next step: apply the Joel Test to your new employer.

If it gets an 11 or 12, you'll be fine. Find a senior developer there to mentor you and you'll be a decent software engineer in 1 - 2 years.

Otherwise, while you might learn a lot of new stuff in your first job, they might be inadequate, outdated, or outright incorrect. In this case, plan an exit strategy ASAP so that you can leave to another company that has a much higher score in the Joel Test. In this fast paced software industry, it makes no sense to spend 5 years in a company where you'd only get to grow the same amount as another guy who just spent 6 months in a better company.

Next step: read. No, not those "Teach yourself [insert language that will be deprecated in 2 years] in 24 hours" books - find the books that teach software engineering, lessons that don't get outdated. Here's the usual suggestions:

u/ChristianTaz · 2 pointsr/learnprogramming

Actually I think the book he's referring to may be Programming Principles and Pratice written by the original designer of C++. Many consider it one of the best books for beginners to learn programming principles and the C++ language. The author also explicitly says it is not a reference book and that it is best to go through chapter by chapter.

Of course, I could also be assigning meaning to nothing. I'm just going off the fact that the book is like 1300 pages and is popular for people trying to learn C++.

But the answer to this would still be no. You would need to code a lot in addition to reading the 1300 page tome.

u/huck_cussler · 1 pointr/learnprogramming

Computer Systems: A Programmer's Perspective is the one we use at my school, and it is pretty awesome. It's engaging and entertaining inasmuch as a book on systems programming can be. There are tons of exercises and there is a website where you can work on lab assignments that the authors created.

u/another_math_person · 4 pointsr/learnprogramming

You might use calculus-based tools for some analysis, like if you look at Knuth's Discrete Math text, you'll see discrete integrals, which are certainly grounded in calculus.

As well, if you look at randomized algorithms, you might need to use some nontrivial probability stuff (like Chernoff Bounds - wiki). That isn't directly calculus, but there is a significant portion of useful probability that requires the use of integrals.

All that said, Linear Algebra is probably more useful for programmers (especially if they're doing graphics or games).

u/kraven867 · 9 pointsr/learnprogramming

Colt Steele's web developer bootcamp on Udemy is a great one! You can get it for $10 currently, sale is for 2 days only though. It honestly depends on your price range and if he wants something physical like a book, or a course. If a book, is a good one there's plenty other ones too.

Again, it depends on the price range ultimately.

u/Kristler · 1 pointr/learnprogramming

For hacking, the generally agreed best general book is Hacking: The art of Exploitation.

I own it myself and I can tell you it's great. Prior to spending the money on it make sure you're somewhat familiar with advanced programming concepts. The book primarily talks about C, but teaches you C as it goes. It assumes you understand how to use bash well, though. Linux experience also helps.

u/Everene_Jinx · 1 pointr/learnprogramming

If you're interested in Computer Security I'd recommend learning the C programming language.

A really good book that includes some information on C and Computer Security is Hacking: The Art of Exploitation by Jon Erickson.

u/Truth_Be_Told · 1 pointr/learnprogramming

The Computer Systems: A Programmer's perspective is a very good book (the only book of which i have all 3 editions!). You can easily get the cheap South Asian editions and save money.

u/Lericsui · 26 pointsr/learnprogramming

"Introduction to Algorithms"by Cormen et.al. Is for me the most important one.

The "Dragon" book is maybe antoher one I would recommend, although it is a little bit more practical (it's about language and compiler design basically). It will also force you to do some coding, which is good.


Concrete Mathematics by Knuth and Graham (you should know these names) is good for mathematical basics.


Modern Operating Systems by Tennenbaum is a little dated, but I guess anyone should still read it.


SICP(although married to a language) teaches very very good fundamentals.


Be aware that the stuff in the books above is independent of the language you choose (or the book chooses) to outline the material.

u/jesyspa · 3 pointsr/learnprogramming

First of all, ask yourself why it is you want to do C++. It isn't the easiest or most convenient language; unless there's some specific reason you want to focus on it, there's a pretty good chance that you should (first) learn something else. If you're not sure, try this page.

As for where to learn it, the only worthwhile resources available at this moment are good books. If you have little experience with programming, I'd recommend starting with C++ Primer or Programming: Principles and Practice using C++.

u/clappski · 2 pointsr/learnprogramming

Yeah, so do I. Beck is one of the original proponents of unit testing (and TDD), and this book is a very strong starting point.

After this, I would definitely look into reading something about integration/end2end testing and continuous deployment, like Continuous Delivery. We recently had David Farley do a talk at our work, and he has some very important things to say.

u/nimix16 · 3 pointsr/learnprogramming

If you're looking for a great beginner book, I personally recommend 'Beginning C++ Through Game Programming' by Michael Dawson. Don't let the name throw you off, it's just a different styled intro book and still teaches you all the main concepts. It's pretty much starting off with printing 'Game Over!' rather than 'Hello World!' https://www.amazon.com/Beginning-C-Through-Game-Programming/dp/1305109910/ref=dp_ob_image_bk

u/WillCraig_ · 2 pointsr/learnprogramming

You are pretty much wasting you time with Python if you want to become a web developer. Maybe later in your career you can learn Python for more advanced concepts but if you are a novice programmer and you know that you want to learn how to make websites, then just go for Javascript, HTML, and CSS

Here are 2 books that I really like (They have a really good aesthetic too)
https://www.amazon.com/Web-Design-HTML-JavaScript-jQuery/dp/1118907442/ref=sr_1_fkmr1_2?ie=UTF8&qid=1484694500&sr=8-2-fkmr1&keywords=html+and+ccs+books

u/ahhcarp · 2 pointsr/learnprogramming

I just bought Python Programming: An Introduction to Computer Science 2nd Edition.

I'm only a chapter into it, but it is basically an introduction to programming using Python 3. I essentially bought it based off the Amazon reviews, but it looks good so far (obviously taking into account that I'm barely into it so far.) I was going to school for web development and web design, but I found that many of the web development classes were along the line of "Here is someone's code. Now lets make it work for us." which doesn't teach the basics of programming if I need to do it myself. I'm currently taking some time off school to do some other projects and some basic learning about programming.

Chapters:

  1. Computers and programs
  2. Writing simple programs
  3. Computing with numbers
  4. Objects and graphs
  5. Sequences: strings, lists, and files
  6. Defining Functions
  7. Decision Structures
  8. Loop structure and booleans
  9. Simulation and design
  10. Defining classes
  11. Data collections
  12. Object-oriented design
  13. Algorithm design and recursion

    EDIT: Once you've read a book on basic programming (I see a recommendation for Code Complete too), you can search /r/python and there are several threads with free online resources to learn python more in-depth.
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/Dolphinmx · 3 pointsr/learnprogramming

I'm reading this one because I wanted to "relearn" my java and is quite good, it includes only Java and is very detailed...but is a big book, you don't need to follow each chapter, maybe just read what interest you.

Java: The Complete Reference by Herbert Schildt


For Android, I started watching the following course on Udacity and they use Android Studio. It's free to watch the lessons.
https://www.udacity.com/course/ud853

u/Canadana · 4 pointsr/learnprogramming

Don't be too hard on yourself, C++ is a tough language. Its a good sign that you are struggling, it means that you are human. You might want to take a look at Programming: Principles and Practice Using C++. It was written by the creator of the language and its good for beginners.

Good luck!

u/bobik007 · 2 pointsr/learnprogramming

Ideal resting strategy is explained here (preferably with some exploratory testing on top, but they require time):

http://googletesting.blogspot.com/2015/04/just-say-no-to-more-end-to-end-tests.html
http://martinfowler.com/bliki/TestPyramid.html

This pyramid is easy to achieve in applications with architecture based on micro services (Netflix, Amazon).

The problem is with huge, monolithic applications which doesn't have separate components communicating via REST API. In that case you have to rely on GUI level testing (Seleniums) which require a lot of maintenance work.

There is tendency in the software engineering community to deliver software almost immediately on production. This makes changes delta a lot smaller (fewer changes in release = less risk of bugs in release). This enforces strong emphasis on testers to automate everything which is possible and test on production.

You can (and should really, if you consider a career in engineering) find explanations of those ideas in this book
https://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912

u/verge36 · 2 pointsr/learnprogramming

Well, not really sure about what a complete beginner might think about the book, i already knew some basic concepts of java-classes, methods syntax Generic methods etc.- thanks to this. I also took a mandatory C course at University. I read until java.util, then decided to use Sedgewick's book, because i thought i needed some exercises so Sedgewick's course felt just right. It had plenty of exercises, and the right amount of explanations for most cases. However recursive functions are sometimes complex, and the lack of explanation sometimes makes them hard to understand. Otherwise gret book for beginners. I feel much more comfortable writing code now.
Will look into the algorithms course, that was the part of the book i enjoyed most tbh.

u/K__Dogg · 2 pointsr/learnprogramming

Java: The Complete Reference, Ninth Edition https://www.amazon.co.uk/dp/0071808558/ref=cm_sw_r_cp_api_0F7wzb16GVWKH

I have been reading this lately and it is the BEST programming book I've read. It's filled with examples and easy to understand explanations.

u/keltor2243 · 1 pointr/learnprogramming
u/realistic_hologram · 1 pointr/learnprogramming

Love code, very accessible. If you want more of a textbook I thought this one was very good while still being quite accessible: http://www.amazon.com/gp/aw/d/0123944244/ref=redir_mdp_mobile/189-7884811-1167562

u/videoj · 5 pointsr/learnprogramming

Data structures and Algorithms Write code to impleement every (or even most) and you'll be well preparped.

Design and Testing here.

Programming Languages here.

Also look for an open source project that needs help and provides you with experience in one or more of these areas (or start your own). Code is always a good way of showing you know something.

u/Is_that_bad · 2 pointsr/learnprogramming

Programming: Principles and Practice using C++.
Buy this book or get a used version if you can or borrow it from the library. The book is very well written with a lot of exercises at the end of each chapter, which if you complete will get you a good grasp of C++. As for software, install MS VC++ express, it's free.

u/LainIwakura · 1 pointr/learnprogramming

I know you said online, but I'd highly recommend this book- by the creator of C++ himself. (Bjarne Stroustrup)

http://www.amazon.com/Programming-Principles-Practice-Using-C/dp/0321543726/ref=sr_1_1?ie=UTF8&qid=1300905008&sr=8-1

It's not as heavy as one of his other books, and is a good introduction to programming in general.

u/brockitoff · 1 pointr/learnprogramming

I am a fan of these. I keep them on my desk for quick access but I think they would make good study material as well! I would also take a look at the related books on the page and read some reviews.

u/Thehollidayinn · 1 pointr/learnprogramming

Ah, yes. I should have explained. Nothing too crazy. I have watched the courses and thought it was a good introduction. So - just a personal preference I had over the Big nerd ranch book.

My general philosophy for learning a new stack/language is the following:

  1. Get a general idea, and build some random things (where you seem to be)

  2. Pick up a "Cookbook" book. Usually something like Android Cookbook or project based books (game development - easy)

  3. Hit the theory and "boring" stuff. So for Android
u/0b_101010 · 9 pointsr/learnprogramming

Hi! I recommend the following books:

u/boredcircuits · 5 pointsr/learnprogramming

Start with the Dragon Book.

When it actually comes time to implement the language, I would recommend just writing the frontend and reusing the backend from another compiler. LLVM is a good option (it's becoming popular to use as a backend, it now has frontends for C, C++, Objective C, Java, D, Pure, Hydra, Scheme, Rust, etc). See here for a case study on how to write a compiler using LLVM as the backend.

u/pushme2 · 2 pointsr/learnprogramming

To be honest, I would suggest some other book first (kochan and king are good enough), then reference/read that book if you have problems or just want to say you read it.

K&R is old, and while still mostly accurate, and can teach you C, there are books that are better suited for teaching people learning C in this century. One thing that the newer books lack usually is explaining old stuff. For example, many books don't sufficiently explain how the input and output buffer works.

I do think it's a good idea for people actually doing stuff with C to eventually read K&R, but starting from the basics, you might want a gentler approach.

u/Bubbleeh · 1 pointr/learnprogramming

For learning C I would recommend Programming in C if you're new to programming, and C Primer Plus if you have some programming experience. Both great books, but Programming in C feels like it's geared more towards total beginners.

u/mucus · 1 pointr/learnprogramming

You can have a go at the book Artificial Intelligence: A Modern Approach by Russel and Norvig, it's fairly accessible and it's a fun read.

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/net_nomad · 1 pointr/learnprogramming

Just go straight to C++ then.

If not, http://shop.oreilly.com/product/9781565923065.do then https://www.amazon.com/Expert-Programming-Peter-van-Linden/dp/0131774298 then https://faculty.washington.edu/jstraub/dsa/Master_2_7a.pdf

I haven't read the last one, but I skimmed through it. You need that.

Hmm, what next? Ah, https://www.amazon.com/Advanced-Programming-UNIX-Environment-3rd/dp/0321637739 if that's your thing. You may find that online without having to buy it for the 2nd edition.

Oh, sockets... http://www.csd.uoc.gr/~hy556/material/tutorials/cs556-3rd-tutorial.pdf however, back when I studied those, I read beej's tutorial: http://beej.us/guide/bgnet/

You obviously don't need all of that. The first book I listed is enough, but maybe it'll be fun to work through them?

u/absolutionx · 1 pointr/learnprogramming

If you're just starting to program I would highly recommend python along with the book Python Programming: An Introduction to Computer Science.

Python has a very easy and simple syntax so you can spend more time learning the fundamentals of programming instead of focusing on getting the syntax correct.

u/Lesabotsy · 1 pointr/learnprogramming

This is a good one that covers a lot if you're motivated.

u/hewhomustbenamed · 3 pointsr/learnprogramming

Umm....if you want to do that...then write a simple program to lets say sum 10 numbers in C. Now , compile this file and "step" through the program in gdb....as you will see each assembly line executed you will have an understanding of whats going on.

However , for some sanity please refer the Intel manual or use this book (there might be other references as well) ... http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/0136108040


There's a free beta edition somewhere...and you will need Chapters 2 and Chapters 3. One full day read both of them thoroughly..and you"ll be golden. Let me know how it goes.

u/apokorney · 1 pointr/learnprogramming

Thanks, I've got Principles and Practice using C++ by Bjarne Stroustrup ordered, however code doesn't exactly match from the texts I have read to VB. I was just trying to get some definitions, so I can recognize how to identify code in the future. Thanks

u/The_New_34 · 2 pointsr/learnprogramming

Java: A Beginner's Guide

For someone who does not know much about computers at ALL, this may be a bit challenging at first, as it doesn't go into much detail about downloading the JDK (if you wish to use it and not an IDE) and some issues about javac and java not working (again, this is only an issue in cmd/powershell if you're not using an IDE).

I would also recommend this html, css, javascript, and jquery bundle

The two books can also be bought individually


EDIT: Specified the downsides of the Java book a little more

u/PicklesInParadise · 1 pointr/learnprogramming

I haven't read it in years, but I remember The C Programming Language being very useful.

If you want to learn more about the low level details of how computers work in general, I own the following books and recommend them:

---

u/TheLordIsAMonkey · 2 pointsr/learnprogramming

If you're looking for a good book I recommend Expert C Programming.

u/crunchy_fetus · 3 pointsr/learnprogramming

My favorite was Expert C Programming: Deep C Secrets, aka the fish book.

It's very well written, and has an almost conversational tone (and some jokes) despite its technical nature.

u/john-yan · 2 pointsr/learnprogramming

I would suggest everyone who are serious about computers to read this book: https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X/ref=sr_1_1?keywords=csapp&qid=1568386364&sr=8-1

You will gain so much elementary knowledge which will help you significantly no matter what you want to explore afterwords.

u/Dansio · 2 pointsr/learnprogramming

Then learning Python would be very useful for you. I have used the book called Automate the Boring stuff (Free).

For data science and machine learning I use: Data Science from Scratch and Hands on Machine Learning with Scikit-learn and Tensorflow.

For AI I have used Artificial Intelligence: A Modern Approach (3rd ed.).

u/rogue780 · 0 pointsr/learnprogramming

C primer plus

Programming in C (new edition coming around the new year)

http://c.learncodethehardway.org/ (incomplete, but still better than K&R for modern times)

u/thisdudehenry · 2 pointsr/learnprogramming

This was fun Beginning C++ Through Game Programming https://www.amazon.com/dp/1305109910/ref=cm_sw_r_cp_apa_FZs.yb130YGED. They have projects to do on your own

u/the_omega99 · 1 pointr/learnprogramming
u/JeEmGu · 1 pointr/learnprogramming

Hey I am in the same boat!
I used codecadamy first. I understand html/css. I took the books Jon Duckett both of them I am also looking at a good php book. So now I know html/css I am going for javascript. then PHP after those are somewhat in my mind I am going for ruby.



Just take it slow dont skip anything. Keep trying

u/faehnrich · 2 pointsr/learnprogramming

Yes, that is required C reading.

Also Expert C Programming, which is actually funny at times.

Then I hear C: A Reference Manual is the last C book you'll need after those other ones, but haven't gotten to it.

u/yturijea · 2 pointsr/learnprogramming

Which kind of AI do you have in mind?

If you wanna go deep academical to it you should read Artificial Intelligence A Modern Approach (3rd Edition)

u/The_Last_Castoff · 1 pointr/learnprogramming

Hmm. I just bought this one and should be getting it this weekend. Seems like a solid choice. I have basic knowledge in HTML, CSS, PHP, & Javascript.

http://www.amazon.com/dp/0672326663/ref=pe_385040_30332190_pe_175190_21431760_M3T1_ST1_dp_1

u/supra621 · 2 pointsr/learnprogramming

Jon Duckett has two books often sold as a set: one for HTML & CSS, the other for JavaScript and jQuery.

When I was an absolute beginner, they were my favorite go-to references. I still keep them at my desk.

Edit: I realize you said B&N for gift cards, but this is the Amazon link for reference

u/ironcrown9 · 1 pointr/learnprogramming

There's a course at my school that covers exactly that (216 at UMD).
The book that's recommended is computer systems a programmer's perspective, it's exactly what you're looking for. Code is only used for examples, C and more often assembly. Mostly details on CPU instructions, hardware implementation and the creation of Unix

u/Sk0_756 · 3 pointsr/learnprogramming

The few comments in here aren't explaining WHY the interviewer said "very 90s". Obviously, "very 90s" is over-exaggerated... "very 2000s" is a bit more accurate.

What you've got is a "typical" layered architecture, which is considered a bit out-dated these days. There's a couple major reasons people move away from that architecture now.

  • Putting the DAL at the bottom of your architecture means it and your database are effectively the foundation of your application - everything else builds on top of those. We now recognize that since the database is an infrastructural concern, it is more at home on the fringe of an application's architecture, instead of at the core. Business Logic should actually be the foundation of an application, because implementing the business logic is the real reason you're writing the application in the first place.
  • Layered architecture tends to force developers to think in terms of logic and data structure separately. All of your BLL classes tend to be "services" - classes that execute some business logic, but don't hold data. You supplement those with what's called an "anemic domain model" - a collection of objects that hold data, but don't execute any logic (you have an anemic domain model if you have a collection of classes which are just a long list of getters and setters). That setup kinda defeats the point of OOP, which is all about allowing us to create classes that hold data AND execute logic.

    For a quick look at an alternative project structure, you can check out Onion Architecture, which moves business logic to the application core on CodeProject (this is similar to ports & adapters)

    For more in-depth, look into Domain Driven Design (DDD). Many an architect, including myself, would suggest Eric Evans' book on the topic.

    For a more recent DDD book, see Vaughn Vernon's Implementing Domain Driven Design.
u/memeHUSK · 1 pointr/learnprogramming

I just finished this book and highly recommend it as a starting point.

u/ForwardParticular · 4 pointsr/learnprogramming

I always liked reading this book. It explains low level concepts well without needing to have a computer in front of me. It definitely has some hands on material but the first 3 chapters or so are solid gold.

https://www.amazon.com/Hacking-Art-Exploitation-Jon-Erickson/dp/1593271441

u/zifyoip · 1 pointr/learnprogramming

This kind of stuff is commonly taught in university CS courses called something like "Computer Architecture." The book that was used in my computer architecture course was Computer Systems: A Programmer's Perspective, by Bryant and O'Hallaron (book home page). This book uses C and IA32 assembly (or rather something the authors call "Y32," which is a simplified version of IA32).

I cannot support copyright violations, so I will not say anything that might lead you to believe you might be able to find a PDF of this book on the Web if you Google for the title.

u/dont_mod_your_rhodes · 2 pointsr/learnprogramming

It will help -to me it was the first book that came to mind. The second would be the this -the pinnacle of software design.

u/Aozi · 1 pointr/learnprogramming

I would recommend Python programming: And introduction to computer science. It's a very basic book that covers fundamentals and should be enough to get you familiar with the fundamentals.

u/one_way_trigger · 2 pointsr/learnprogramming

Hacking: The Art of Exploitation is really inexpensive on Amazon in hard copy. Beautiful Code is also on par with the ebook on their site. I'm not entirely sure how the program works, but someone further down mentioned being able to register a hard copy that was purchased and get the ebook for $5. Probably worth looking into!

u/slaystation25 · 0 pointsr/learnprogramming

Sorry, I just didn't put that right. I meant how data is stored in memory, and how it can be manipulated using C. I'm using this book for the course, if that helps clear what I'm trying to say.

u/cantstopthemoonlight · 2 pointsr/learnprogramming

Compilers-Principles-Techniques-Tools is considered THE definitive book on the subject. It's old, but in a fine wine kind of way.

u/cmtedouglas · 1 pointr/learnprogramming

well, the common source out there that i can't avoid recommend is the Dragon's book

http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811

u/Unfunny_Asshole · 1 pointr/learnprogramming

I second this.

Also, my professor has recommended some of the topics here for more detailed reading.

u/ivansonofcoul · 2 pointsr/learnprogramming

General:

Pragmatic Programmer

C language



This one is a lot tougher read and is probably one of the most famous book sets in Computer Science
Computer Programming Don Knuth

Edit: fixed spacings

u/InsidetheCentre- · 3 pointsr/learnprogramming

Me and a couple of others are learning C++ with this book, and have a study group where we discuss content & problems here. If you fancy joining feel free.

u/nekochanwork · 3 pointsr/learnprogramming

> Is there a true singular source to learn Java?

Unfortunately, no. There are 1000s of places to learn Java. The right choice is dependent on your skill level and what you want to build (e.g. web apps, mobile apps, desktop sevices, etc.).

If you need some recommendations, start with The Java Tutorials on Oracle, followed by Effective Java.

If you need a comprehensive overview of the language, you can use Java: The Complete Reference 9th Edition.

u/ADDMYRSN · 1 pointr/learnprogramming

I'm currently using a textbook called Python Programming: An Introduction to Computer Science

So far it has been really helpful explaining some concepts and has problems (with answers) to see what you've learned from each chapter.

u/Gankbanger · 1 pointr/learnprogramming

If you have the money to invest in a book, and you want to stick with C++ as your first language, then you should get this book by the creator of C++:

Programming: Principles and Practice Using C++

u/MakerTech · 1 pointr/learnprogramming

From what I can see on the page you link to, then I don't think so.

I can recommend this book for beginners to programming who want to start out with C++.

u/westernrepublic · 1 pointr/learnprogramming

Digital Design and Computer Architecture, Second Edition. It was my textbook for my college's Computer Organization class. You'll learn how to build a preprocessor!

u/ordnance1987 · 1 pointr/learnprogramming

This is the book I used in class. If you know C or C++ you can implement your own memory system, that's what helped understand how memory allocation works.

u/pipocaQuemada · 1 pointr/learnprogramming

www.amazon.com/Artificial-Intelligence-Modern-Approach-3rd/dp/0136042597

u/Contrite17 · 1 pointr/learnprogramming

I'd take a look at The Mythical Man-Month if I were you. First thing that sort of matches your description.