(Part 2) Best products from r/learnprogramming

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

Top comments mentioning products on r/learnprogramming:

u/CSMastermind · 4 pointsr/learnprogramming

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

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

Job Interview Prep


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

    Junior Software Engineer Reading List


    Read This First


  10. Pragmatic Thinking and Learning: Refactor Your Wetware

    Fundementals


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

    Understanding Professional Software Environments


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

    Mentality


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

    History


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

    Mid Level Software Engineer Reading List


    Read This First


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

    Fundementals


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

    Software Design


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

    Software Engineering Skill Sets


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

    Databases


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

    User Experience


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

    Mentality


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

    History


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

    Specialist Skills


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

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

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

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

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

>Can somebody please guide me on where to start?

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

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

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

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

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

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

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

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

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

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

In almost every field, you're going to end up dealing with groups of things - lists of contacts, groups of users, categories of billing items, whatever. Having a deep understanding of arrays vs. (hash) sets vs. (hash) maps is huge, by far that's the most common decision I make on a day-to-day basis.

I think it's worthwhile to expose yourself to a bunch of specialized algorithms and data structures. You don't need to study them all super in-depth, but reading about them and maybe hacking them out in Python/Java/C++/whatever is a great learning exercise. I personally like "The Algorithm Design Manual" by Steven Skiena, (EDU PDF, Amazon). It's on the dry side, but it categorizes algorithms into a handful of types (sorting, graphs, combinatoric search, etc) which makes it great reference material for learning.

A handful of useful exercises, maybe useful:

  • Quicksort (and why is it faster than a trivial sort like selection sort? Explain it like I'm five)
  • Caching! Also, how it makes pure functions preferable to unpure ones for expensive code.
  • Implement a Fibonacci function, and describe why the recursive solution is terrible (hint: draw out each function call for a number like 10). This is a great exercise in runtime analysis. Implement it better and know why your second shot is better.
  • Graphs manage to sneak into all sorts of places - knowing Dijkstra's algorithm by heart probably isn't important, but being comfortable with graphs is valuable. Many problems can be thought of as transforming data from group A and B into C, and thought of as information travelling through a graph, being changed at each node. The graphics pipeline used for 3D graphics is a fun example of an application of this idea.
u/theofficialLlama · 0 pointsr/learnprogramming

If you can afford it I'd highly recommend this course on udemy. Its $35 but theres always tons of udemy coupons floating around. I've been working through it and it definitely has helped me get a better understanding of both the front end and back end in web development since there's code alongs, exercises, quizzes, and you even make a bunch of small websites as well as a couple of actual web applications. That being said I'm not affiliated with it in any way. Just sharing what Ive been using to learn and its been very helpful.


Also there's tons of books available both paid and free.
As other people have mentioned, Duckett's books on html, css, javascript, and jquery are very beginner friendly with colorful and easy to understand material.

This is a good one that I've been going through to learn about UI/UX and the overall look and usability of your website. It basically teaches you how to make your website more approachable to whoever is navigating it.

I don't think anyone else has mentioned it but Udacity also has tons of free content, a large majority of it being web development and programming courses.

Other than that you're honestly going to just have to start messing around in a code editor and see what does what. Come up with an idea and really just start trying to code it. It could be a small one pager or it could be the start of your web development portfolio. A big thing that I've come to learn is that when you decide that you want to build something and you have no idea what you're doing, grab a good old pen and paper and write down or sketch what you want to do. Sketch what you want your page to look like. Then figure out how to code it. And if you get stuck google is your best friend. Break down what you want to do into smaller manageable chunks, do one thing at a time, and don't be afraid to get your hands dirty. Being a computer science student, this is the best advice I can give you when it comes to learning this stuff.

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

Being fond of problem solving is a good indicator. Problem solving and executing a solution is essentially what programming is all about in the end. Pretty much any engineering degree for that matter. The good news is most STEM courseware is pretty much the same the first couple of years of college so you won't really have to commit straight away. Your classes will apply to multiple degree paths and having a few intro compsci courses under your belt will help in literally any major.

A computer science degree is (should be) geared to problem solving more than learning to write code. Writing code is the easy bit and the tech changes so quickly it is something best learned on the fly. You will be taking tons of math, studying algorithms, data structures, learning to play well with others -- that sort of thing.

Being fond of computers alone can lead one astray. The classic example is that liking listening to music doesn't necessarily lead to liking making music.

The Harvard cs50x extension course will give you a straight up taste of what an intro to CS class will be like in university. The pace is fast so fair warning.

A good armchair book is CODE. Nice overview of how computers compute.

It's a great career choice IMO. I've been at it for a long long (long) time with zero regrets. Along side getting to play with all the shiny bits, you can get a constant supply of feel good moments when you see your work actually doing something in the wild and seeing your work impact peoples lives in a positive way.

u/last_useful_man · 2 pointsr/learnprogramming

I have to say linux profiling has seemed to me to be a fast-moving target, meaning you'll get scattered results if you search. But, there's this which seems up-to-date: http://en.wikipedia.org/wiki/Perf_%28Linux%29

Then there's Ulrich Drepper's 'What every programmer should know about memory' (long series, but worth skimming at least, if your code is memory intensive. At least read about cache-coherency and cache-lines): http://lwn.net/Articles/250967

But the biggest thing is to get the algorithms right. Sounds like you want image-processing books. Also, GPUs are just absolutely the right place to do this stuff, and there are probably libraries already out there for it; speaking of which, did you know about OpenCV? It even has some stuff implemented on the GPU (as CUDA). I root for OpenCL, but the fact is, almost everything out there, libraries, and books, is written for CUDA.

> All the software is written in C++: I am interested in unlearning bad habits and writing better and easier to maintain code.

I suggest Effective C++ if you haven't read it yet. Also, Herb Sutter's 'Exceptional C++' series (a 'digest' version is C++ Coding Standards: 101 Rules, Guidelines, and Best Practices).

Never read it myself, but I hear 'Code Complete' is good. Maybe, too, Martin Fowler's Refactoring book - it shows lots of little awkward, problematic patterns and what to do about them, with good discussion. Each cleanly separated out - it will refer back and forth, but you can read the bits one-at-a-time. Good bathroom reading :)

Re: algorithms: Ugh, I don't know. It sounds like you'll want some metric data structures, dealing with space as you do. There's http://www.amazon.com/Foundations-Multidimensional-Structures-Kaufmann-Computer/dp/0123694469, and I don't know what else, maybe some Knuth? But probably, you should learn undergraduate-level data structures and algorithms, Big O stuff. Any used CS Data Structures + Algorithms book should help with that.

Do not fear spending money, as a former boss said, "books are free" ie they pay for themselves if they save you an hour's debugging later. Good luck!

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

I would cross-post this to /r/cscareerquestions since that's the subreddit that's more career focused.

My recommendation is to start building a coding portfolio. Specifically set up an account on www.github.com and start posting some of your projects there. Basically how github works is after you set up an account you download the client and create a folder on your computer. Any code or documents you put into that folder and then "push" will appear online. This will allow you to have lots of code samples to show a prospective employer. Another good idea is to build your own website. There are a couple of good web hosts such as www.bluehost.com and www.nearlyfreespeech.net. I personally use www.nearlyfreespeech.net because it's very very cheap. (You pay only for what you use and since your website will primarily be used to show employers it will be a few cents a month.)

Once you have a website and Github you'll also want to start studying more and learning more and then creating personal projects. There are a lot of good places to continue learning programming. You could sign up on www.pluralsight.com for their $29 a month plan and then follow along with courses. Alternatively you could buy books about programming and go through them and upload code samples to Github as you go through them. (A strategy I use is to look at books on www.amazon.com and buy used copies or copies that are 1 edition older than the current edition, it is very realistic to get books for $4 including shipping and handling.) There are also many free resources such as www.codeacademy.com.

Some good books you could buy that will help you once you get job interviews are: Cracking the Coding Interview, Programming Interviews Exposed, and Elements of Programming Interviews. Out of these books "Programming Interviews Exposed" is the best for beginners while the other two are more meant to get you ready to interview at huge companies like Google or Microsoft.

As far as projects to do just pick some ideas and implement them. For me personally I made a website (www.cslearner.com) and created my own blogging software. There is better blogging software out there then the stuff I wrote for myself but it beefs up my portfolio and gives me something to talk about in job interviews. One idea may be to make some sort of CRUD application/website. CRUD stands for CREATE, RETRIEVE, UPDATE, DELETE. Since a lot of what we do as software developers is data manipulation you can create some sort of app or website that creates and manages information. In my case the first CRUD thing I created was a comment section using PHP and MySQL. Literally all it did was allow people to post comments on a website and then a SELECT statement would display all the comments that people had left. You could do a similar project. The cool thing about CRUD is that you can build apps using a huge assortment of technologies. You could create a CRUD app using ASP.NET, server side Java(JSP), PHP and MySQL(the LAMP stack), or a bunch of other technologies.

Also a huge thing is to apply for jobs even if you don't feel very ready. Check out this YouTube video in particular. Employers put down a wish list of things they'd like in a candidate but know in advance they won't get everything they'd like. If you seem like someone that could learn the technologies they may hire you even though you don't know everything yet. Also you'll want to apply to a lot of places. I've had 15 job interviews so far (I'm graduating this next April) and I have no job offers yet. This means I have to apply to even more places. Even though Computer Science is a very high demand field job hunting is still hard and you still need to put out lots of applications.

