(Part 3) Top products from r/learnprogramming

Jump to the top 20

We found 208 product mentions on r/learnprogramming. We ranked the 1,804 resulting products by number of redditors who mentioned them. Here are the products ranked 41-60. You can also go back to the previous section.

Next page

Top comments that mention products on r/learnprogramming:

u/NookShotten · 1 pointr/learnprogramming

I started off with teamtreehouse.com and did their front-end developer track, which introduced me to HTML / CSS / Javascript. I had tried Codecademy prior to that, but I felt that it was just teaching me to follow directions, not teaching me to code.

I read the core chapters of Javascript for Professional Web Developers and then did the same for Javascript: The Definitive Guide. This is what really gave me a strong base understanding of the Javascript language (arrays, objects, prototypical inheritance, etc.).

Along the way I started using jQuery for DOM manipulation, which really made things easy, but it felt just...too easy. Like I was cheating myself by using this magical tool that I didn't really understand. So I started reviewing the DOM-related chapters of the two books I mentioned above, which is something I'm currently still undertaking.

As for AngularJS I've been trying to follow this Thinkster.io guide which I think has a pretty solid set of resources. I'm by no means an advanced AngularJS user, but hopefully in time I'll continue to grow. My current project is for my wedding, and uses an array of JS objects, each containing hotel information (name, location, description, website, etc). It then plots them on a Leaflet.js map and adds an entry in the list below each time I add a new hotel. I was pretty proud of that.

As for Node.JS, Professional Node.js has been really good so far. I learned enough to implement an XMPP bot at work, which was well received.

I'm continuing my education on Node.js--specifically with Express which I'm learning at the moment through MEAN Web Development


As for Python, I just finished my first course (Programming Fund. I) which was in Python, so I know the basic syntax. PHP I can read well enough, but sort of gave up on learning (for now) once I found server-side Javascript.


It probably seems like I read a lot of books, but I do want to mention that I haven't 'finished' these fully; I usually read it section by section, sometimes jump between books. I just have an erratic reading style, I guess.

I think the most important things are:

  • Find something you're passionate about

    I really enjoy Javascript and I think that has been a major motivator for me. I don't think I could have put the same level of effort into learning, say, PHP, which just doesn't excite me in the same way.

  • Find a solid primary resource

    I know that the accessibility and clarity of a CS-book can be totally subjective, but from what I've found there are almost always a certain set of resources people universally praise (like Definitive Guide / Good Parts / Eloquent Javascript for JS). I spend a good amount of time researching what the community for the language / framework tend to agree is the best resource.

  • Write out the examples from the books

    Especially for big tomes like The Definitive Guide which are just choke full of great snippets, I've found that its super useful to type out each example that you do not 100% understand. I've even found some errors in the books this way, which only served to help me understand how it really works even more.


  • See if there's a problem you can solve along the way

    This was big for me when it came to Node. The company I work for had a lot of traffic in their Jabber rooms and it was difficult to quantify it. I'd like to move to a SW Developer position there someday, so I decided that I'd try to solve the problem by getting a Jabber bot that monitors and records activity based on room, user, time. Having a tangible goal in a real-world context made me more motivated to figure out how I could use my tools to effectively.

  • Establish a good workflow

    Find an IDE you love and learn it inside and out. Get all those fancy-pants plugins and add-ons that make it hyper-functional. Find out which tools really 'click' for you and learn how they work. I've recently found myself very happy using Sublime Text as an IDE, Yeoman for boilerplate (love Grunt so much), and SASS as a CSS preprocessor (with Susy / Bourbon ). It just feels so satisfying having a solid setup, and I think that that kind of satisfaction with your environment makes it easier to learn.


    Overall I still think I have a lot to learn and wouldn't claim that I'm an expert in any realm yet, but eventually--with time--I hope to be.
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/YuleTideCamel · 4 pointsr/learnprogramming

I'm a technical PM for two teams, as a well a contributing dev on both teams.

While the skills are definitely different from programming a few things I've found that helps:

  • Get to know AGILE really well. Read the manifesto, read about scrum vs kanban . Understand each's strengths and how to do the process correctly for both. I tend to think SCRUM is like fitness, you have to do it right to get the full benefits. If I go the gym and work out then, eat a gallon of ice cream everday, I won't be fit.

  • Understand how to write good user stories, look into different patterns people use . For example the "As a <user> " format is quite popular but really understand how to flush out stories .

  • Avoid strict timelines (I know you mentioned it in the OP) but a PM can't be 100% rigid on timelines and even suggest them . The way that works for our entire company is we base everyone complexity and use the fibonnaci scale to estimate complexity by having multiple people on a team vote. I (as the PM) look at past velocity (how many points we completed) and then project out how long something will take based on the point values estimated by the team. This works FAR better than "oh it will take 2-3 weeks". People are bad at time estimates, complexity estimates are a much better gauge.

  • Practice your networking skills and diplomacy skills. Part of being a good PM is having established relationships with other teams and getting things for your team. A good product owner is a leader, but not a dictator. You don't tell the team what to do, you set the vision, and remove any blockers in their way. As part of this too is being available to answer questions.

    A few books you should read:

  • Notes to a Software Team Leaders Even though its focused on being a lead/supervisor, you can get a lot of good insight on how to help guide the vision of a team.
  • [Scrum: The Art of Doing Twice the Work in Half the Time] (https://www.amazon.com/Scrum-Doing-Twice-Work-Half/dp/038534645X). Really good book on understanding the spirit behind scrum, with real world examples. Not very technical , more about why rather than what scrum is. I've read this several times.
  • The Phoenix Project. Good book about breaking down barriers between teams and working towards a shared goal. It is devops focused, but I believe product managers would benefit from reading this as it illustrates the importance of shared ownership, automation and avoiding silos.
  • How to Win Friends and Influence People. Great book on interpersonal relationships and how work with others.
  • The Clean Coder. A book focused on professionalism for developers (not so much the code, but overall environment/culture). This is a good resource to understand the dev cycle in the real world and what teams should be doing to be professional. This will help you when making decisions on specific things to focus on.

    In terms of sprint plannings, just remember it's a negotiation. You're not there to tell people what to do. Rather you have the stuff you would like done, but you negotiate with the team on what's possible and what's not. I've seen too many PM's get pissed cause their teams couldn't do 100% of what they wanted and that's not right. Rather a good PM, imo, brings options and lets the team decide how much they can handle. There have been times when I've gone into sprint plannings and non of items made it on the sprint, and that's ok.

    Sorry for the long rant!
u/fajitaman · 4 pointsr/learnprogramming

The usual advice is "get out and program!" and that works, but it can be very tricky coming up with something to write that's also satisfying. The idea is that you learn best by doing, and that many topics in programming can't really be learned without doing. All that stuff is true and I'm not denying that at all, but some of us need more. We need something juicier than spending hours configuring a UI for a project we couldn't care less about. It shouldn't be an exercise in masochism.

I guess what I'm saying is that there are a lot of ways to learn to write code and books are great if you can really sink your teeth into them (a lot of people can't). Code Complete is a great book on the practice of programming. You also say that you "get" OO pretty well, but it might open your eyes to read up on design patterns (e.g., Head First Design Patterns). You have a long way to go before you really get it