u/kyle_m_adkins · 1 pointr/learnprogramming

Code is also a good book. If you want textbooks:

This is a good one for computer architecture. And there's a companion course/website at www.nand2tetris.org. https://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/ref=ed_oe_p

I like this one as far as operating systems go: https://www.amazon.com/gp/aw/d/1118063333/ref=dp_ob_neva_mobile

For learning programming, I would check out courses at www.udemy.com. But be mindful of ratings & reviews because the quality of courses can vary pretty drastically. But I've had good experiences there. www.udacity.com also has great courses. They offer paid nanodegrees but you can take every individual course free of charge. www.teamtreehouse.com is another good website

If you're interested in networking, this is a good book for starters: https://www.amazon.com/gp/aw/d/0768685761/ref=dp_ob_neva_mobile

Any A+/Network+ certification books or courses would also be a great way to learn networking and computer hardware

Those are pretty big topics in tech & computer science. There's a ton of stuff to learn. I've been studying this stuff for probably 2-3 years and sometimes I feel like I've barely scratched the surface. Let me know if that helps & if there are other topics you'd want book recommendations on! :)

u/protein_bricks_4_all · 3 pointsr/learnprogramming

There's OO design, and there's particulars as to how to implement things in C++. I'm totally with unapersson as to, that the Os you make are as often conveniences or design helpers as representing real world objects. Ie that it's implementation objects. I don't remember how much OO design advice Effective C++ has, but it's a good book to get someone to intermediate C++ programmer. C++ Coding Standards by Herb Sutter and Andrei Alexandrescu talks at a fast clip about a lot of taste and design issues; I haven't looked at the 3rd edition of Eff. C++ but, from earlier editions, the difference is that Coding Standards is more dense, and sophisticated; Eff. C++ more basic (from what I can see, Coding Standards does cover the same material as Eff C++, but in a very compressed form, only the most minimal discussion; maybe not what you want when you're seeing the material for the first time.

As for pure OO design, I've heard that straight-up Grady Booch is still the best, but I have no experience of it.

I will say, if you want to be good at C++, you'll have to spend money on books (but get your company to buy them perhaps - compared to programmer time, books are free), and time on reading them; there are a lot of best-practices, technicalities and real pitfalls that are not immediately obvious.

edit:

> Also, should I be studying data structures/algorithms in unison with OOP?

Definitely. Have you learned the basics, stack, tree, queue, hash tables (or set, map, vector, unordered_set, unordered_map)? You /must/ know these. (priority_queue and list too, less so maybe.) If you can though I'd read (somehow) about other data structures, spatial ones especially in your case; they can really make your program more efficient and thus able to do more.

edit edit:

I have to say, the above books are for long-lasting code; probably for games your best bet is to look at how other programmers write their games (smaller, simpler, even in other languages - it can be hard to understand large, sophisticated codebases) and, just the necessary experience you gain from writing your own.

u/10_6 · 19 pointsr/learnprogramming

Nice curated list, but I'd recommend adding a few more interview prep sites from this list:

The 10 most popular coding challenge websites for 2017

Because I would definitely recommend someone to check out TopCoder, Coderbyte, and Codewars if they are preparing for an interview.

Here are a few resources I've also used when preparing for interviews (taken from previous comments of mine):


  • Read the Algorithm Design Manual.

  • Go through some of the challenges on this interactive python algorithms website.

  • Practice coding simple and then more advanced algorithms on sites like Coderbyte (my site) and HackerRank which provide good explanations and solutions as well. Here's a list of popular coding challenge websites in 2017.

  • Read as many algorithm explanations and code examples as you can on GeeksforGeeks.

  • Try and implement basic algorithms yourself like: shortest path, minimum spanning tree, DFS + BFS, tree traversals, different sorting algs, min/max heap, etc. and learn about their running times (big-o).

  • Look at some interview questions posted on careercup and try and understand how other users solved the questions. Like this example.

  • Aside from coding challenge sites, try and solve common coding interview questions you find online such as this list.
u/PrincessSmaug · 1 pointr/learnprogramming

I, too, am learning partially through Free Code Camp. What's great about them is that they give you (a) a structure of topics to learn in a certain order, and (b) actual projects to work on.

What you cannot do is learn exclusively through FCC. I see them as a starting point. They will link you to MDN documentation in their challenges, but don't rely on those either. MDN is written for people who already have some familiarity with JS and may not be readable if you do not already understand the basics of JavaScript.

If you're looking to stay with free resources, try looking up YouTube videos that have a high number of views and positive ratings. I stumbled on this channel and have used it a few times. YouTube videos will help you see exactly what the code is doing.

If you're willing to pay for a book, I have found Jon Duckett's JavaScript & jQuery book very helpful. Also try checking out his HTML & CSS book, though I haven't used it much as I am already pretty familiar with HTML (less so CSS, but I am familiar enough with the basics to rely on Google for anything else I need).

Feeling overwhelmed at FreeCodeCamp doesn't mean you'll never learn the concept. What it does mean is that you need to take a step back and really learn the concepts by checking out as many outside resources as you can, then go back to their challenges and complete them.

Good luck :)

u/meowris · 3 pointsr/learnprogramming

Junior UX person here. Not much of a programmer myself, but it's sufficient for my needs, as I am only doing front-end design when I dabble with code. There is a multitude of ways to learn how to code, but generally speaking, I find that practicing in small repetition helps the best to retain and absorb information. When you are doing a small code example, try to rewrite differently and see how it works in each of those ways. I also recommend coming up with a small project that you can work on (design and putting a personal site live, for example), as opposed just doing the practices, that way you are presented with a real world environment that contains restrictions and possibilities.

Do you draw? It might help to learn how to draw well, which will help you illustrate designs and potentially become a fun hobby.

Some beginner level books I recommend:

u/ss0317 · 2 pointsr/learnprogramming

Congrats on landing the interviews. I don't have any specific advice, but perhaps pick up the book "cracking the coding interview" and give it a once over. It offers some good technical and non-technical advice that may be helpful.

You're probably right in saying that you're not going to become an expert by reading books over the next few weeks. I think the best thing you can do is gain as much knowledge (within reason) in the areas you think you are deficient in.

The ideal candidate doesn't necessarily posses all of the skills at day 0, they're going to be judging you from a standpoint of whether or not you have the prerequisites to grow into the position as well. You've already proven to them that you have talent. So, in addition to last minute gap filling, also focus on your soft skills and your ability to demonstrate a growth mindset... it may take you further.

u/Unsounded · 2 pointsr/learnprogramming

These are good, but I would say they're actually better for learning C++ rather than branching to higher level concepts. C++ is one of the easiest languages to implement best practices with and it's intuitive if you're a good programmer. The language and standard itself promotes cleverness and conciseness.