In addition to those, you could delve deeper into your languages of choice. There's no way around JavaScript if you're a web programmer, and a book like JavaScript: The Good Parts is pretty enlightening if you've got some experience in JavaScript already. It's a pretty interesting and unusual language.

But sometimes programming is about building gumption, so instead of just being practical, try to figure out what you like about computers and keep going deeper into it. If you have an interest in computer science and not in just building apps, then something like Structure and Interpretation of Computer Programs could instill in you an enthusiasm for computers that trickles down to everything else you do. If you're more interested in web design, there are probably similarly interesting books on artistic design principles.

I think what I'm ultimately saying is that you should find what you enjoy doing and just go deeper down the rabbit hole, getting your hands dirty when it's appropriate and interesting.

u/InkognitoV · 1 pointr/learnprogramming

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

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

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

    Best of luck!

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

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

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

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

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

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

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

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

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

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

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

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

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

TL;DR

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

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


    Hopefully I answered what you wanted

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

> I just delivered a 20k lines/~50 pages project in AngularJS/Web API/PhoneGap without a single automated test.

Oh my... a few things:

First, I all but guarantee there are unforeseen consequences hiding in your code. I'm pretty sure you'll end up debugging something at some point that will boil down to "oh, I didn't consider an empty list", "oh, I got that boolean comparison wrong", etc... Sometimes it can get more complicated, as in "oh, I didn't consider the case that this concurrent routine terminates before that other concurrent routine". Testing is all about throwing out your assumptions about how you think the code works and validating how the code actually works. In a way, you are debugging now so someone doesn't have to later. And yes - your code contains bugs ;P

Second, to be testable, code needs to have a certain structure. I assert that well testable code happens to also be properly composed code. There are a lot of ways to blast yourself in the foot composition-wise. When you sit down and write tests, you might find that your composition is all over the place. It's surprisingly easy to write completely untestable code, and that's not something you generally want to get into the habit of doing.

Lastly, do you expect your $company to just take your word that "this works"? Unit tests are a demonstration of correctness. I'm sorry, but the harsh reality is that your mouth doesn't count for very much. So, either formally prove the correctness of your code, or write some tests.

I challenge you to take a few days and slap some unit coverage over your codebase. You will be amazed what you learn about your own code. There will probably be a good number of instances where you think "oh, I didn't think of that.." If you find it's difficult to actually test your code, you might think about the composition and how you can improve the testability of what you've written.

I very strongly recommend you read Beck's TDD. I'm not advocating for full-on TDD, but the book does a great job of explaining why testing is important and how you should organize a test.

Once you've got an idea of how to write unit tests, come back and ask about integration vs. end-to-end testing.

u/jj2parkie · 1 pointr/learnprogramming

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

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

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

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

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

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

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

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

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

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

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

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

u/[deleted] · 5 pointsr/learnprogramming

I found myself in a similar circumstance years ago.

I would recommend learning C first. Programming in C is a very friendly intro.

After that I'd recommend Advanced C and Data Structures in C.

These 3 books will teach you the basics of programming, recursion, sorting, stacks, queues, graphs, hashing, etc...

After you can do that in C, everything else will be much easier.

I know a lot of people recommend Java or other OOP languages but in my opinion it's best to start out in C and then transition to an OOP language.

I recommend installing ubuntu and using vi as a text editor. Compile using gcc.

If you decide to go with another language The New Boston has lots of video tutorials in various languages. Personally I don't care too much for his tutorials, although I know some people do like them, but one thing that is helpful is that the first few videos in any particular language series shows you how to install a compiler or IDE and get it up and running. If you're not too computer savvy these can be helpful.

If you go the python route I recommend these free sources:

Learn Python the Hardway