Some books I would suggest for branching to higher level C++ would be Effective C++ and More Effective C++.

Both are wonderfully written and relevant across standards. It focuses on bigger picture C++ rather than exactly current standards.

u/S4ved · 1 pointr/learnprogramming

My professor recommended the book "Modern Operating Systems" for one of our classes. It's certainly not for everyone, the class was split about 50/50 on whether they absolutely hated it or loved it. There are copies to be found online if you're interested in checking out the writing-style, but I seriously recommend buying it if you do enjoy it as it is clearly a product of passion.

It's been an absolutely fantastic resource to me and although, as the name implies, it mostly focuses on operating systems, they manage to strike a seemingly perfect balance between explaining concepts of operating systems while still giving a thorough review of what role the actual hardware plays in the mix and how that works as well.

u/brenninja · 3 pointsr/learnprogramming

32 here, I was a high school teacher for 6 years. I learned quickly that it was not what I wanted to do long term. I started dabbling in programming and quickly fell in love with it. This past year I attended a year-long program (7 months 9-5 classroom, 5 months internship) for full stack web development. I had a well-paying position at a top tech company lined up before completing my program and am very happy with my career change.

My best advice would be to go for it! There is a huge demand for devs and while I understand it is easy to look at your age as a boon many employers will see it as a positive attribute.

  • You have proven from your past career that you can work with other people and handle yourself as an adult. Unfortunately this is not a guarantee for many fresh college grads
  • devs from different backgrounds are valuable as the more diverse your dev team is generally the more accurately it represents your user base

    Tips:
  • If you haven't done so already you might want to open a GitHub account and start putting some of your projects up so prospective employers have something to look at.
  • The online courses as well as bootcamps are great for project-based learning. During my internship I found that the biggest difference between myself as a bootcamp student vs. a CS major was in my lack of knowledge regarding data structures and algorithms. This is where most interviewers will focus their time with you. I used Cracking the Coding Interview to study before interviewing and found it very useful.
  • Use the skills you are gaining from FreeCodeCamp and TreeHouse to work on your own projects (not just the ones they walk you through)
  • Go to meetups and network.

u/AlmondRoast · 0 pointsr/learnprogramming

If you're mainly interested in Java, I would recommend Effective Java by Joshua Bloch. It's a great guide with recommendations for best practices in the language.

For C, the best book is The C Programming Language by Kernighan and Ritchie. I would recommend that you read that before ever looking at C++ because C++ is based on C. In fact, it's such a great book that I would recommend reading it before you read anything else on any language. You can skip the file system and Unix stuff though.

For C++, I have never found a good beginner book, so my suggestion would be that after you read the above C book, read the stuff in this tutorial and then read Effective C++ by Scott Meyers. It's another best practices book.

For Python, I've heard good things about Learning Python but I don't really know. I actually found it more useful to just go through the Python tutorial and then start making fun little scripts.

Hope that helps!

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

Despite their age, the MIT lectures were great. If you're good at math and enjoy proofs this is the class for you. Same thing with the CLRS book. One of the best books on DS & Algos out there, but it's so dense it'll make your eyes glaze over, unless you love proofs and highly technical reading.

To get your feet wet, Grokking Algorithms is a good book.

A lot of people recommend Princeton's Algorithm Course. I took Algorithms in school already, but I'm probably going to take this course to round out my knowledge.

EDIT: special shout out to geeks for geeks. Great Website

u/itdoesntmatter13 · 3 pointsr/learnprogramming

I see that you've already taken Colt Steele's courses on Udemy. I'm guessing you can work on the front as well as the back end and work with APIs. At this point, a bootcamp is a better option imo. I'm not from the US, so I can't recommend you any. I'm assuming that you're familiar with the basics and you should definitely look into learning frameworks now. It can get overwhelming to select one amongst the plethora of available options, so pick one of the popular ones, you can't go wrong with it. ReactJS for the front end or NodeJS for the back end would be great imo (especially since you're familiar with JavaScript at this point). Udemy courses are cheap and if you follow along, you'd have multiple projects under your belt, that should definitely help you in getting a job. If time permits, you should learn auxiliary subjects, especially Algorithms and Data Structures. That would really help you in your interviews. Eventually, get that Gayle Laakmann book. So, even though you have a long road ahead of you, prioritize and focus on the parts that can get you a job in the shortest time. Maybe work on your front end skills first, get a job and work through the back end or theoretical stuff later. I'm sure you can do it if you keep at it! Good luck with everything 👍

u/phao · 3 pointsr/learnprogramming

It's good to point out that all of these things are my opinions and not facts written in stone. However, I've seen others who share my point of view.

Teaching C++ correctly is an incredibly difficult task. It's difficult to overemphasize how difficult it is. Java not as much, but if put in contrast with JS and Python, it'll seem way more difficult.

((begin edit)) And just to be clear, I really meant teaching, and not learning. Although I believe learning C++ is more difficult than learning Java, JS or Python, I was referring to teaching. Instructors have to decide which languages to teach. Choosing C++ adds a large burden for them to deal with. Choosing JS on the other hand, doesn't add as much (it's a lot less in fact). ((end edit))

There are many issues which contribute to that. Here are some of them:

  • The language syntax/semantics is one of them (a huge reason for C++).
  • Another one is the way code in these languages is expected to be written (a huge one for Java, but also for C++). An example of this second point is teaching how OO code is usually written in java. For example, you look at a java code base, you'll find application of many of the known GoF patterns. Design patterns examples in Java present or not, a book on Java has to cover how OO code is written in it, which takes a while to teach since it's not as straightforward as it is doing the analogous in JS or Python.
  • A third point is teaching static typing right. It turns out this can mess with someone's head as a beginner. I believe static typing helps, but there is a considerable learning curve to it.

    The fact that you can run JS in a browser is a big win. You can almost readily teach people how to do graphics apps (canvas for example), which makes learning much more interesting. Since that's not the case for python, I'm not sure this is a good reason, but the places which pick JS consider this sort of thing.

    The issue is that a beginner python/JS programmer can do a lot more than a beginner C++ or Java programmer. When you go to intermediate levels, people in the js/python area will seem to have a unfair advantage IMO.

    I happen to know these languages (let's quote that "know" a few times since we're talking about C++ here =D), and my opinion is that in most of the cases, C++ and Java aren't needed. In fact, for most cases, I believe JS is the way to go these days.

    Just to be clear again, though, I'm only talking about my experience, and the cases that I've seen/worked with.

    About learning resources...

    For java, I firmly believe you can learn lots from the online tutorials (http://docs.oracle.com/javase/tutorial/). They're pretty good.

    For C++, I'd recommend you the two books by the creator of the language. One teaching programming concepts using C++, and the other being kind of a "user friendly manual for C++".

  • http://www.amazon.com/The-Programming-Language-4th-Edition/dp/0321563840/ - The C++ Programming Language (4th Edition)
  • http://www.amazon.com/Programming-Principles-Practice-Using-Edition/dp/0321992784/ - Programming: Principles and Practice Using C++ (2nd Edition)
u/KittyCaughtAFinch · 1 pointr/learnprogramming

I was in your situation a few months ago! I finished Codecademy and didn't know where to go next. I did Shay Howe's HTML/CSS course, which was great because you follow along step-by-step, but are continually building one project so you end up with something nice. Now I'm working through a free Udacity course (not sure yet whether I'd recommend it) and then I'm going to try the Code Camp or Odin Project like a few people here recommended. Also, I bought myself this book, its awesome.

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

This is the example that helped me understand recursion.

def sumlist(xs=[]):
if xs == []:
return 0
else:
return xs[0] + sumlist(xs[1:])

This is a recursive summation function. There are better ways to do it, but this is the most readable. Basically, it will return 0 if the list is empty; otherwise, it adds the current headof the list xs[0] to the value returned by the application of the function to the tail of the list xs[1:].

x = sumlist([1, 2, 3]) # 0 - Initial call.
xs == []? nope # 1 - Check terminal condition.
1 + sumlist([2, 3]) # 1 - Add current head (1) to value of next call.
xs == []? nope # 2 - Check terminal condition.
2 + sumlist([3]) # 2 - Add current head (2) to value of next call.
xs == []? nope # 3 - Check terminal condition.
3 + sumlist([]) # 3 - Add current head (3) to value of next call.
xs == []? yes # 4 - Check terminal condition.
0 # 4 - Return 0.
3 + 0 # 3 - Higher frame: add 3 to 0.
3 # 3 - Return 3.
2 + 3 # 2 - Higher frame: add 2 to 3.
5 # 2 - Return 5.
1 + 5 # 1 - Higher frame: add 1 to 5.
6 # 1 - Return 6.
x = 6 # 0 - Assign the result of the recursion to x.

If you're interested in this, the book The Little Schemer is pretty good.

u/wrouzhul · 8 pointsr/learnprogramming

Ooooh you're a super new :)

Many people hate it but w3schools can get you started:

u/samort7 · 257 pointsr/learnprogramming

Here's my list of the classics:

General Computing

u/Flofinator · 0 pointsr/learnprogramming

Yikes! Well it's going to be pretty hard for you to really understand how to do Python without actually coding in it.

The one thing you could do though is get a book with examples and write them down and try to modify the examples to do something a little extra while at work.

I find the http://www.headfirstlabs.com/books/hfpython/ books the absolute best books for almost anything if you are just starting out. The Java book is especially fun!

I know this isn't exactly what you are asking but it might be a good resource for you to start using.

Another great book that will teach you parts of the theory, and has really good examples on how computers work is http://www.amazon.com/Code-Language-Computer-Developer-Practices-ebook/dp/B00JDMPOK2/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1457746705&sr=1-1&keywords=code+charles+petzold .

That really helped me think about computers in a more intuitive way when I was first starting. It goes through the history and to what an adder is and more. I highly recommend that book if you want to understand how computers work.

u/UpAndDownArrows · 3 pointsr/learnprogramming

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

u/Butter_sc0tch · 7 pointsr/learnprogramming


Senior dev here who is on the other side of things. One way to approach these situations is to try and approach the problem more from the business case. I’m not sure of your work culture, but you should be bought in as to why a deliverable is time sensitive and what there is to gain by delivering this week vs a week or two later. If people don’t have reasons, they need to be held more accountable for the longer term delivery. Tech debt is a slow killer. You’d be surprised with how much you can push back:
How is this feature being measured?
What is success criteria?
What are the next steps if successful? If unsuccessful?
What are we not doing in order to do this task? Is this the most impactful thing we can spend our time on?

Also, understand that any system is due for a rewrite every 4 years or so. No matter how clean you write, you’ll eventually have to refactor anyway. You defiantly want to maintain something workable, but keep in mind there is no such thing as a permanent solution.

And finally, Great book ok how to make small iterative improvements as you go.
Working Effectively with Legacy Code https://www.amazon.ca/dp/0131177052/ref=cm_sw_r_cp_api_i_Td0QDbFQKYV3T

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

Here's a really good book by someone who used to conduct coding interviews at Microsoft, Amazon, etc.

Cracking the Coding Interview

Still, it's not likely that you'll see the same exact questions on an actual interview. Just practice a lot and get comfortable with solving problems. That will help you when it's time to code on-the-fly at an interview. Also, it's more important to talk through the solutions. Coming up with an innovative, elegant, or efficient solution with pseudocode is more important than getting the syntax exactly right in a particular programming language.

u/jmwpc · 1 pointr/learnprogramming

> An understanding of design concepts is handy, but you don't need to be able to come up with the design yourself.

I think this line really sums it up best. You are likely to be tasked with creating some mock-ups, or adding a feature after the designer(s) have more or less moved on to the next project. In the case of the former, having some basic understanding of layout and design will help you create a usable product, even if it lacks polish.For the latter, being able to interpret the existing design, and extracting a few rules from it will let you deliver something pretty close to a finished product.

Working as a contractor or as part of a small team you sometimes have to wear multiple hats. I'm mostly a backend developer, but have (and still do) work on the front-end. There are a couple of books I have read and recommend for people in that situation. Neither will make you a full-blown designer, but do cover the essentials that anyone working on the front-end really should know.

Don't Make Me Think: A Common Sense Approach To Web Usability

The Non-Designer's Design Book

u/Mydrax · 2 pointsr/learnprogramming

Inside the Machine, visually illustrates concepts within a computer system so beautifully that it will make you cry.
Also, TeachYourselfCS, not really a book but a list of links of videos and books that will help you grasp various sections of CS.

Grokking Algorithms, not a book based on CS, but it's a really good book on algorithms with funny illustrations that will help you through.

The other books that have been mentioned like Clean Code for example are a must read!

u/Rizzan8 · 2 pointsr/learnprogramming

Honestly? Mostly youtube and udemy tutorials. Here below is my copy pasta of C#/Unity stuff which I post pretty often on /r/learnprogramming and /r/learncsharp . I only need to find a moment one day and add some computer science theory links.

Free C# ebook

http://www.csharpcourse.com/ <- The download link is under 'here' at the end of the first paragraph.

If you want youtube tutorials:

https://www.youtube.com/playlist?list=PLGLfVvz_LVvRX6xK1oi0reKci6ignjdSa <- apart from C# this dude has also A LOT OF other tutorials on many other languages.

https://www.youtube.com/watch?v=pSiIHe2uZ2w <- has also pretty good Unity tutorials.

https://scottlilly.com/build-a-cwpf-rpg/ <- learn WPF (desktop application with GUI) by making simple RPG game.

https://www.youtube.com/user/IAmTimCorey <- This guy is also good, but I dislike his coding style and that he uses a lot of nugets instead of writing stuff himself.

Book reference guide:

https://www.amazon.com/C-7-0-Nutshell-Definitive-Reference/dp/1491987650/ref=sr_1_1?ie=UTF8&qid=1547990420&sr=8-1&keywords=C%23+in+a+nutshell <- But treat is as a language reference guide, not a programming learning guide.

Text-based tutorials

https://www.tutorialspoint.com/csharp/index.htm <- C#

https://www.tutorialspoint.com//wpf/index.htm <- WPF (GUI programming)

Udemy - wait for $10 sale which occurs at least once in a month:

https://www.udemy.com/csharp-tutorial-for-beginners/ <- for C#, dude has also more advanced tutorials to choose from.

https://www.udemy.com/user/bentristem/ <- for Unity

Do not move to Unity or WPF before you get good grasp on C# syntax and OOP concepts.

Coding style (read after getting good grasp of OOP concepts)

https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship-ebook/dp/B001GSTOAM/ref=sr_1_1?keywords=clean+code&qid=1562330510&s=gateway&sr=8-1 <- Clean Code, recommended for every newcomer at my work

https://www.amazon.com/gp/product/B075LRM681?pf_rd_p=2d1ab404-3b11-4c97-b3db-48081e145e35&pf_rd_r=22NFZ5GCWM7YMK2A5A2G <- Clean Architecture

u/enelsk · 4 pointsr/learnprogramming

Hi there,

If your primary interest is in blogging, I would recommend an existing platform like Ghost to get you up and running quickly. However, it sounds like you're more interested in web programming, with blogs being an interesting application.

These days, a lot of web applications are written with scripting languages, primarily Python, Ruby, or Javascript[1]. Each of these have many web frameworks to help you write your server application, but the big ones are:

  • Ruby: Ruby on Rails
  • Python: Django
  • Javascript: Express.js

    If you're already familiar with one of those languages, obviously you should heavily consider exploring its frameworks. Alternatively, you should research the languages and their frameworks on a high level and get an understanding of their core differentiating features before choosing one.

    Personally, I'm a lover of JS and node since that allows you to write your entire stack in Javascript, but there are those in this subreddit who call me a fanboy :)

    Regarding your client, any behavioral logic is going to be done in Javascript, the markdown will be in HTML, and your layout and style will be in CSS [2] - no way around that, so you better get familiar.

    Excellent intro to modern HTML/CSS

    Excellent intro to Javascript

    [1] Javascript executes in a unique server environment via Node.js, utilizing Chrome's v8 JS engine.

    [2] Of course there are languages like Coffeescript and Compass that compile to JS and CSS, this is probably beyond the spirit of the question.