Think Python (this book is used with MIT's intro to CS course)

MIT's intro CS course

Think Stats (use python to do statistics)

Tons of other sources:

http://freevideolectures.com/

http://academicearth.org/

(note: at academic earth you can find programming courses from Stanford University. Their intro course is in Java. So if you want to learn Java that could be a good way to go.)

u/LawrenceMichael · 1 pointr/learnprogramming

I checked this sites content for C and C++. What was there was more so examples than it was well-explained. Since I don't know Javascript too well, I can't say how good the guide is, but if the quality level of their C and C++ content has anything to say for them, I'd say stay away.

Reddit already has recommended places to go for this. The Learn Javascript subreddit suggests one of the following three options:


Learn Javascript from the Mozilla team's resource


Learn Javascript from Code Academy


Learn Javascript from the subreddit's study group which uses this book Professional JavaScript for Web Developers


From a very quick look, Mozilla has a lot of good content that is well-explained. It looks like most people will want to begin with the "JavaScript first steps" section if they choose this route. Compared to CodeAcademy, I think you'll walk away with a better understanding after going through everything MDN has to offer. On the otherhand, I would say CodeAcademy is easier for beginners.


If CodeAcademy stays true to its reputation, I would imagine it is very good for the beginner to get their feet wet.


The Learn Javascript study group's curriculum seems to be using a pretty good book that is supplemented by CodeAcademy and other online resources. This looks to be the most comprehensive of all the choices.

u/treeturtle · 3 pointsr/learnprogramming

You can definitely learn, but don't think it'll be quick and painless. If you're a book guy This book will definitely get you going. However, I'll say it, starting programming in obj-c is a bitch. Syntactically it can be extremely overwhelming ( I tried to learn obj-c first ). If it becomes too much, take a step back and try good old C, or a much prettier language like Java, Python, or Lua which will help you understand all the concepts of programming before jumping into app development which can be extremely complex.

After being scared off by obj-c I officially started down my programming path by going through This book which was an absolute pleasure to read and a great "hold your hand" guide to basic programming. The great thing about this is that you'll be learning C concepts which all carry over to obj-C and you'll be getting very familiar with Xcode and the debugger which, again, carry right over into obj-C and app development.

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/SpotsOnTheCeiling · 3 pointsr/learnprogramming

Well, what language?

I actually JUST got back home about an hour ago from riding on my bike to the library (check out my reply to /u/zabzonk ) for one of if not THEE book that has helped me most when I was first interested in programming.

[Python Programming for the Absolute Beginner, 3rd Edition - by Michael Dawson] (http://www.amazon.com/Python-Programming-Absolute-Beginner-3rd/dp/1435455002/ref=sr_1_1?s=books&ie=UTF8&qid=1405791222&sr=1-1&keywords=python+programming+for+the+absolute+beginner)

The book itself has a "fun" writing style, at least enough to make me engaged in the reading, the examples are easy to understand, and it helped me grasp basic concepts very quickly. Also, Python 3 itself if a really solid pick for a first language IMO.

Really though, check out tons of books on one language, even if you don't read them all, you can sample a bit of each to see which one you want to read. And if you don't understand something, try reading it in one of the other books to see if you understand THAT example. It might also help you a little bit to pick up a book on a DIFFERENT language, in my case I REALLY started grasping concepts when reading [Beginning Programming with Java For Dummies - by Barry Burd] (http://www.amazon.com/Beginning-Programming-Java-Dummies-Burd/dp/0470371749/ref=sr_1_4?s=books&ie=UTF8&qid=1405791600&sr=1-4&keywords=Java+for+dummies) because his writing style was really entertaining and had me entirely focused and learning the whole time.

In the end, I still can't code much worth 2 cents, but I've touched on C++, Python, Java, and C# now and really understand the concepts of programming without having programmed much of anything. I'll tell you right now the reading is important, but PRACTICE. MAKES. PERFECT.

Read, and code every example in the book and try to put your own twist on it. Once you understand a little, try for a simple idea you have in mind, maybe a Dice Roller with X amount of dice and X amount of sides? Maybe tic-tac-toe? Whatever sounds like a fun little project, try to make it as you learn. And any GUI (graphical user interface) programming is best saved for last, learn how to code before you learn how to make pretty menus.

u/CodeTamarin · 2 pointsr/learnprogramming

Umm this might become specific...

So Clean Architecture got me thinking a lot about code structure at a macro level, which is really important for development. It's a good beginning to understanding architecture but definitely not a definitive reference.

I would likely suggest any book that helps you understand your tech stack at a deeper level. If your goal is to say, be a lead developer, for example. Often the role of a lead is to support team members who are stuck.

So understanding the tech stack is important. For me, I got C# in a Nutshell. (I would suggest you getting the nutshell equivalent of your tech stack). It's important and it let's you understand what's happening under the hood.

Learn Algorithms in 24 Hours was a nice little primer on data structures and algorithms. While by no means a "revolutionary" book, it was useful in understanding what structures solved which problems.

So here's me answer:

If you're trying to get better at your stack: Get the Nutshell version of your language. Or buy a book on the framework your on.

If you're trying to just be a better computer scientist... I would learn Design Patterns (you noted this), then Architecture (Clean Architecture and then Patterns of Enterprise Application Architecture) then you're going to need to understand how to solve scaling problems. So Data Structures and Algorithms. This is hard because what book you want depends on your comfort with math.

For me, the biggest impact book, was design patterns. Then it was all the tech stack stuff that helped. Then finally, architecture books. The Martin Fowler architecture book was useful with design and thinking about how to handle saving data.

But it's really going to boil down to what you want to do with your career long term.

u/cl3v3rgirl · 2 pointsr/learnprogramming

You want to learn about design patterns. This repo has very nice code examples of many popular patterns that you would be asked about in a software engineer interview:
https://github.com/gennad/Design-Patterns-in-Python

Do further research on each pattern to have it explained. Just follow whichever article helps you understand the concept, language doesn't matter.

This book made everything click for me.

http://www.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330

While yes, it's in ruby, it's great for anyone who just wants to learn how to code easily maintainable projects. The wisdom in this book is beyond any language.

Coursera is a great resource as someone else has already mentioned.

http://pyvideo.org/ is an excellent resource if you want to just watch a talk. While there's a lot of Python, there are many talks on various generic subjects like you're looking for.

Edit: autocorrect

u/ziptofaf · 2 pointsr/learnprogramming

>is book could have been useful also for C++ real-time programmers of course because i would include also HW information used in that field.. probably I'm asking too much now..

It wouldn't be. You misunderstand how that field of programming works. Differences can be HUGE and you would end up using at least something like https://www.amazon.com/Computer-Organization-Design-MIPS-Architecture/dp/0124077269.

Why? Because hardware used there can be fundamentally different than your typical computer. How much? Well... some CPUs don't support recursion. No, really. Do more than 2-3 recursive calls and CPU rans out of memory. You also end up using FPGAs and ASICs. To explain all that is way more than a book.

You seem to want a hypotethical book on "current PC hardware and it's performance". Which frankly is not in a form of a book but comes from visiting places like Guru3d and anandtech. Actual low level differences that WILL matter for a programmer are hidden in CPU specs sheets and to read that you need resources that target computer architectures and your problem domain specifically. Well, that and practice really - someone working in game engine development is likely to know graphics pipeline like the back of their hand and can easily talk about performance on several GPUs and pinpoint what makes one better than the other. But that came from experimenting and plenty of articles, not a singular resource. Too many different requirements really to create a single resource stating that "X is good for Y branch of programming but bad for Z".

I mean, even within desktop CPUs themselves. Would you rather have a 14 Core i9 9980XE or a 32 core Threadripper 2990WX? Answer is - it depends. One has far superior single threaded performance due to higher clock, the latter will eat it alive in heavily multithreaded and independent processes (2990WX has 32 cores but only 16 are connected to the rest of your computer, this can cause very visible delays so there are multithreaded scenarios when it will underperform). And in some cases you will find out that an 8-core 9900k is #1 in the world. It ALL depends on a specific application and it's profile.

u/balefrost · 1 pointr/learnprogramming

I only skimmed your code, because there's a lot of code there.

In general, there are two ways that threads communicate with each other:

  1. Setting state that is visible to the other thread
  2. Waiting for signals

    In fact, most concurrency constructs involve both. For example, a Semaphore class depends on all threads being able to see the number of available permits and, if no permits are available at the time that acquire is called, depends on being signaled when a permit is made available.

    Concurrency is hard to get right, even for developers with a lot of experience. It's easy to write code that appears to work, but which has a hidden concurrency bug. I'd posit that the mental model that most developers have about memory visibility in Java isn't quite accurate.

    For your case, probably the easiest approach is to use something like a BlockingQueue (perhaps in the form of a LinkedBlockingQueue or, if you know you can process messages faster than they arrive or are OK with dropping messages, an ArrayBlockingQueue). Have threads communicate by sending messages to each other through these queues, and otherwise share as little state as possible. Make sure that each thread does periodically check its queue for more messages. This is the model adopted by other programming languages that emphasize concurrency, like Erlang and Go.

    For more information, the book Java Concurrency in Practice is excellent. I highly recommend it.
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/bradcliffe · 2 pointsr/learnprogramming

It will probably serve well enough off as a starting point. It looks to cover a broad range of topics as they pertain to computing, so it certainly wouldn't hurt if you're unfamiliar with those concepts listed in the syllabus. Perhaps such a broad exposure might help some particular facet of computer science really stick out to you as a road you'd like to travel down.

What concerns me is that the course is taught using a stripped down version of JavaScript. I'm not exactly sure what is meant by this--if it's an actual variant of the language or just a "don't bother setting up the template, here's the snippet for this exercise" type deal. CodeAcademy does a lot of the latter--which is fine, but again can leave you with a sense of doing something without truly knowing how to pull all the pieces together.

If you're set on learning just the language of JavaScript really well, bookmark 'JavaScript Is Sexy'. It's maintained by a fellow Redditor and has proven a comprehensive approach to learning the language correctly. Of the two books he recommends, you're definitely better off getting Professional JavaScript for Web Developers by Zakas. Follow the course and advance through it the later stages of intermediate and advanced JavaScript. By then you should be feeling comfortable enough to dabble. Then start looking at frameworks (Ember.js, Angular.js, Knockout.js, Backbone.js) and possibly some server-side stuff like Node.js.

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/samort7 · 257 pointsr/learnprogramming

Here's my list of the classics:

General Computing

u/UpAndDownArrows · 3 pointsr/learnprogramming

First time see that site, but I would recommend reading:

u/mayonuki · 1 pointr/learnprogramming

Invest in Kochan's Programming in Objective-C. One of the best programming books I've ever read.

Then once you have good unserstanding of Objective-C's syntax and data structures, I recommend iOS Programming: The Big Nerd Ranch Guide.

I went from no experience with Objective-C to getting hired as an iPhone programmer in a month and a half reading these books.

After these, when I come across something I don't know how to do, I usually look here first: Ray Wenderlich. Their tutorials are very very current. I go through them just to learn about iOS/Xcode features I didn't even know existed (there are tons!!).

I've tried (sometimes successfully) learning programming languages from free online resources (especially when I can't find good books), but I really think you shouldn't miss out on these. The cost is pretty minimal considering you just bought an Apple computer.

This kind of object oriented programming is pretty different from the web languages you have gone through. I think the first two books should help you get a basic understanding of Model, View, Controller design.

Finally, use a better title when asking for help!

u/beeb2010 · 2 pointsr/learnprogramming

Objective-C is a superset of C and so has a C base, although the syntax is different (mostly).
There are a few frameworks in Apple's library which are written in C but you may not need those.

I would recommend you use a game engine to write your game - particularly Cocos-2d, as it makes development quicker and easier.
As a previous poster has mentioned, Ray's website is very good at learning IOS programming and it also has good sections on Cocos-2d.

As for books, I can recommend: (I'm in the UK so I'll use amazon uk links).

http://www.amazon.co.uk/Learning-Cocos2D-Hands--Building-Addison-Wesley/dp/0321735625/ref=sr_1_1?ie=UTF8&qid=1367517122&sr=8-1&keywords=cocos2d (Ray's own book)

http://www.amazon.co.uk/Learn-cocos2d-Game-Development-iOS/dp/143024416X/ref=sr_1_2?ie=UTF8&qid=1367517122&sr=8-2&keywords=cocos2d

Objective-c
http://www.amazon.co.uk/Programming-Objective-C-Automatic-Reference-Developers/dp/0321811909/ref=sr_1_5?s=books&ie=UTF8&qid=1367517200&sr=1-5&keywords=ios+programming

Plus there are LOADS of good tutorials online.

u/thiswillspelldoom · 0 pointsr/learnprogramming

You need this: http://en.wikipedia.org/wiki/Software_design_pattern

More specifically you need to develop good understanding not only of what design patterns are but also...

  • how they describe a problem and a solution in abstract terms
  • how you can identify when your problem can be described in more abstract terms that has a design pattern solution
  • how you can modify design patterns to accommodate irregularities and inconsistencies in your problem, and when you should instead modify the problem to accommodate the design pattern

    These things can take a long time to get used to. Object Oriented is a very useful paradigm to work in but it is, in itself, a design pattern. It is also useful to know when you are better off not doing things in an object oriented way.

    But probably the most important bit of advice, and the thing that helped me to properly understand OOP is unit testing, and how to do it properly. If you haven't yet read it, then read this book and apply what it teaches you in your projects. Learn to use a good testing framework and a good mocking framework (in c#, for example, my preference is for Moq and NUnit) and learn to express yourself in test code. Learn also about dependency injection. These testing techniques, and the TDD story, will guide you not only in writing the units of your project, but also in architecting it and letting testability guide the design. Once you see how the design of your code is affected, you'll start to understand OOP a lot more, and also the finer points of the design patterns you want to implement.

    Good luck :)
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/YourTechnician · 1 pointr/learnprogramming

ok so at school we worked with Big Java . Good book for beginners but it doesn't seem as comprehensive. Thinking in Java is the best book in my opinion, it is covers an insane amount of topics, but it is more of a challenge in case you have a short attention span (it tends to be more serious than the others, rendering it more boring in return).
Now in case you want something more playful Head First Java is a fun one, it uses pictures , and jokes and uses day to day examples in order to make things stick better to your brain. In case you find that kind of stuff better, than it is recommended, but it does cover less than both of the predecessors.

For later inquires, you can check out the books on this list

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/caryy · 5 pointsr/learnprogramming

In addition to Code Complete 2, which, while very dense, is a compendium of wonderful coding knowledge... I recommend Clean Code by Robert C. Martin.

One of the best books on concurrency that I've ever read is definitely Java Concurrency In Practice it's (obviously) written with Java in mind, but most of the concepts map rather easily to constructs in other languages as well.

The standard for design patterns is still probably Design Patterns (colloquially "Gang of Four")... but I've heard good things about Head First Design Patterns as well, despite the really stupid cover.

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/seg-fault · 2 pointsr/learnprogramming

No problem. I think I answered all of your questions, then, but if you're still a bit shaky on anything, don't be shy to ask more questions.

If you're serious about good user interaction on your sites, I highly recommend JavaScript. I was in your boat too for a while. I didn't find any value in JS beyond making quick popups or input validation.

However, after working at my current job where I did much more client-side programming in JS, I truly appreciate the value of the language. It has evolved far beyond its initial intentions.

If you want to be a real JS guru, read this book cover to cover. Even if you don't want to be a guru, it is a very helpful reference:

Professional JavaScript for Web Developers

u/cheeseboythrowaway · 1 pointr/learnprogramming

I tried to learn Python like 3 or 4 times when I was in IT and it didn't ever click in my head until I read this book. For some reason, the way the author explains things just made sense to me.

https://www.amazon.com/Python-Programming-Absolute-Beginner-3rd/dp/1435455002/ref=sr_1_1?ie=UTF8&qid=1522440046&sr=8-1&keywords=python+for+the+absolute+beginner

Each chapter is a project, and it's focused on simple games. I like it especially for that reason; I think that working on projects is the best way to learn programming.

Once you get the basics, the hard part is coming up with projects to work on, but there's a lot of resources on Reddit and other places to get you started and working on open source projects is a great way to go as well. Doesn't really matter what the project is, just that you're interested in it.

Don't forget to look into Linux stuff too; my Linux skills reaaaaallly helped me when I was first trying to get programming jobs.

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

Do you have anything specific you want to improve on?

Here's a few that I liked that are specific to Java:

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

Based on my previous experience with Head First books, I'd recommend Head First Python. Out of the three reviews on the main page on Amazon, the bad review is complaining about it not being "deep enough" for an experienced programmer. I have to say, the Head first series is kind of fun. (Geeky jokes, cool exercises, etc).

Python Programming for the Absolute Beginner, 3rd Edition seems to have decent reviews too.

Dive Into Python if I remember correctly assumes a little bit of experience from the reader. But it's a very good book.

I know that you are looking for something structured to pass on... but don't forget that the best thing you can "teach" is how to look things up.

Also, OCW (MIT) has a class on iTunes/YouTube on programming concepts with python. Definitely worth the time investment.

u/dmazzoni · 1 pointr/learnprogramming

Oops, I meant "writing", but I meant that you should write programs to solve tutorial exercises. You can't learn to program just by reading, you have to practice it.

From what I've seen of CarlHProgramming tutorials, they're great! I would highly recommend starting there over K&R. (Do read K&R, but read it in a month or so, after you've tried programming a while.)

Or, any book that teaches programming and not just the C language would be good, for example:

http://www.amazon.com/Absolute-Beginners-Guide-C-2nd/dp/0672305100/ref=sr_1_1?ie=UTF8&qid=1288834345&sr=8-1

http://www.amazon.com/Programming-3rd-Stephen-G-Kochan/dp/0672326663/ref=pd_cp_b_3

u/wcbdfy · 1 pointr/learnprogramming

Programming in Objective-C by Stephan Kochen is an excellent intro/reference with detailed and clear explanation of Objective-C (the language you will be using).

You should also get the Big Nerd Ranch Guide to iOS programming for things specific to the iDevices.

Apple's developer reference/wiki covers everything else and is also pretty detailed. Stanford's iPhone development video lectures are okay, but I can see how they come in handy to someone who is just getting started.

You will need a mac (of course) and Xcode, and if you haven't used that before, you will need to get comfortable with it. You will need Xcode for many of it's features but if you are not a fan of the IDE and wish to use an editor for simpler things, many support Obj-C syntax highlighting.

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/LXXXVI · 2 pointsr/learnprogramming

Thanks, I'm sure you will. It's just a question of getting that first success. Afterwards, it gets much easier, once you can point at a company and say "Their customers are using my code every day."

As for the interviews, I don't know, I'm honestly not the type to get nervous at interviews, either because I know my skill level is most likely too low and I take it as a learning experience, or because I know I can do it. I'd say that you should always write down all the interview questions you couldn't answer properly and afterwards google them extensively.

Besides, if you're from the US, you have a virtually unlimited pool of jobs to interview for. I live in a tiny European country that has 2 million people and probably somewhere in the range of 20 actual IT companies, so I had to be careful not to exhaust the pool too soon.

Funnily enough, right now, my CTO would kill for another even halfway competent nodejs developer with potential, but we literally can't find anyone.

Anyway, I'm nowhere near senior level, but I can already tell you that the architecture:language part is something your bootcamp got right. To that I would add a book my CTO gave me to read (I'm not finished yet myself, but it is a great book) - Patterns of Enterprise Architecture. Give it a look. I suspect, without ever having tried to implement a piece of architecture like that, it won't make much sense beyond theoretical, but I promise you, it's worth its weight in gold, once you start building something more complex and have to decide how to actually do it.

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

The short answer:

Try this book

Oracle's Java site is a pretty good resource too.

Now the long answer, you probably do not want to hear:

The amount of time and effort you will invest in your education will probably reflect on the level of professional you will become. Learning a programming language is just a small part of the knowledge you need to acquire to become a good software developer. Just like learning to operate a video camera will not make you a successful filmmaker.

Although school is not the only way to become a programmer, it forces you to visit a vast pool of concepts including design, testing, analysis, algorithms, data structures, memory management, concurrency and many more. This exploratory process forces you to take a peek on many areas of software development that you will likely never visit otherwise; this is an important exercise not only to be successful at this trade, but it will also help you discover new areas of interest.

If time is not on your side, at least try to emulate a college curriculum when doing your online self training. Do not stop at learning the language, dig much deeper.

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/CodeBlueDev · 4 pointsr/learnprogramming

A lot of these are known as "Code Smells". Learn to identify them and try to fix them.

Other good books that may help you:

  • Refactoring
  • The Clean Coder

    Use something like StyleCop or Linting which are supposed to check and compare your code against best practices.
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/jh1997sa · 1 pointr/learnprogramming

It doesn't matter how old you are or whether you can afford classes or not, you can learn to program. There are tons of resources online for learning a programming language. If you're wanting a book you could buy the book from amazon or something or you could download an ebook from somewhere for free (hint hint)

Here's a few good books for different languages:

Learning Python - Python

Beginning Java - Java

C++ Primer - C++

If you don't like reading books then a lot of people like thenewboston although I've watched a few of his videos and he teaches some bad coding habits.

If you need any more help, feel free to PM me here on Reddit or email me @ [email protected]

btw, I'm 16 ;)

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

I had done just a little bit of Python (like, a few weeks of tinkering) before I got started with Objective C. I read some of Kochan's book Programming with Objective C whilst also reading some of Learning Cocos2D, but ultimately I just started playing, getting stuck and hitting the interwebs to get unstuck (reading lots, not spamming forums). I'm about 8 months in and I think I'm about 3 months from releasing my first game.

With my limited experience my advice would be to pick a simple project that you're genuinely interested in, chop it up into little problems / tasks, and work through them. If you're totally stuck, you probably need to cut that task up into smaller pieces. Work hard, read a lot, take a break occasionally, write a blog or diary so you can track your own progress, and have fun!

Starting iOS development is one of the best things I've ever done, although I'm not sure the missus would agree!

u/hjslong · 2 pointsr/learnprogramming

Hi, I'm also still struggling about this, turns out that software architecture is really hard!

I haven't finish this book yet, but I still found so much useful information on it that I can fully recommend. I never programmed on ruby yet the book is easily one of the best that I have ever set my eyes on. You should give a try.

https://www.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330

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/jetsonian · 3 pointsr/learnprogramming

One thing to keep in mind is that iOS (and Mac OS) apps are written in Objective-C. Learning ANSI C is fine, but you'll learn most of it while learning C++ anyways.

If you have programmed before, my suggestion is to grab this book. It's a great resource and gets you started with objects right away, which is a good thing.

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/cparen · 6 pointsr/learnprogramming

Taking in mind that you may not have access to a computer:

If you've got no background already, I'd recommend The Little Schemer / The Seasoned Schemer books as they teach programming as if it were arithmetic, so it can be studied without a computer, working out the examples with pencil and paper or just very carefully in your head -- the examples are all very small, and worked through step by step. It moves very slowly though.

If you're looking for something more advanced, there is Structure and Interpretation of Computer Programs (SICP) which again takes a mathematical approach to computing, so the examples are meant to be just as well worked out like algebra as they are put into a computer. It helps a lot to have a computer, but I had fun working through it on a long plane flight, taking notes and working through the code on paper.

SICP's examples can all be worked through on a single sheet of paper, but ramp up quickly in difficulty, so they can definitely keep you busy.

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/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/Chaseshaw · 32 pointsr/learnprogramming

honestly, pick up this book. it'll up your professionalism a great deal. part of the responsibility of a good coder is to be able to push back to management. not rudely, but they make their money decisions based on tech they don't know, and it's your job to make sure they understand what's possible and what's not instead of just rolling over and taking it.

u/keltor2243 · 1 pointr/learnprogramming
u/farmerje · 5 pointsr/learnprogramming

I recommend Practical Object-Oriented Design in Ruby (aka POODR) and Eloquent Ruby.

I'm expert at C, Ruby, and Python, so if you post code examples of Ruby code you feel isn't idiomatic to gist.github.com I'm happy to take a look and offer feedback. I co-founded Dev Bootcamp, so I'm also familiar with the bumps along the way folks have when learning Ruby, even (and sometimes especially) if they're coming from another language.

The main thing to understand about Ruby is that everything is an object. To wit,

Foo = Class.new
foo = Foo.new
puts foo.object_id

Particular classes are instances of the class "Class," if you can wrap your head around that. Objects talk to each other by passing messages around, i.e., methods. In fact, you can define methods on individual objects (although nobody ever does this):

name = "Jesse"
def name.bark!
puts "woof woof"
end
name.bark!

But this is what's happening when you see code like

class Foo
def self.bark!
puts "woof woof"
end
end

The "self.bark!" sometimes seems like arbitrary syntax used to define class methods (or static methods as they're called in some OOP languages), especially to people coming from Java where you have these seemingly-magical keyword preludes. In Ruby you just define methods on objects, period. Classes are objects, too, and "def self.whatever" is the same as "def Foo.whatever". There's a nice nod to referential transparency there that you don't see in many OOP languages.

Every method is defined on some object, even "global" methods. Exercise: when you define a global method in Ruby what object does it get defined on?

When you need higher-order functions Ruby uses blocks, which are more like functions in JavaScript than lambdas in Python (e.g., they can contain arbitrary code, not just a single expression).

If you understand those three things -- everything is an object, objects communicate via messages called "methods", higher-order functions can be defined using blocks -- you understand about 95% of how Ruby thinks about the world.

I'll add, just because you're a C guy, Ruby "pretends" it doesn't really have a class/object distinction, but the default Ruby interpreter (MRI or sometimes CRuby) does actually have separate structs for classes and objects. It's really a language-level thing.

u/AsteriskTheServer · 1 pointr/learnprogramming

IMO the best book that gives an general overview of computer architecture is the book Computer Organization and Design by David A. Patterson and John L. Hennessy. That being said this is a difficult book. However, it goes over how memory hierarchy works to virtual memory to even showing you the data path of how instructions are executed. Is this is going to tell everything you need to do pen testing and so forth?. Not a chance.

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/slowfly1st · 2 pointsr/learnprogramming

Your foes are kids in their twenties with a degree which takes years to achieve, this will be tough! But I think your age and your willingness to learn will help you lot.

​

Other things to learn:

  • JDK - you should be at least aware what API's the JDK provides, better, have used them (https://docs.oracle.com/javase/8/docs/). I think (personal preference / experience) those are the minimum: JDBC, Serialization, Security, Date and Time, I/O, Networking, (Internationalization - I'm from a country with more than one official language), Math, Collections, Concurrency.
  • DBMS: How to create databases and how to access them via JDBC. (I like postgreSQL). Learn SQL.
  • Learn how to use an ORM Mapper. (I like jOOQ, I dislike JPA/hibernate)
  • Requirements Engineering. I think without someone who has the requirements you can't really practice that, but theory should be present. It's a essential part of software development: Get the customers requirements and bring it to paper. Bad RE can lead to tears.
  • Writing Unit Tests / TDD. Having working code means the work is 50% done - book recommendation: Growing Object-Oriented Software, Guided by Tests
  • CI/CD (Continuous Integration / Delivery) - book recommendation: Continuous Delivery.
  • Read Clean Code (mandatory!)
  • Read Design Patterns (also mandatory!)
  • (Read Patterns of Enterprise Application Architecture (bit outdated, I think it's probably a thing you should read later, but I still love it!))
  • Get familiar with a build tool, such as maven or gradle.

    ​

    If there's one framework to look at, it would be spring: spring.io provides dozens of frameworks, for webservices, backends, websites, and so on, but mainly their core technology for dependency injection.

    ​

    (edit: other important things)
u/eric_weinstein · 2 pointsr/learnprogramming

C books I've found useful:

Beginner

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/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/N-Dufva · 2 pointsr/learnprogramming

Automate the Boring Stuff with Python Is also something you might want to look into. It is a little bit easier than "Python the Hard Way" in my opinion but reading both at the same time is completely doable.

Edit (added this after a bit of thinking):

For CS in general there are a couple of answers, the first is sadly to give up on reading coding literature on the kindle. Most books will make the code unreadable. But that doesn't mean that there aren't things to read related to programming. My first suggestion would be The clean Coder.

But if you are willing to remove yourself from the kindle I have two more suggestions.

First "The Art of Computer Programming" is the extreme answer. It consists of several books and I have tried going trough it multiple times without success. But each time I open the any of the books in the series I learn something new. But the books should come with big warning, these are not easy to read.

Second I would go trough the CS50 course on edX.com, simply put it's the best introduction to CS available, and it is can be accessed for free.

u/ladywanking · 2 pointsr/learnprogramming

You are asking a good question.

Wouldn't doing a separate class for each of the use cases you described be repeating yourself?

I would read about DTO and see how it goes.
A good book about this is this.

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

Learning Python is honestly the only thing I can recommend. Whether you already know a programming language or not, it is the most comprehensive resource for truly understanding Python from the bottom up.

I've looked at a lot of the other resources suggested in this subreddit and they teach you how to use Python but not how to use it and understand why it works the way it works.

u/Mikiz · 1 pointr/learnprogramming

the 2 i used are eloquent javascript http://eloquentjavascript.net/ . There is a pretty big leap in complexity when it comes it chapter 6. Don't worry if it goes over your head if youàre completely new. It has an epub free download you can convert to mobi for kindle or a kindle version on amazon.

Professional JavaScript for Web Developers http://www.amazon.com/gp/product/1118026691/ref=s9_simh_gw_p14_d0_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=0GCE9EKQN5N6N9W1HNNS&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop is a more indepth book on JS. Explores everything with good examples but doesn't have exercises. I recommend it as a second book.

u/ayequeue · 6 pointsr/learnprogramming

If you're trying to learn any assembly language (not specifically x86 based) I know there are several books out there for MIPS. I've used [Computer Organization and Design] (http://www.amazon.com/Computer-Organization-Design-Fifth-Edition/dp/0124077269/ref=sr_1_1?ie=UTF8&qid=1396238245&sr=8-1&keywords=computer+organization+and+design) by Patterson and can say I found it very helpful. On top of that, [MARS] (http://courses.missouristate.edu/kenvollmar/mars/), a combination IDE/emulator can be used with it (and is open source/free).

u/joeverdrive · 1 pointr/learnprogramming

Python Programming for the Absolute Beginner by Michael Dawson

So easy to read, and he makes every step into a game. Worth much more than $20. Khan Academy has Python lessons, too, I think?

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/Opheltes · 3 pointsr/learnprogramming

Patterson and Hennessy's textbooks, Computer Architecture and Computer Organization and Design are pretty much the standard textbook used in every computer architecture class, everywhere.

u/NightweaselX · 0 pointsr/learnprogramming

If you can find this book
https://www.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330/ref=sr_1_2?ie=UTF8&qid=1524292880&sr=8-2&keywords=object+oriented+ruby
That's what finally made it click for me. It's short, good, and Ruby is simple enough you can understand what's going on without knowing the language. And since you're just wanting to reinforce the concepts, you don't really need to code a long in Ruby, you can do it in Java or whatever you want.

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

I suggest that Oracle's tutorials together with this book is good starting point
http://www.amazon.com/Thinking-Java-Edition-Bruce-Eckel/dp/0131872486
Also check out this video tutorials: https://www.youtube.com/playlist?list=PLE7E8B7F4856C9B19

Not the op

u/erikvillegas · 3 pointsr/learnprogramming

I've heard good things about a book called Clean Coder that might answer some of your questions. I've been meaning to read it myself.

u/drLagrangian · 1 pointr/learnprogramming

I did this in 15 minute chunks on my breaks. I used /r/inventwithpython a free web book to get started.

I used http://www.amazon.com/Learning-Python-Edition-Mark-Lutz/dp/1449355730 to get a primer on all the hard core stuff.

and then I just started browsing /r/learnpython , /r/python , the python.org docs and practicing my own stuff.

and all of it 15 minutes at a time.

u/POGtastic · 2 pointsr/learnprogramming

SICP is definitely useful for pretty much everyone. It's also free, although you can get the paper copy with the famous cover if you really want to.

Note that all of the examples are in Lisp, which is weird and scary to newbies. Since it's a functional programming book, you'll find that it approaches programming very, very differently than other tutorials and books, which cover imperative programming.

---

Sipser and its ilk aren't really useful outside of the classroom. I think that Theory of Computation is important for people to learn, but it's not really relevant to programming in general.

u/wcastello · 3 pointsr/learnprogramming

Structure and Interpretation of Computer Programs (SICP) is still one of my favorites.

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

I learned Java when it first came out, and I had a good background in C++. Back then, there weren't a lot of tutorials on the web, but there were books, and most of them were oriented to C++ programmers. You might want to look at Thinking in Java.

u/whattodo-whattodo · 1 pointr/learnprogramming

If it has to be a book, my only advice is do the opposite of what I did. I got Learning Python, 5th Edition, which is a huge, dry book. It's great, but it was daunting & more than was even good for me to know about at the time. I would suggest any guide meant for beginners.

I should mention that Learn Python the Hard Way & Automate the Boring Stuff with Python are the standard suggestions. I still suggest a beginner's book, but this is what the community likes.

That being said, I usually insist that people follow this order.

1) CodeAcademy's course on Python

a) It only teaches you things that are essential.

b) It provides you with an editor & a runtime environment. These two steps may become a little confusing later, but it's good to not have to tackle them all at once.

c) It provides training that is still hands on