u/Xeronate · 9 pointsr/learnprogramming

This video is a Google interview example so of course the problem is a bit contrived, but I think it is a decent illustration of the process he is referring to. The guy writes the code out in C++, but you could just as easily write in pseudocode.

Solving the problem by hand and writing a sketch of the algorithm builds intuition and makes the actual code much easier to write. People knock interview prep as being nothing like the job, but I find that it can do a lot to boost general problem solving. CTCI and leetcode are good resources. If you are brand new to programming Codingbat might be useful, but it is really just for the basics.

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

Not a website designer, never designed a full website, but recently read Don't make me think. Though I was reading it for ideas in general usability, it's focussed towards websites. It's a pretty short book that you can pretty casually get through in a few afternoons.

Styles and schemes are easy to change, making a robust and usable website should be top priority.

u/homeless_dude · 2 pointsr/learnprogramming

Yours is better. You eliminated the temporary variable which is a very good refactor. Performance wise yours is better (for same reason) unless the compiler optimizes away the temp variable, then they are the same.

For some reason code that uses temporary variable like theirs takes me longer to read.

I will recommend the book refactoring by Martin Fowler.

u/fj333 · 5 pointsr/learnprogramming

Check out this book: https://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686

It is heavy reading, but the reading is short and you'll spend most of your time implementing the projects, which are non-trivial but very fun and rewarding IMO. For lighter reading, check out CODE by Charles Petzold. It reads like a novel and requires no CS background but will leave you with a better understanding of the hardware/software stack than most CS grads have.

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/mian2zi3 · 8 pointsr/learnprogramming

I'm reminded of this Ira Glass quote:

https://www.goodreads.com/quotes/309485-nobody-tells-this-to-people-who-are-beginners-i-wish

Are you a professional developer? You might talk to your team lead, manager or other senior engineer on your team about making a plan to improve.

> Death by iteration or death by un-maintainability

Learn about refactoring. This is the classic book:

https://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672

but it is a common idea now. Test-driven development could help with this.

> perfect response with a great code example way better than I could've done it given weeks or months

The key habit here is to ask yourself, "What would I have had to know to come up with this myself?" and then go learn that and internalize it so if you ever see this problem or a related one again, you can solve it. If you do this consistently, you'll have a powerful bag of tools and be able to solve lots of problems easily that you couldn't before.

Finally, it doesn't sound like you have a formal CS education. You might think of going through some undergrad CS courses online (edX, Coursera, MIT OCW, etc.) It takes long-term persistence that few have the patience for, but if you can make it through, they will transform your understanding of computers and development.

u/AlSweigart · 2 pointsr/learnprogramming

Focus on UI design.

A lot of people tend to think of programming as very math-heavy (it's not, unless the domain you're writing software for is weather simulations or something that itself requires math). So we end up thinking the technical side is important and the "soft skills" are unimportant (or at least, not worth including in our study time).

I'm old enough now where I still like programming, but I've realized I don't care about code; I care about making software that people actually use and find useful. Building a tesla coil in your garage is cool, but so what tons of geeks have done that. I want to make something useful, and it doesn't matter how elegant your algorithms are if your program is confusing, unusable, or solves the wrong problem.

I'd recommend these books, in roughly this order:

u/donquez · 2 pointsr/learnprogramming

In terms of practical, professional skills, here are a few I would recommend:

  • The Pragmatic Programmer - writing non-trivial applications requires discipline and a practical mindset. This book is frequently recommended to new programmers as exposure to how think about and approach software development.
  • Head First Design Patterns - schooling introduces you to OOP, but design patterns really highlight the strengths of object orientation. The Gang of Four book is also recommended, but I feel like the Head First book is more approachable.
  • Working Effectively With Legacy Code - You didn't mention if you're coding professionally, but I think the above two books are applicable to someone who wants to take their work to the next level. If you are looking to work in software development, you're going to encounter a lot of legacy code - code that is poorly designed or hasn't evolved well with the application. This book gives you methods for recognizing and untangling the mess.

    For more tailored recommendations, where do you feel that you're weak? There are plenty of college textbooks that can introduce you to algorithms, but if you have an end-goal in mind, you can really focus your learning. Work on some tougher projects than you're used to, and study open source code that does interesting things.
u/ryanklee · 2 pointsr/learnprogramming

The Little Schemer. After you read that book, in addition to having had a car load of fun, you'll be pretty good with recursion, which is all that book basically teaches. It's pretty slim, around 100 pages IIRC. You could knock it out in under two weeks if you worked at it. Man, I love that book.

u/magus517707 · 4 pointsr/learnprogramming

Everyone keeps mentioning programming language resources, but I have yet to see any one mention any algorithm sources. Honestly learn how to develop algorithms, they are language agnostic. And you can practice them on paper. Good luck on your endeavor.

I haven't read this yet, but have heard good things.

https://www.amazon.com/gp/aw/d/1848000693/ref=mp_s_a_1_1?ie=UTF8&qid=1496313668&sr=8-1&pi=AC_SX236_SY340_FMwebp_QL65&keywords=The+Algorithm+Design+Manual&dpPl=1&dpID=41s5pnqOlyL&ref=plSrch

u/Genie-Us · 9 pointsr/learnprogramming

Eloquent Javascript

You Don't Know Javascript

Wes Bros (not all are free, but lots are and he has lots on Youtube. if you want some of the paid ones, there are ways, Yarrrrrr. But if you can, buy it as it's not that expensive and he's a kick ass teacher. If you can't afford them, yarrrrrrrr! Then when you get a job, go and buy them so you're not a dick.

Advent of Coding - Great fun, you'll likely only get the first few to start, but you can read other's code to see how "professionals" do it.

There are a number of other sites for coding practice like... I think... leetcode? Something like that. Codewars. There's a ninja themed one as well. Do a couple google searches and you should have tons.

Oh, and the book JavaScript and JQuery: Interactive Front-End Web Development is a great book for starting out, it's dry as hell, but it's full of everything you want to know. The link is not an affiliate or whatever, I get nothing, just read it.

u/FourForYouGlennCoco · 3 pointsr/learnprogramming

I'd suggest finding a good course and a good book that you can use for reference. Then cementing your skills by doing lots of problems.

The book: this one's easy. Skiena's Algorithm Design Manual is highly regarded, surprisingly readable, and affordable by textbook standards. Don't need to read it cover to cover, but it's great reference, and I'd suggest reading the really critical chapters like graph search and sorting.

The course: You can't really do better than Stanford's course, taught by Tim Roughgarden. I took it a few years ago and have used it to brush up every time I apply for a new job.

The problems: it's important not to dive into this until after you've learned the basic concepts. But Leetcode is the standard, and for good reason -- it has a ton of problems, many of which are leaked from real companies. At first, these problems will seem very difficult -- it make take hours to solve a 'medium' level problem, if you can get it at all. If you simply can't get it, read the solutions and really understand them.

I also recommend the book Elements of Programming Interviews. You'll hear a lot of love for Cracking the Coding Interview on this sub, but it's too easy and outdated for current interview prep. It's a fine intro book, but it won't take you all the way to where you need to be.

u/stannedelchev · 5 pointsr/learnprogramming

All the programming best practices you know apply to refactoring as well.

Use source control (Git, Mercurial, SVN, whatever) and commit often, on your own refactoring branch if possible. This way you can "save progress" and revert any changes, should your code get worse in some way.

Also, test a lot. Both during and after the refactoring. Having automated tests really helps. Make a small change, run the tests, make sure everything works, rinse and repeat.

Martin Fowler and other people have books on refactoring. I'd also recommend watching one of his talks.

Lastly, remember that refactoring is not a one-time thing. It's a frequent, ongoing process.
Make small revertible changes in one unit/module at a time, if possible. You don't want to fall too deep in the rabbit hole, and forget what you actually wanted to change.

u/Haatveit88 · 1 pointr/learnprogramming

I understand how you feel, honestly - as someone who did poorly in school, and I am somewhat dyscalculic, I really feel like I can relate!

The important thing for you, in my opinion, based on your explanation there, is to look for learning materials that suit you. Some people learn easily from really academic materials, some (like me) don't - and fortunately, there are lots of materials out there trying different approaches to teaching this kind of stuff. It gets easier as you go, as well - once the ball starts rolling you find it much easier to grasp future concepts. I got a massive 1300 page book called "An introduction to Algorithms" many years ago... Introduction my arse. It might as well have been alien language to me. But now, years later, I can actually understand its contents. It definitely was not an introduction (but it is a great book, both physically and literally).

A few recommendations for actual introductory books on these subjects:

"A Common-Sense Guide to Data Structures and Algorithms" by Jay Wengrow (2nd Edition coming 2020)

This book says the following in the opening chapter:

>"The problem with most resources on these subjects is that they're...well...obtuse. Most texts go heavy on the math jargon, and if you're not a mathematician, it's really difficult to grasp" . . . "Because of this, many people shy away from these concepts, feeling like they are simply not 'smart' enough to understand them."

It's not a perfect book, but it goes into a lot of basic data structures and explains them in a not-insane way. It helped me a lot! Understanding not just how they work, but why they are useful, is so helpful.

"Grokking Algorithms: An illustrated guide for Programmers and other curious people" by Aditya Y. Bhargava

A similar book, however, more algorithm and less data structure focused, and it goes into somewhat more depth, although usually the extra material is considered optional. The author here expresses a similar concern that books and learning materials on these concepts are often very hard to understand, and it need not be that way!

You can learn these things, you just need to find the right book/method that works for you! It can take some searching to find it. I know from experience!

Read the books, try to implement some of their concepts, and then try applying those things to real problems (i.e. from HackerRank or similar sites, try more than just HR). Read the book again. Repeat. You will understand a bit more each time. That was what worked for me, at least.

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/im_drinking_whiskey · 3 pointsr/learnprogramming
  • Spend more time working with Java, to become familiar with some of the language's subtleties.
  • Read The Practice of Programming (http://www.amazon.com/Practice-Programming-Professional-Computing/dp/020161586X), to become familiar with some of the more serious issues you'll encounter in day-to-day programming. Computer science courses don't usually emphasize code maintainability, etc.
  • Go back to the programs you wrote a year ago and make them more efficient. Pay attention to what makes them more difficult or easy to work with a year later, to get practical experience with maintainability.
  • Ask a friend to make a change to a program you've written, and tell you what was nice and what was difficult about doing so. If they're comfortable with it, ask to do the same to a program they've written.
  • Find an open source project that you care about and that has a strong developer community, and offer to begin fixing bugs.
u/Venerous · 1 pointr/learnprogramming

To answer your questions in the other comments, no language requires pre-requisite knowledge in another. You can sufficiently learn from the ground up with basically any language, including C++, it's just a matter of how... painful... you want it to be. I don't think anyone would advise you starting in Assembly, for example. C++ isn't usually recommended as a first-time language, but that being said it's still definitely possible. A lot of people recommend Bjarne Stroustrup's (the creator of C++) book for first-timers who want to get started with C++. Though it's a massive tome.

Personally, I think that regardless of whether or not you're going to have an easier time learning one language before another, you'd be better off getting started with the language you eventually want to end up in... so if that's C++ for you, go for it.

u/rykuno · 1 pointr/learnprogramming

A big thing is learning just how they function. Such how a Stack differs from a Queue and so on. Once you understand that you can implement it in any language really. If you are having trouble finding them in C#, you might wanna try looking at python since its pretty close to reading straight english(and there are a fair more courses that use python). Udacity has a really good courses that are free that I believe explain it really well.

My favorite being
https://www.udacity.com/course/technical-interview--ud513

Or even if you arnt looking for a job and just doing this for a hobby, the book Cracking the Coding Interview. It has examples of problems and data structure examples in C#.
https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850/ref=sr_1_1?ie=UTF8&qid=1473262882&sr=8-1&keywords=cracking+the+coding+interview

After this course, you can take one that goes into the theoretical aspect handling Big'o, time complexity, efficiency, and such =).

u/KobayashiDragonSlave · 28 pointsr/learnprogramming

Not OP but I discovered this book 'Grokking Algorithms' from a fantastic youtube channel 'The Coding Train'. The book explains a lot of the algorithms and data structures that I am learning in my first sem of CS at school. This thing even has the stuff that I am going to learn in the next semster. I found this book much more fun than my monotonous textbooks.
If anyone wants to get a good grasp of the fundamentals of A&DS this is a great starting point and then move on to MOOCs by famous Universities. MIT's A&DS was the one that I used. Dunno if it's still available on YouTube because I remember that OCW courses were removed or something?

Link

u/denialerror · 2 pointsr/learnprogramming

>How does one make a structural change in a project that is this entagled and big?

Slowly, and with a lot of tests. If you want a book recommendation, Working Effectively With Legacy Code by Michael Feathers is the Bible on this subject. The key takeaway is that code should be considered legacy if you can't make changes to it confidently. The only way you can be confident is if it is well tested.

I would also say that although it is very tempting to look at a poor codebase and try and make it better, ask yourself if there is value in doing so first. Focus on what is going to add value in the immediate future.

u/dev_bry · 12 pointsr/learnprogramming

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

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

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

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

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

u/the_cunt_muncher · 1 pointr/learnprogramming

I started out learning by reading this book, HTML and CSS. Then I did a bunch of free tutorials on Tutsplus.com as well as watch a bunch of YouTube videos. After that I went back and bought another HTML/CSS book but it was more "textbook" like so I could learn it further in depth.

After this I had enough skill to get hired at a company doing HTML/CSS work, it wasn't great pay but it was a job and it allowed me to further learn on the job.

Then I did the same thing with Javascript, using this book first, Javascript & JQuery, followed by free tutorials online, then purchasing a more "textbook" type book on the subject.

Also for some of the "textbook" type books I ended up buying, I just recently got a membership card at my local library and they had those book there so if I'd known that when I was learning I could have checked out those books for free, so check and see what your local library has.

Also another thing I did was check out my local community college, they had really cheap classes that I ended up taking online.

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/aMonkeyRidingABadger · 10 pointsr/learnprogramming

I would emphasize the end of /u/razeal113's post. Don't reinvent the wheel. Learn from those who came before you by studying common algorithms.

MIT's algorithms course, 6.006, is a good introduction to the concepts that are important to analyzing and applying algorithms and it also introduces many important algorithms. You can watch the lectures and access the course material for free.

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/

If reading is your thing, I like Skiena's Algorithm Design Manual. It's not too dense and has war stories where you can read about how the algorithms have been used to solve real problems.

http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693

Whatever your goal with programming is, there's a good chance that it won't involve inventing new algorithms; instead, nearly everything you do will involve recognizing how to apply and/or adapt an algorithm you already know to the problem you're trying to solve. The more algorithms you already know, and the more comfortable you are with them, the easier it will be to recognize and apply.

u/kidsincatacombs · 8 pointsr/learnprogramming

JavaScript and jQuery by Jon Duckett

Amazing book for anyone starting JavaScript and jQuery. Great examples and clear explainations. Wish Duckett wrote more JS-related books. I'd buy them all!

u/DaSkywalker · 2 pointsr/learnprogramming

Got THIS, it´s amazing.

It starts out with the fundamental principles of logic gates and transistors, moving through memory adresses and basic assembly, through to making your own compiler and a basic OS. Each chapter has a nice little simulator program you can download and use together with a number of exercises, to help you consolidate what you´ve learnt.

And no, I didn´t write it! Or sell it for a living. Nor am I in any way affiliated with anybody having to do anything with the production or sale of this book. I just read it. It´s great.

u/idontcare1025 · 1 pointr/learnprogramming

Programming: Principles and Practice Using C++ is a great book on C++ that doesn't assume as much programming experience as C++ Primer. While the Primer is pretty good, if you haven't done much programming before C++, I would recommend Principles and Practice.

u/abcininin · 1 pointr/learnprogramming

You gotta start somewhere! I'm glad that you are taking the programming classes. Programming is fun, and challenging, you'll see. For starts, just go through your course and pay close attention to (a) algorithms and (b) data structures. If you find it hard to understand, just come back here or go r/learnpython. We are here to support you. Also, if you prefer books, i recommend this one - he talks through the concepts from problem solving and steps through psuedo-code before writing a functioning program. If you prefer an online experience, try all the easy problems on leetcode, don't get intimidated if you don't get the solutions, don't be afraid to peek at hints and solutions.

u/mad0314 · 2 pointsr/learnprogramming

I think it would be a good exercise to learn something new and then go back to your old projects and apply them. For example, learn about testing and go back to your calculator and try to get a good chunk of it under tests (another good resource is Working Effectively with Legacy Code, which covers getting projects under tests when they don't have any). Then learn about CI/CD, which use tests, and make a build pipeline for your calculator. Then read Clean Code, read about architectures and patterns, and see if you can improve your architecture. This is just an example, but any of those could give you good talking points if interviewers ask about your projects.

u/maxinfet · 1 pointr/learnprogramming

Yeah I own http://www.amazon.com/gp/product/0321992784?psc=1&redirect=true&ref_=oh_aui_detailpage_o09_s00 and have been working through it but I was hoping someone might know of a good tutorial that glosses over the hello world parts of tutorials and moves forward with using pointers (I mean like the pointer opperator "<-"), header files and other C++ features and syntax.

u/perladdict · 4 pointsr/learnprogramming

Well in that case, if you haven't already make sure to look into Computer Architecture, Assembly Language (I don't recommend actual assembly try something like MIPS), and Digital Logic. Those all really helped me when I was learning OS's and stuff past trivial C programs. Keep in mind that they rarely DIRECTLY helped me, moreso they helped me to understand some of the more advanced topics that build on the lower levels of the system. They should help you to understand more of control flow down to the instruction level and help you to understand why some solutions are implemented through hardware and some through software.

With all that said, my recommendation is really cliche. But if you want to learn advanced operating system concepts then I recommend: Modern Operating System Concepts.

That is a newer edition but you'd be fine going with a cheaper used edition that's older. If it's not sold out this link on thriftbooks is a good place to look. Second Edition

u/mobusta · 1 pointr/learnprogramming

S.O. has a list of books:
http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list

Both options appear to be well-received.

Personally, I learned C++ initially with this book as it was the class textbook:

http://www.amazon.com/How-Program-Early-Objects-Version/dp/0133378713?ie=UTF8&keywords=deitel%20c%2B%2B&qid=1465331530&ref_=sr_1_2&sr=8-2


Maybe you can pick from the list for the introductory stuff, and pick up Effective C++ by Scott Meyers for recommendations and best practices after you are more comfortable with C++.

http://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876?ie=UTF8&keywords=effective%20c%2B%2B&qid=1465332161&ref_=sr_1_2&sr=8-2

u/IRLeif · 2 pointsr/learnprogramming

Thanks! Just to make sure, do you mean these two books?

  • Introduction to Algorithms
  • Algorithms

    If so, I'm glad you mentioned those. Both of them are already on my to-read list, but they were further down than Knuth's work. Since, as you say, they might better for starters, I'll check those out first.

    By the way, I have also heard some good things about this one:

  • The Algorithm Design Manual

    Have you any experience with that book? It's also on my to-read list.
u/jesyspa · 2 pointsr/learnprogramming

In any case, first of all, make sure you're comfortable in Python before you move on anywhere. Once you're happily writing programs, get A Tour of C++ and see if you like it. If you do, get C++ Primer or PPPUC++ and work through those. My main concern would be that the C++ course may be teaching highly outdated material, and may be of very little use for actually learning C++. If that's the case, knowing a little more beforehand will make it much easier to not grow jaded and resentful.

u/christinamasden · 1 pointr/learnprogramming

So I looked at the course you mentioned, and I'm not seeing where it falls short for your goals.

I haven't read this, but it looks like an excellent architecture book, comes with software to implement all projects on. It also says it includes hardware projects. You'll just need to buy a breadboard and a bunch of logic gates, probably.

"This book guides the reader on a journey from the basics of boolean logic and elementary gates through CPU design, assembly, virtual machines, high level languages, compilers and operating systems. How can such a task be accomplished in one 300-page volume? Simple - you do most of the work yourself. The relatively short chapters introduce each concept and suggest an approach to implementation. The reader is then given a project to complete and test. Intimidated by assembly language? You probably won't be after you've written a symbolic assembler. Confused by compilers? Imagine how you'll feel when you realize you've created one for a simple (but completely usable) high-level language." link to the Amazon review

u/Steve_the_Scout · 2 pointsr/learnprogramming

I've been writing C++ for about three years now, so I'm mostly familiar with C++11 (one of the newer updates that added quite a bit of functionality and sort of "updated" the language to make it more modern), though there are definitely people with way more experience in it than me on here.

C++ is a language with a very steep initial learning curve that drops drastically once you understand the basic concepts and write a few programs to practice the concepts involved. If you feel like it's too difficult at some point, take a break, then come at it from a different approach (and of course write a few tests to make sure you're getting it). This applies to other languages almost equally, of course.

You should try to learn C++11 (and C++14, a minor update) more than older variations of the language because it added quite a bit to make it easier to read and write with.

Online guides for C++ tend to be outdated or just plain wrong, it's actually one of the few languages with that quality (although that's changing slowly). It's best to get a book like The C++ Programming Language or Programming Principles and Practice Using C++ (which I would recommend for you over the former, which is actually more of a reference book). By the way, they're both authored by the initial creator of the language, so they also explain some of the design choices and details of the language which may or may not help you better understand it.