Note: I specifically suggest doing the course more than once. As many times as needed to feel excruciatingly bored and unchallenged by it.

2) Lynda's Learn Python 3 Standard Library. It is free through the Public Library. It is a series of videos so it is not hands on, but it helps you see what is possible before you're able to write it. Knowing what is possible is a big part of the process. Once you know what is possible, the how is often mostly irrelevant & figured out with Google.

Note: I specifically suggest watching the videos more than once. As many times as needed to feel excruciatingly bored and unchallenged by it.

3) Only here do I usually suggest a book. Any book will do, but once you're swimming in ideas & have been prepped & re-prepped. You should be ready to go.

There is a very good chance that installing Python, picking en editor & running the code will give you a hard time. Python is a pain to set up in Windows the first time you do it. Though, if you're running Linux, it's seamless. Once you get here reach out to me (or /r/learnpython). There are some tricky steps, but once you're up and running, you won't look back.

Good luck. If you have any trouble with any part, shoot me a message.


Edit: I like this guy's setup too. https://www.reddit.com/r/learnpython/comments/6f7ybq/_/dig45b0?context=1000

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

You mentioned in another post that you liked the whole learning while making games process. I suggest you check out Python Programming for the Absolute Beginner (2nd edition covers Python 2.x, 3rd edition covers Python 3.x). It teaches you by building games and covers quite a lot of areas in pretty good detail from what I have heard.