Beyond that, just do what's suggested for any other programming language (look at references, read actual programs written in it, etc.)/

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/[deleted] · 0 pointsr/learnprogramming

The Little Schemer may be a good starting place if the information in SICP is too complex to start. It's a fun, effective introduction to how to think like a programmer, functional programming, and the Scheme language.

u/YvesSoete · 0 pointsr/learnprogramming

I would strongly suggest you pick up this book from the library, it will change your mindset into a programmer: (first edition is very good as well) - Programming: Principles and Practice Using C++
by Bjarne Stroustrup (Author) http://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784/ref=asap_bc?ie=UTF8 - If you will follow the book from start till end and do all the exercises at the end of each chapter, you will not face the problems you are talking about. Good luck - Yves Soete

u/nonkeymn · 11 pointsr/learnprogramming

leet code is a great place for practice problems


For algorithms this book is great
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_9?keywords=algorithms+book&qid=1554149281&s=gateway&sr=8-9

Also, if you are looking for a software engineering role you will also need to brush up on high level design like this video:
https://www.youtube.com/watch?v=KmAyPUv9gOY

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/silveryRain · 10 pointsr/learnprogramming

You can either learn to crack the interview or reconsider your job search strategy. Sure, you may not be able to analyze the complexity of a travelling salesman solution, but you may be able to find an employer who instead cares more about software engineering, tooling expertise (version control, CI etc.), expertise with a particular technology (you mentioned PHP), a well-rounded approach to software development in general, soft skills or whatever else you're confident you may bring to the table.

u/ixAp0c · 1 pointr/learnprogramming

While books are great to read, you should do a bit more research on good books for the topic you want to learn (their intended audiences, what they cover, learning approach, etc.) before jumping the gun and spending $70 on some books you might never finish.

Also, I'd be wary of a 390 page book that covers C++ and Game Programming (might be a bit terse, or not cover enough programming concepts, etc). Maybe you should take a look at the book written by the creator of C++.

And I recommend figuring out a career path, it might be a bit much to learn about web development / web programming and also learn about systems / application programming at the same time. It's better to specialize in one language and be an expert than to be a novice in many.

u/bluelite · 1 pointr/learnprogramming

The book Don't Make Me Think is a great, lightweight introduction to UI design and testing. There are no magic formulas; that is, it's impossible to state that "if your UI does X, Y, and Z, it'll be great!." But there are guidelines that you ought to follow--or consciously ignore.

Your UI is good if the majority of users can navigate it without asking for help of giving up. Start by testing your UI designs on a few friends. Give them some tasks to do. If they can accomplish the tasks, you're on the right track. If not, re-design and test again.

u/hardonchairs · 3 pointsr/learnprogramming

You don't have to be a master to get hired at Google or Apple. You have to be good. The kind of good you get to be by really being enthusiastic about programming. But not unobtainably good.

https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850

These are the sort of tests they would give you. The person I spoke to who works as Google mentioned that book specifically and that the test she got was straight out of that book. That book actually talks specifically about how to get hired at places like Google and Apple. Not just "a company like that" but there is detailed discussion about the different big companies like MS and Amazon too. I just need to get around to reading it.

u/munificent · 3 pointsr/learnprogramming

I've heard good things about The Algorithm Design Manual. I personally really got a lot from Algorithms in a Nutshell. As the name implies, it's a small book, but quite good.

I know you requested data structures, but the two subjects are closely intertwined: a given data structure often exists to support an algorithm and vice versa.

u/Idoiocracy · 3 pointsr/learnprogramming

HTML and CSS: Design and Build Websites is a fantastic book to start with. It has a beautiful layout and is the top choice from Amazon when searching for html books, with almost two hundred reviews at a 4.5 rating.

u/AnalyzeAllTheLogs · 4 pointsr/learnprogramming

Although more about product delivery and lifecycle management, i'd recommend:

https://www.audible.com/pd/Business/The-Phoenix-Project-Audiobook/B00VAZZY32

[No audiobook, but worth the read] The Mythical Man-Month, Anniversary Edition: Essays On Software Engineering https://www.amazon.com/dp/B00B8USS14/

[No audiobook, but about 1/3 the price at the moment for kindle and really good]
Code: The Hidden Language of Computer Hardware and Software (Developer Best Practices) https://www.amazon.com/dp/B00JDMPOK2/


https://www.amazon.com/Dreaming-Code-Programmers-Transcendent-Software/dp/B00AQ5DOCA

https://www.amazon.com/Scrum/dp/B00NHZ6PPE

u/teeceli · 4 pointsr/learnprogramming

Same thing happened to me at my last job. I was actually led to believe in the interview that it was a job relevant to my experience but I quickly learned on day 1 that it wasn't. Read as much as you possibly can in your free time for a while, you would be amazed at how quickly you can pick things up. Three books I recommend as a crash course are:

u/Grel · 6 pointsr/learnprogramming

While I have not read it, I hear great things about The Little Schemer

The Little Scheme on amazon

I used SICP which can be found here. It is really great!

u/DEiE · 2 pointsr/learnprogramming

Break your main up into multiple smaller methods, and call those from your main method.

When doing this, the naming of the method is important. The name of the method should describe what the method does.

The cookSpaghetti is an example of this. The method name says what the method does, not how the method is doing it, which would be an unnecessary detail at that point.

When you structure your code like this, it will almost read like a story, which will make the code much clearer.

The Refactoring book provides more ways to improve the quality of your code, although it might be too advanced right now.

u/Andrew_Hager · 7 pointsr/learnprogramming

Try the book "The little schemer"

The Little Schemer - 4th Edition https://www.amazon.com/dp/0262560992/ref=cm_sw_r_cp_apa_i_OST2Db7M254TR

I couldn't wrap my head around anything past very basic recursion. Once I had completed this book, I felt like I had a fairly solid understanding of the topic. Well worth the money, in my opinion.

Edit: As a side effect, you learn a little scheme which happens to be a very fun language.

u/MITranger · 4 pointsr/learnprogramming

I really like /u/razeal113 's comment. That's a good algorithm for finding a good algorithm. Starting out with brute force isn't necessarily bad, as it at least gives you a jumping board to start optimizing. The only thing I would add is to increase your knowledge and toolbelt. You can gain a lot of inspiration and learn "how to think" by learning, analyzing, applying, and modifying all the awesome algorithms already out there. Here are some resources:

MOOCs.

u/iDontDoMeth · 2 pointsr/learnprogramming

Jon Duckett, who wrote the HTML & CSS book you bought (which is the best in my opinion) also just released his JavaScript book, which I am excited to read. Once you get a grasp on it, I would read JavaScript The Good Parts, by Douglas Crockford, who works for ECMA and helped write the language.

u/ghostdog20 · 2 pointsr/learnprogramming

This is an excellent book, I enjoyed reading it. I would also recommend the Elements of Computing Systems.

u/anonymousdeveloper · 1 pointr/learnprogramming

Code academy is not job training, it's an introduction to syntax.

For instance, after finishing their Ruby course, you will know how to work with strings and vectors and so on, but without more knowledge, you wouldn't even know how to start to build a Ruby application. If shown an existing Ruby program you might be able to read a bit of it and change some stuff here and there, but you would be far from any significant changes.

I, as a full stack developer, don't use Code Academy as a learning resource but as a refresher course kind of thing. When I haven't been using bootstrap too often, I go do the code academy course and relearn the basics in order to smoothly transition into using it on my own.

Better alternatives would be an actual book. Go to the library or a book store and find an introduction to web development book. I've heard that this is a pretty good book, http://www.amazon.com/HTML-CSS-Design-Build-Websites/dp/1118008189/ref=sr_1_1?ie=UTF8&qid=1448997572&sr=8-1&keywords=html+for+beginners.

Edit: Beyond the absolute basics, Code Academy (and other things like it, FCC for example) are basically useless.

u/aroras · 14 pointsr/learnprogramming

doing this line by line with as we speak with this amazing book. It definitely helps!

u/tenpairsofsocks · 18 pointsr/learnprogramming

Taking a course will definitely help and I have a few book suggestions.

Intro to Algorithm
This is pretty much the holy grail on algorithms, used in many college CS courses.

Skiena's Algorithm Design
My personal favorite. Combines his Ph.D experience with real world problems.

u/glhanes · 1 pointr/learnprogramming

In addition to going out and actually getting your hands dirty as others have suggested, make sure that when you're doing it, you're using the best design principles you can muster.

Also, do some reading! There are lots of good books out there that can help you learn common conventions and good design principles.

I'm going through Effective C++ right now, and I've learned more about how to write C++ in the first quarter of the book than I had in the previous 2 years of my life.

Effective Java is a good source, too, but obviously it's going to depend on which framework and languages you're using. Either way, though, you'll learn a lot of essential concepts for how to write maintainable code and prevent common design mistakes.

Also, if you're planning on writing a lot of Object Oriented code, read up on Object Oriented Design Principles/Patterns. Even if you never use them, other people will. If you start working in bigger codebases, you'll see them in action, and it'll make learning the code a whole lot easier if you're familiar with the patterns they're using.

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

Well, it was my fear too. When I was getting close to graduation, I was sure nobody would be interested. Then I got an interview, and then got a job, and then I was away.

Generally, at least in my experience, it's not hard to get interviews (or at least phone screens) because companies are all looking for talent and a phone screen is pretty low-cost for the company. If you're worried, warm up with some interview questions (from this kind of book for example). If you can get an interview, and if your interview goes well...well, that's all it takes.

u/evholyfields_ear · 1 pointr/learnprogramming

You can check out this tutorial, helped me while I was learning. If you could share your code, that would be helpful too. This book also has an excellent explanation.

u/nso95 · 1 pointr/learnprogramming

This book is fantastic and beautiful.

u/yash3ahuja · 2 pointsr/learnprogramming

I know you are looking for specific language books, but I feel like this book is a very good read.

u/Double_A_92 · 2 pointsr/learnprogramming

I don't know about your specific learning path there... But most of the times this book is recommended: https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850

And btw your English is very good :)

u/0b_101010 · 9 pointsr/learnprogramming

Hi! I recommend the following books:

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)