If I was to suggest one thing to you it would be try not to focus too much on the material you are learning from but more on what you are learning. What I mean is don't ditch a book because you read online that it wasn't very good. The majority of people who give feedback about books don't even finish them in my experience. Obviously don't buy a book that is totally hated by almost everyone but don't be put off because a very (very vocal!) people on reddit say it is crap.

Also second bit of advice, once you are comfortable with Python check out PyCharm :)

Amazon.com link to book

u/interiorcrocodile666 · 1 pointr/learnprogramming

Sounds like you need to read a book on Computer Organization and Design. This book will teach you how to build a computer from basic logic gates. I can't recommend it highly enough.

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/vix86 · 2 pointsr/learnprogramming

If you are using concurrency a lot then it might be worth it to take a look at: Java Concurrency in Practice (I believe that's the book I've seen recommended before.)

It's a little old but still mostly valid.

u/Unfunny_Asshole · 1 pointr/learnprogramming

I second this.

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

u/j-dev · 4 pointsr/learnprogramming

There are books out there, many of which are unfortunately not language agnostic, that deal with this. What you want to know is the basics of object oriented design and, most importantly, design patterns, which are general answers for recurring object-oriented design challenges. You may have to dabble into languages other than the one(s) you currently use in order to follow along.

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

Have you tried searching Discrete Mathematics?

Discrete Mathematics

Concrete Mathematics

These should cover everything you need to learn an way way more.

u/NicolasGuacamole · 1 pointr/learnprogramming

Buy this book and read them a chapter every night as a bedtime story. It has wizards and suchlike so is very workable for children.

SICP

u/proginprocess · 1 pointr/learnprogramming

Currently Reading:
JavaScript - Professional Javascript for Web Developers

Software Design - Clean Code

Later on, I'll be reading this for Data Structures and Algorithms:
Introduction to Algorithms

Don't know what I'll do for a specific language later on. Probably go back to C# and see what I can churn out there.