Best object-oriented design books according to redditors

We found 1,631 Reddit comments discussing the best object-oriented design books. We ranked the 321 resulting products by number of redditors who mentioned them. Here are the top 20.

Next page

Top Reddit comments about Object-Oriented Design:

u/D3FEATER · 699 pointsr/IAmA

The exact four books I read are:

Learning Obj-C

Learning Java

iOS Programming: The Big Nerd Ranch Guide

Android Programming: The Big Nerd Ranch Guide

However, I would now recommend learning Swift instead of Obj-C. At the time when I was looking into iOS books, good books on Swift were few and far between.

u/_a9o_ · 188 pointsr/cscareerquestions

Refactoring: Improving the design of existing code

Design Patterns

Working Effectively with legacy code

Clean Code

How to be a programmer

Then there are language specific books which are really good. I think if you read the above, slowly over time, you'll be in a great place. Don't think you need to read them all before you start.

u/Nezteb · 43 pointsr/compsci

Some book recommendations:

u/phughes · 38 pointsr/iOSProgramming

My best advice is to avoid "It's easy to write an app" tutorials. They put you in way over your head and when there's something wrong with the tutorial (or you mistype something) you flounder.


Instead focus on "the basics" of programming. For loops. If statements. Basic control flow. Variable assignment.

Next focus on understanding Object Oriented Programming. It'll take a while to wrap your head around it, but it's the foundation of everything Apple provides you to write apps.

For these two steps I used this book but you might want to find something based on Swift, since that's the new hip thing.

Then you start learning Apple's frameworks. Do a bunch of tutorials. Write your own app. When you realize it sucks and you'd be embarrassed to share it with anyone dump it and start over. Write lots of apps that do stupid little things. Make them bigger. After a few times you may have something cool, but more importantly you'll have learned a bunch of stuff you can't learn by doing tutorials.

Try to remember when it's late at night and you're crying with your head down on the desk because you can't get it to work that programming is fun. (That's sarcasm, but you need to know that even expert programmers went through it too. If you keep plugging you'll get better.)

u/ThereKanBOnly1 · 35 pointsr/dotnet

Literally every part about this sounds like an up hill battle. Frankly, no matter what the course of action, a year isn't going to be enough. You've got to start tempering expectations with that now.

The challenge here is rewriting all that Web Forms logic, and this is the piece that is the biggest hurdle. I assume, that since you are working with web forms you don't have any test suite in place, so you're basically walking a tightrope without a net. I also assume that the actual business logic of the application is probably closely intertwined with web forms as well (which I'm assuming because that's how its been nearly every web forms app I've worked with).

Before you start wondering with MVC is the right fit for you, you've got to prepare your code base from moving out of Web Forms. You should pick up Refactoring by Martin Fowler. And begin to move as much code as you can out of code behind files, and into pure C# classes that you can test. Interfaces are your friend. Facades and Adapters are your friend. Unit tests are your friend. You need to have your business logic as portable as possible in order to move away from Web Forms and not be constantly chasing down bugs and unexpected functionality. The more your code-behind is a facade that just takes inputs and calls other classes with them, the better off you'll be

With that out of the way, now we can get in the framework discussion. First off, I don't think a SPA is a good approach here. It'll be too heavy of a lift for your team, and probably not worth the time and effort at this point in time. So you're pretty much left with MVC as an architecture, which is fine, but I think you're going to have some issues with "vanilla" MVC considering the load and the users you're going to have to service, so you're going to have to look beyond that to make this work.

One of the key components to scaling this will be a good cache. If every read needs to hit the database, then you're done. I would recommend using Redis for caching, but an in-memory cache will help you here as well.

I would also strongly recommend looking into CQRS. That stands for Command Query Responsibility Segregation. The high level idea is that requests that need to modify data gets handled by different classes than reading data. This makes it much easier to scale up/out the read side, and also makes it much easier to know when the cache on the write side can be invalidated (since that's coming from the read side).

The challenge with ramping up on CQRS is that its generally presented with a lot of other solutions; MongoDb/Document databases, Event Sourcing, event messaging. Those are good and interesting in their own right, but they are way more than you need right now and CQRS does not require using them.

The last thing I'll touch on here is that if you've got one big ball of mud, you're path to upgrading this going to be very tough. If you can find isolated parts of the application to split off, and test in a different framework, then you'll be much better off. The more isolated sales is from inventory (or whatever you have) the better off you're going to be in the long run. If you can find the time to isolate those components in the application now, rather than try and rewrite the big ball of mud, your future self will thank you.

u/krabby_patty · 33 pointsr/java

Surprised Effective Java didn't show up

Edit: Did a little digging and I see a Third Edition seems to be under way for Java 7/8

  1. https://twitter.com/joshbloch/status/811983663525085184

  2. https://twitter.com/joshbloch/status/796939556658573312
u/_dban_ · 31 pointsr/programming

I think this post summarizes why blog posts are a bad teaching medium, and why books are still very useful.

It looks like this guy read some stuff and applied it, without reading the full instructions. For example, the OP quotes Uncle Bob, but misses the context which is fully explained in Uncle Bob's book Agile Patterns, Principles and Practices.

For example, thinking that:

> depend on abstractions, not concretions

implies an explosion of interfaces and false abstractions.

The PPP book has a chapter detailing what he means by this.

In essence, the business rules should be abstracted away from how they are implemented, because the business rules change for different reasons than the implementation (and thus why they should be separated, as per SRP).

In the example, he is implementing a Coffee Machine.

Uncle Bob starts with the use cases to determine what software behavior is required, and derives a software model of that behavior using OOP. This results in a coherent set of classes with well partitioned responsibilities.

Then, he creates abstract classes to expose seams which the concrete implementations use to connect the abstract model to the physical implementation of the Coffee Machine. You can use interfaces and the strategy pattern as well to achieve the same effect (the approach I prefer). This way, the physical implementation depends on the abstract definition (as per DIP).

Thus, the seams become layer boundaries driven by abstractions derived from use cases.

Note that the goal isn't testability, it is separation of concerns. The fact that testability is improved is a side effect (and testability is a tool for measuring how well concerns are separated). This is why chasing testability as a goal leads to false abstractions, because you are approaching the problem from the wrong direction.

Thus, if you apply Uncle Bob's advice as he meant and as is explained in the book, the problem the OP demonstrates with lack of cohesion doesn't exist. In fact, there is a very useful section in the PPP book providing some useful metrics to determine how well your software model is organized, so you can move your abstract model from the "bad abstraction" to the "good abstraction" as demonstrated by the OP.

TL;DR - Seams aren't the problem, the problem is how you are thinking about the problem. Also, read the book, not the blog.

u/JonKalb · 28 pointsr/cpp

Modern C++ (C++11 or later) books are not nearly as plentiful as those for Classic C++, but there are a few notables.

Bjarne's college text may be what you are looking for:

Programming: Principles and Practice Using C++ https://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784/ref=pd_sim_14_2/144-7765085-0122037

It is aimed at engineers, which makes it less general, but might be good for you.

Of course his general intro is also updated to C++11.

The C++ Programming Language https://www.amazon.com/C-Programming-Language-4th/dp/0321563840/ref=pd_sim_14_2/144-7765085-0122037

This is aimed at experienced systems programmers, so it may be a bit heavy for students, which makes the Primer (that you mentioned attractive).

C++ Primer https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113/ref=pd_bxgy_14_img_2/144-7765085-0122037

Be certain to get the 5th edition.

Of Scott's books only the latest is Modern.

Effective Modern C++ https://www.amazon.com/Effective-Modern-Specific-Ways-Improve/dp/1491903996/ref=pd_sim_14_2/144-7765085-0122037?_encoding=UTF8

This is less an introduction for students than for Journeymen (Journeypeople?) programmers.

For just plain good programming style consider Ivan's book.

Functional Programming in C++ https://www.amazon.com/gp/product/1617293814

Don't be put off by "Functional." This style of programming will make your students excellent programmers.

There are some modern books of high quality that are niche.

The ultimate guide to templates:
C++ Templates https://www.amazon.com/C-Templates-Complete-Guide-2nd/dp/0321714121/ref=pd_sim_14_1/144-7765085-0122037

The ultimate guide to concurrency:
C++ Concurrency in Action https://www.amazon.com/C-Concurrency-Action-Anthony-Williams/dp/1617294691/ref=pd_sim_14_1/144-7765085-0122037

Some library options:

Despite its name, this is mostly reference. A very good reference.
The C++ Standard Library: A Tutorial and Reference (2nd Edition) https://www.amazon.com/Standard-Library-Tutorial-Reference-2nd/dp/0321623215/ref=pd_sim_14_2/144-7765085-0122037

Arthur's book covers C++17, which makes it one of the most modern on this list:
Mastering the C++17 STL: Make full use of the standard library components in C++17 https://www.amazon.com/Mastering-17-STL-standard-components-ebook/dp/B076CQ1RFF/ref=sr_1_fkmrnull_1

To what extent are you teaching C++ and to what extent are you teaching programing?

Good luck and have fun!

u/jkndrkn · 26 pointsr/programming

Refactoring. I've known many a coder that loves to engage in this most macho of disciplines. Funny thing is, is that many such coders don't use any unit testing. As anyone who has read or at lest skimmed Refactoring
knows that one should not even contemplate making any changes without a solid test suite to catch the inevitable bugs.

Refactoring isn't about engaging in brutal combat with your code. Refactoring is about careful reshaping.

u/TieDyeJoe · 26 pointsr/java

Get Effective Java by Josh Bloch.

u/xnhy · 25 pointsr/coding

I like these and would add:

3) Given how cheap they got lately, I would suggest to use at least two screens for work. More screen real estate equals more efficiency.

4) Master your tools. Memorize the shortcuts your editor provides (or learn Vim :) ), learn to take full advantage of your IDE's debugging capabilities, and so on.


...and regarding this...:
> Design patterns.

Refactoring - Improving the Design of Existing Code is a great book on this topic.

u/masklinn · 25 pointsr/programming

So basically Uncle Bob forgot how to actually refactor, and didn't bother whipping up his copy of Refactoring?

Automated refactoring tool are a good thing, because (especially in statically typed languages) they make refactoring safer (but not safe, if you use e.g. code generation or reflection, your refactoring browser won't help you), more systemic, more systematic and much faster.

But they were never necessary, the basic concepts of refactoring were tool-less, and Refactoring lists only manual recipes (with a discussion on refactoring browsers in another chapter), some of them -- if I remember well, it's been some time since I've read it -- not even being automatically implementable.

u/sempuki · 24 pointsr/cpp

It depends on whether you're a beginner to C++, a beginner to programming or both. It also depends on whether you prefer a tutorial style -- where you read closely and walk step by step with the author, or a reference -- where you skim, go at your own pace, and follow up when you need more details.

Accelerated C++ is more of a short introduction that hits all the broad strokes. It's good for someone who's already very adept but just needs to get into the mindset of C++.

Principles and practice is a tutorial style book suitable for an introductory course, and isn't a bad choice. The C++ Programming Language is more of a reference style and would be good for people who really prefer that direction.

I've read parts of How to Program Java and definitely was not impressed -- not sure how 9th ed of C++ stacks up.

I'm assuming a beginner is new to programming, but by virtue of choosing C++ enjoys the technical details that allows you to make the most of the language. My recommendation for this kind of user by far and away is C++ Primer by Lippmann, Lajoie, Moo (not to be confused with Primer Plus). This book (3rd ed) was what made me fall in love with the language in university.

It's written by people who were deeply involved in the standards, wrote actual compilers, and know how to present the material in ways that are relevant to the student. The 3rd ed also had sections that went further and explain the underlying compiler mechanism for a given feature which I found so insightful. They somehow managed to marry a high-level tutorial style narrative with important low level technical details that very much mirrors the style of the language itself. The 3rd ed also explicitly called out C++ as a mutli-paradigm language where functional style was possible (which was my first introduction to the concept of functional programming).

I'm not sure how much of that book survives in the 5th ed, but either way I recommend you read the book yourself and see if it's something that resonates for you. I'm looking through a copy of 5th ed right now, and it looks like much of that spirit is still alive. The down side is it appear it's still on strictly C++11, which given the size of the language and intended audience, I don't think is a fatal weakness.

If you want a complement to C++ Primer, Stroustrop's reference is the most complete, but to be honest I prefer C++ Reference for a working programmer.

I highly recommend ditching IDEs entirely for learners precisely because they make it harder to detect and learn from your mistakes. Get a copy of a linux distro, or install XCode command line tools, and invoke GCC/Clang directly. By the time you need to move into larger projects you'll have developed your own opinions on build systems/IDEs.

u/K60d55 · 23 pointsr/java

I don't really like the term "design your system using interfaces" because it doesn't tell you why. It's a generic idea without any context.

It is better to start with a principle, like Dependency Inversion. Dependency Inversion says you should separate your code from its external dependencies. This is good, because it keeps your code isolated and not dependent on the particular details of things like storage.

Does your application use MySql? Does it use MongoDB? It doesn't matter. In your interface, you can specify query methods for objects from a data store, and a method to save objects to your data store. Then implement the interface specifically for the data store. Your interface could be called FooRepository and the implementation MySqlFooRepository or MongoFooRepository. I dislike interfaces called FooRepositoryImpl. This strongly suggests an interface isn't necessary.

Interfaces are contracts that help you preserve your design and to explain what you need out of external dependencies.

Interfaces are good, but so are classes. Don't overuse interfaces, because indirection isn't always necessary or good. It can make your code impossible to follow and understand.

Start by learning principles like SOLID, which will help you understand where usage of interfaces makes sense. Agile Patterns, Principles and Practices is the best book I've read about this. Another book which does a great job of explaining how to properly use interfaces is Growing Object Oriented Software Guided By Tests.

u/vyvantage · 21 pointsr/cscareerquestions

I had a lot of similar issues early on in my career. I seem to type faster than I think, and a lot of little things somehow made it into my code that I wouldn't notice until much later, when I had a lot more code debug through.

Getting into the habit of Test-Driven Development pretty much solved this for me. By writing unit tests in expectation of the functionality of the code I wanted to write, I would prevent myself from building on top of code with bugs or small errors.

A lot of people think TDD takes twice as much time because you write roughly twice as many lines of code, but I was drastically underestimating how much time I was spending debugging. My code gets written and merged in half the time it used to take, and having my code reviewed takes almost no time at all.

TDD is by far the best remedy for small, easy-to-overlook mistakes, but it also forces you to break down problems into much smaller units than you might instinctively. I find that this also helps me solve problems faster, because I prevent myself from immediately attacking the first problem I see, which may actually be a combination of 2-3 problems (which I may have already solved somewhere else). My code is more functional, more organized, less repetitive, and problems get solved much faster.

I highly recommend reading Growing Object-Oriented Software Guided by Tests.

u/MrBushido2318 · 20 pointsr/gamedev

You have a long journey ahead of you, but here goes :D

Beginner

C++ Primer: One of the better introductory books.

The C++ Standard Template Library: A Tutorial and Reference: Goes over the standard template library in fantastic detail, a must if you're going to be spending a lot of time writing C++.

The C++ Programming Language: Now that you have a good idea of how C++ is used, it's time to go over it again. TCPPL is written by the language's creator and is intended as an introductory book for experienced programmers. That said I think it's best read once you're already comfortable with the language so that you can full appreciate his nuggets of wisdom.


Intermediate

Modern C++ Design: Covers how to write reusable C++ code and common design patterns. You can definitely have started game programming by the time you read this book, however it's definitely something you should have on your reading list.

C++ Templates: Touches on some similar material as Modern C++ Design, but will help you get to grips with C++ Template programming and how to write reusable code.

Effective C++: Practical advise about C++ do's and dont's. Again, this isn't mandatory knowledge for gamedev, but it's advice is definitely invaluable.

Design Patterns: Teaches you commonly used design patterns. Especially useful if you're working as part of a team as it gives you a common set of names for design patterns.

Advanced

C++ Concurrency in Action: Don't be put off by the fact I've put this as an "advanced" topic, it's more that you will get more benefit out of knowing the other subjects first. Concurrency in C++11 is pretty easy and this book is a fantastic guide for learning how its done.

Graphics Programming

OpenGL: A surprisingly well written specification in that it's pretty easy to understand! While it's probably not the best resource for learning OpenGL, it's definitely worth looking at. [edit: Mix it in with Open.gl and arcsynthesis's tutorials for practical examples and you're off to a good start!]

OpenGL Superbible: The OpenGL superbible is one of the best ways to learn modern OpenGL. Sadly this isn't saying much, in fact the only other book appears to be the "Orange Book", however my sources indicate that is terrible. So you're just going to have suck it up and learn from the OGL Superbible![edit: in retrospect, just stick to free tutorials I've linked above. You'll learn more from them, and be less confused by what is 3rd party code supplied by the book. Substitute the "rendering" techniques you would learn from a 3d book with a good 3d math book and realtime rendering (links below)]


Essential Mathematics for Game Programmers or 3D Math Primer for Graphics and Game Development: 3D programming involves a lot of math, these books cover topics that OpenGL/DirectX books tend to rush over.

Realtime Rendering: A graphics library independent explanation of a number of modern graphical techniques, very useful with teaching you inventive ways to use your newly found 3d graphical talents!

u/scramjam · 20 pointsr/learnprogramming

There are no good online C++ tutorials. If you want to learn C++ you'll need a good book, C++ Primer 5th Ed. is great for beginners (it's recommended in the wiki!).

u/AnAirMagic · 19 pointsr/java

By Essential Java, I take it you mean Effective Java, right?

u/dgonee · 19 pointsr/cscareerquestions

wow. I'm surprised these two aren't listed yet:

Pragmatic Programmer - this one's at the top of my list. I think that every single programmer should read this book.

Effective Java - although it's written for Java there's some great fundamentals in there.

a lot of people also mentioned Clean Code - while some things in there are important, I personally don't agree with everything that Bob writes about

u/jschm · 19 pointsr/compsci

Effective Java by Joshua Bloch is a really good book and definitely worth reading if you're using an object-oriented language, not just Java. It helped me immensely when I was starting out with how to think about my code and my designs.

u/gwak · 18 pointsr/java

Does not include Java 8 but https://www.amazon.co.uk/Effective-Java-Second-Joshua-Bloch/dp/0321356683 fits the bill of the Java k&R

u/benr783 · 18 pointsr/jailbreak

If you don't have any prior knowledge with programming, I'd first recommend learning Python. If you do have programming knowledge, then jump straight into ObjC. I read these 3 books and my Objective-C knowledge grew so much. I highly recommend reading these books.

Book One

Book Two

Book Three

I'd recommend reading these books in the order I listed them.

After you have read those books, you'll want to get friendly with theos. Theos is what you will use to make your tweaks. Learn how to install/use it here: http://iphonedevwiki.net/index.php/Theos/Getting_Started.

Now, you can look at open source tweaks. There is a great place to see a lot of them: http://iphonedevwiki.net/index.php/Open_Source_Projects.

Once you are comfortable, get started writing tweaks!

Always feel free to PM me if you need any help or have a question. :)

u/ridicalis · 18 pointsr/javascript

The first thing that comes to mind is understanding scope. In particular, if you come from a C-esque language, this might be one of your biggest hangups. Understanding how the scope works before you write your code will inevitably lead to a better-written product.

(tl;dr for the rest of this: know the fundamentals)

The route I came up, I started as an OOP developer and thought JS was a toy language for much of my career. It wasn't until I took the time to understand the language that I came into my own as a JS dev, and it is currently my favorite language to develop for. If you're the book-reading sort, I would suggest the following resources in sequence:

  • JavaScript: The Definitive Guide (David Flanagan)
  • JavaScript: The Good Parts (Douglas Crockford)
  • JavaScript Patterns: Build Better Applications with Coding and Design Patterns (Stoyan Stefanov)

    If you follow this link and look at the Frequently Bought Together section, you'll see that these three form a common trifecta. What you can expect:

  • The first book will give you a fundamental understanding of the language (I would personally skip the DOM-related parts, since that's more framework/environment than language)
  • The second book will tell you "Okay, we just gave you a drawer full of knives, here are the ones that won't send you to the hospital"
  • The third book gives you a rationale for how and why to apply the language in certain ways. It deals with JS-specific issues, and also brings in some of the Gang of Four patterns and other best practices.

    (edit: added link to Amazon page for the first of the three books, fixed formatting)
u/cocorebop · 18 pointsr/reactjs

I keep a copy of this book on my desk. I've never read it but I'll be damned if it's not sitting on my desk.

u/fbhc · 17 pointsr/compsci

I recommend picking up a copy of either Programming Principles and Practice Using C++ or C++ Primer.

​

https://en.cppreference.com/w/ is a reference website, and is the goto resource for quick documentation lookups, etc. However, when learning C++ from scratch, a book is simply the best way to go.

u/Ownaginatious · 15 pointsr/java

Read through this entire book before your program anything big.

u/Alastair__ · 14 pointsr/cpp

I would recommend C++ Primer 5th Edition http://www.amazon.com/Primer-5th-Edition-Stanley-Lippman/dp/0321714113 to get up to speed with C++11 then probably Stroustrup afterwards.

u/NullEgo · 14 pointsr/AskComputerScience

The biggest hurdles I had motivating myself to work on a project was never coding itself. It was always setting up the compiler, IDE, environment, finding something to work on, etc. The biggest one for me is blank page syndrome.

You don't need to convert to linux if you don't want to but it is good to get some experience in it if you can. I spent sometime setting up a headless Ubuntu server to manage my torrents and be network storage. It took a lot of time starting from scratch but the experience has helped me out.

http://www.ubuntu.com
http://www.reddit.com/r/linuxquestions
http://ubuntuforums.org/

If you want to continue with Java (which is a good choice). I believe the most popular IDE is Eclipse. It has great plugin support and has been used everywhere I've been. You can use it for development on android phones as well if you want to play around with mobile development.

http://www.eclipse.org
http://developer.android.com/tools/sdk/eclipse-adt.html

If your college is like mine, most of the later courses in computer science will not involve much coding at all but will involve a lot of math and knowing popular solutions to common problems (sorting, searching, graph theory, combinatorics). If you feel like you need to brush up on a language, there are a lot of web resources and books to help you.

http://www.codecademy.com
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
http://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208/ref=sr_1_2?s=books&ie=UTF8&qid=1382580434&sr=1-2&keywords=head+on+java

Computer science and software development is a broad field which makes scaling it daunting at times. The only way to make it less daunting is to just dive in and do it. Pick a project and work on it. You will encounter problems you have no idea how to solve and that's great because now you've found something you can learn (usually through Google).

Solve problems in manageable bits. If you try to implement your whole program at once it will seem impossible. Implement small portions of your project at a time. Trying to create a Java chat client? Just work on getting some basic sockets to work and build a library you'll be able to use going forward. This will make the goals seem manageable and help you modularize your code. It helped me with not feeling overwhelmed about my project's scope.

I hope I didn't sound condescending. I just wanted to share some things that have helped me. I don't think you are in a bad spot, you just need to stay motivated and find some things to work on to help you learn. If you have any specific questions I can try to help out, but there are other people on this sub that are far more knowledgeable than me.

u/noobzilla · 13 pointsr/csharp

CLR via C# for a better understanding of the runtime you're working with.

C# in Depth for a deep dive into the language and it's features and their details of implementation.

I'd consider those two to be the primary intermediate texts.

u/meathead80 · 12 pointsr/exjw

There's a reason why there is a Javascript book (1096 pages) and another called Javascript: The Good Parts (176 pages).

I think the bible could use a similar treatment.

u/kdawkins · 12 pointsr/csharp

Great question!

A lot of intro classes skip over the 'why' and 'how' of programming languages. Lets backup for a second - the purpose of a programming language (C#, Java, etc.) is to abstract away the actual machine code that runs on the hardware. It would be a very difficult and tedious task to write large applications in machine code. This is where the compiler comes into play; even though we have these great high level languages, hardware still only understand machine code. The compilers job is to take statements that we write in high level languages and turn them into machine code.

Now, keeping in mind the above - back to your question. All of the specific words you are wondering the meaning of are keywords the language has. They are reserved for a specific function/meaning and help the compiler understand various traits about the code you are writing (context, control flow, etc.).

String - A String is a type and a type describes to the compiler what kind of data you are working with. In this case, a string means text (words, sentences). That's why variables that are of type String usually have the " ".

Console - (I am assuming that you are referring to the class here) The console class is a group of methods that tell the compiler how to interact with output on a terminal (the black window with a blinking cursor). You can use any methods (like WriteLine) to tell the compiler what you are trying to accomplish. Classes like this save us a lot of time, there is no need to always re-invent the wheel and write I/O code.

Namespace - This is one of the context keywords I eluded too above, it tells the compiler the scope of variables and expressions that you are writing.

Main() - This is a method name! It is a very important method because it is the entry point for an executable!

? - This is the funny one - The question mark operator is actually shorthand for an if/else control flow fixture. If the variable to the left of it evaluates to true, the first expression is executed, otherwise the 2nd. https://msdn.microsoft.com/en-us/library/ty67wk28.aspx

Pro Tip - MSDN is your friend! Microsoft has a lot of great documentation on C#... how did I find the above link? I googled "C# ? operator". Also, if your text book is not working out for you, see if your library has access to the C# 5.0 in a Nutshell book

u/EraZ3712 · 12 pointsr/cpp_questions

Books are still the best way to learn C++! C++ Primer, 5th Ed. covers all the basics of C++11 from functions and standard library usage to OOP and templates. Effective C++ reinforces good practices and idiomatic C++ that, despite being written for C++98, is just as relevent today as it was then, some of its contents even more so than ever before. Then Effective Modern C++ then does the same for C++11 and C++14 features, building on top of what C++ Primer covers about C++11 and introducing the subtle changes brought about by C++14. This is my primary recommendation for learning modern C++ from the ground up.

But we live in the internet age! Best make use of it! So many wonderful talks from conferences such as CppCon, C++Now, Meeting C++, ACCU and Code::Dive are all available for public viewing. With regards to modern C++, Herb Sutter's CppCon 2014 Back to the Basics! Essentials of Modern C++ Style and CppCon 2016 Leak-Freedom in C++... By Default are great videos to watch. For more specific topics, here is a list of videos that I've seen and personally found engaging, educational, and worth my time to watch (multiple times!):

  • The Exception Situation for exception handling,
  • rand() Considered Harmful and What C++ Programmers Need to Know about Header <random> for random number generation,
  • Everything You Ever Wanted to Know About Move Semantic (and then some) for move semantics (by one of the authors of the proposal that introduced it!),
  • Modern Template Metaprogramming: A Compendium for template metaprogramming,
  • Lambdas from First Principles: A Whirlwind Tour of C++ for lambda expressions (this one is very good!), and
  • Type Deduction and Why You Care for auto and decltype(auto) (I miss Scott :'( ).

    There are also shows such as CppChat and CppCast where interesting events, projects, papers, and people related to C++ are brought up and discussed. There are so many interesting blogs to read!

    And there is always people on IRC (##c++, ##c++-basic, and ##c++-general) and the Cpplang Slack Channel for live updates, discussions, debates, questions, answers, and/or just plain fun with a group of people that ranges from complete noobs who are learning the basics, to committee members and library authors whose names are known across the community. If you ever have a question or need help, these are the places to go and ask (/r/cpp_questions is nice too! :P ).

    And finally, links to videos, blog posts, articles, papers, interesting Stack Overflow questions, almost everything mentioned above is constantly being shared at isocpp.org and on /r/cpp. Subscribe to both to get a constant stream of links to anything and everything about C++.

    Edit: as for C++17 material, the standard is not technically completed/published yet, but that hasn't stopped the community from creating material about it! This paper lists all the changes from C++14 to C++17, with links to relevant papers, and this Git repo provides a simple "then, and now" comparisons of the major changes to the language. Talks describing the changes in breadth and in depth have been given at conferences, and blog posts have been written for a more textual description of the changes. C++17 is not a major update like C++11 was to C++98, but full of fixes, conveniences, more language flexibility and utility, and new toys to play with! If you have a solid foundation in C++11, C++14 and in turn C++17 should be relatively easy to pick up compared to the shift from classic (C++98) to modern C++.

    TL;DR Learn C++11 the best you can. Once you are comfortable with C++11, the transition to C++14 will feel natural, and C++17 will be waiting just around the corner.
u/_____sh0rug0ru_____ · 12 pointsr/programming

Ah, the context of the Uncle Bob rant from a few weeks ago. I don't see how any of the author's particular complaints have anything to do with TDD:

> You therefore are more reluctant to make large-scale changes
> that will lead to the failure of lots of tests. Psychologically, you
> become conservative to avoid breaking lots of tests.

This is a bad thing? If you think a whole lot of tests might break if you make large changes, clearly there are massive side-effects to the change you propose, and then wouldn't a conservative approach to making the changes be the right thing to do?

Personally, I like fixing broken tests when I make large changes. It gives me greater confidence that I won't introduce regressions and allows me to understand the impact of what I am doing and gives me insights to the design of the system, particularly when it comes to the level of coupling.

But, this is the consequence of having a test suite, and doesn't say anything about whether that test suite was created through TDD.

> Sometimes, the best design is one that’s hard to test so you are
> more reluctant to take this approach because you know that
> you’ll spend a lot more time designing and writing tests

The author didn't give an example of this, but I am assuming he probably means GUIs. Well, not everything needs to be tested, and especially with TDD. The key is to separate code that needs to be tested from code that doesn't (or tested in a different way).

When it comes to GUIs, I usually write a "shell" without tests (because really, besides interaction, what are you testing?) and delegate functionality to interior objects which I definitely implement test first.

Another example I can think of is heavily algorithmic code. Like, back in the day, I worked on seismic processing software. Well of course, you don't develop those kinds of algorithms test first (or, maybe in a very different way - the geoscientists involved wrote papers which discussed the math involved before writing any code). But again, like GUI programming, the seismic processing algorithms were isolated from the rest of the system, which was written test first.

TDD works well for some types of code and not others. The requirement of using judgement to decide the development processes for specific cases has nothing to do with the effectiveness of TDD as a general practice.

> The most serious problem for me is that it encourages a focus
> on sorting out detail to pass tests rather than looking at the
> program as a whole.

No it doesn't. Test-first just means you write tests before you write the code. That doesn't mean you can't look at the program as a whole first before that. The first half of Uncle Bob's book Agile Patterns, Principles and Practices is devoted to UML. Yes, you heard that right.

Check out this chapter from that book, Heuristics and Coffee. Before diving into the code, Uncle Bob spends a good chunk of time going through the use cases and coming up with a first pass at a high level structure for the system, in UML.

TDD is one part of "Agile" software development, where the rubber hits the road. But before you start driving, you should have a basic idea of where you are going, which is design. The "epicycles" of TDD then serve to validate that you are on the right course, from minor turn-by-turn directions to occasionally stepping back and making sure you are still on course.

The idea is to come up with as much UML as necessary to get a basic idea of the overall design, and then use TDD to execute and validate that design, incrementally.

The author is taking TDD out of context and missing the bigger picture.

> But the reality is that it’s often hard to specify what ‘correct
> data’ means and sometimes you have to simply process the data
> you’ve got rather than the data that you’d like to have.

What does this have to do with TDD? Again, TDD is a part of a larger process, which involves the business. Software that does "real work" doesn't work in a vacuum. Programmers have to deal with the business to understand the data to the best of their ability, and even still, you'll still make mistakes.

At least the tests document an executable understanding of the data, and test failures can actually give valuable insights on changing assumptions of the data.

u/Neurotrace · 12 pointsr/IWantToLearn

I would suggest starting with C++ since it has classes and beginners seem to grasp classes pretty easily.

  1. Setup an IDE.

    a. Download Visual Studio Express if you're on Windows, CodeBlocks if you're on Linux, or Xcode if you're on Mac.
  2. Work through some tutorials to see if you're really digging it.
  3. Pick up C++ Without Fear and work through the examples.
  4. ???
  5. PROFIT!
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/pkamb · 11 pointsr/simpleios

The Big Nerd Ranch guide to Objective-C Programming is what you need.

It covers the basics of C programming (variables, loops, etc.) before quickly moving on to Mac and iOS specific tutorials. Small book, short chapters, and easy to read.

u/Professor_Red · 11 pointsr/learnprogramming

Do you already know how to program?

If not, then read Structure and Interpretation of Computer Programs.

If yes, then get C++ Primer by Lippman.

u/GeneralMaximus · 11 pointsr/cpp

The newest edition of C++ Primer also covers C++11. I'd recommend reading that before reading TCPPPL. See http://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113

u/yamamushi · 11 pointsr/cpp

I would supplement your class with one of the many great C++ books out there, because there are many ways to learn C++ but few of them are good (or even "right") ways.

You should be careful to distinguish between best practices from C++ and the new ones in C++11, and I've found that many courses tend to teach C++ as if it's just C with some extra features.

Of note, some really good books are:

u/iamthatis · 11 pointsr/apolloapp

Hey, I'm flattered you care what I think!

I learned basic Objective-C on my own in high school (read this one during boring classes), and then went on to do a Bachelor in Computer Science at uni. Learning some basic programming really helps, because at least at my school it was very much fundamentals for the full first year, and if you understand them well enough it'll be a breeze.

That being said (and take this with a major grain of salt, as it's just me) I wasn't that big a fan of school. I got into and taught myself iOS development as my school, like most, was mostly based around Computer Science theory rather than practical applications and programming. I did learn some valuable things about algorithms and whatnot, but it's nothing that I couldn't have taught myself and everything that I've found to be "marketable" (things that have helped me get jobs) have been self-taught.

But university's awesome for a whole wealth of reasons (met awesome people), and you may adore it, I'd just be very careful not to learn a wealth of knowledge but have little experience applying it to anything concrete. Employers appreciate the latter far more (my GPA was rather meh, and I got some really cool jobs).

I do most of my work alone, but a lot of smart people have helped me along the way. :) It's just how I personally like to work at the moment. If you have any more questions I'm happy to answer. r/cscareerquestions as mentioned is a great resource too!

u/brotherMotty · 11 pointsr/learnprogramming

(Copy pasting from other thread).

I stand by this JS roadmap, especially because I tested so many different free courses online (and subsequently wasted a bunch of time).

Rithm (https://www.rithmschool.com/courses)

  • Awesome for going from 0 to beginner/intermediate; possibly the best fundamentals I've found

  • Doesn't hand hold so it teaches you how to think

  • Writing is friendly and understandable

    Eloquent JS (http://eloquentjavascript.net/)

  • Great for solidifying intermediate

  • This is when you begin to learn "real" coding

  • Can be difficult to grasp, but with a solid understanding of the fundamentals, you should be good

    Secrets of a JS Ninja (https://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X)

  • Great for going from intermediate to advanced

  • If you've methodically mastered the previous two, you will be good. Really deepens your understanding and sharpens skillset

    Finally, if you supplement all this with Codewars (https://www.codewars.com/ , allows you a bunch of puzzles/katas to check your level as you progress; great because you can go back and see how your skills have actually improved, you'll definitely cringe at some of your old code, ha), it's a pretty fucking awesome roadmap to get you from 0 to advanced, though like most things it'll take a lot of work.

    I've also heard good things about Free Code Camp, though I've only checked it out briefly so I can't give in-depth comments on it.

    Hit me up if you have questions, always down to help others get started.
u/gorset · 10 pointsr/programming

Ok, let's see. A few quick points:

Rooted in in standard, everyday mathematical notation? public static final volatile interface abstract class transient inner class inner anonymous class objects values boxed values..... etc...

Java Generics has drawn heavily from the functional programming camp which is based on lambda calculus. See google tech talk: Faith, Evolution, and Programming Languages

Extremely easy to read and understand? Go read Java Puzzlers and Effective Java to see how many easy mistakes you can make.

Static types enables blablabla...? Not possible without static typing...? Does he realize that tools like Eclipse grew out of a smalltalk project and that smalltalk pioneered automatic refactoring ages ago? Smalltalk is one of the most dynamic language around, and it's more than 30 years old.

Most bugs are found at development time with java? That's not my experience :-)

Simple puzzle: for which values for someInt does this code fail?
int myPositiveInt = Math.abs(someInt);
assert myPositiveInt >= 0;

u/Hafnium · 10 pointsr/learnprogramming
u/JackBeePee · 10 pointsr/learnprogramming

http://www.amazon.com/dp/0321714113/ C++ Primer is what I bought and I found it very useful. It covers all the c++11 stuff

u/nasdas · 10 pointsr/apple

> What did you use to learn how to write the code?

I read this book to get started: Programming in Objective-C by Stephen G. Kochan

I highly recommend it for starters, since it provides lots of easy explanations, exercises and guides.



And since you need a 2D physics framework to program a game, I decided to use Apple's native framework called SpriteKit. I learned SpriteKit's basics with YouTube tutorials and this free online course.
I also recommend everyone to google some open source games/apps to learn some programming methods & techniques.


> What tool was the app built in? XCode? Unity?

Xcode.

u/MyKillK · 10 pointsr/skyrim

Today they are saying the problem was actually a virtual function not being overloaded properly.

> Long story short, diffing the 1.1 and 1.2 executables after seeing all the bug reports to see if I could fix any of them. There's a MagicTarget interface class that is implemented by everything you can damage. One of the virtual functions on that class is used to calculate resistance (as a scale factor), and the diff showed that for the versions used by Actor (base class for Character/PlayerCharacter) it had fallen back to the base class' implementation of "return 1" instead of the larger function before. A new virtual function with roughly the same code as the old MagicTarget function appeared on Actor, but it isn't being called. It seems like someone accidentally misnamed or changed the signature of that function in Actor (or vice versa), so it isn't overriding the function in the interface.

http://forums.bethsoft.com/index.php?/topic/1288179-wipz-skyrim-script-extender-skse/page__view__findpost__p__19568346

Bethesda doesn't even have an automated unit testing system to make sure their virtual function calls are hitting the proper targets. Simply unbelievable for a project as large as a huge open world AAA game that probably has like 5 million lines of code. I suggest we all send Bethesda this book for Christmas: http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627/ref=sr_1_3?ie=UTF8&qid=1322766398&sr=8-3

u/BroDudeGuy · 10 pointsr/iOSProgramming

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

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

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

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

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

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

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

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

u/FarkCookies · 10 pointsr/programming

Best book to start with C#/.net is CLR via C#. And to keep yourself up to date you can read MS articles about new features in new versions of C# / .net.

u/tasulife · 9 pointsr/arduino

Learning electronics is a lot like music. There is an insane amount of information, but if you get an economic working knowledge under your belt, you can really do some amazing things. In order for you not to get lost in the rabbit hole, I will provide you these methods of learning practical hobby electronics.

First, is simply just a suggestion. There are two "domains" of electronic thinking and analysis: digital and analogue. Fuck analog right in its dumb face. The math used in analog is fucking super duper hard, and analog circuits are prone to interference problems. Digital is where you want to be. It's vastly simpler to use programmable digital parts, and analyze digital circuits. Don't get lost in AC equations of capacitor, or the god damned transistor equation (seriously, fuck that. )

Okay here is how I learned hobby digital electronics:
First buy this, and go through all the examples in the workbooks. When you learn electronics you 100% HAVE TO DO HANDS ON LEARNING! DONT LEARN IT FROM A BOOK! MAKE CIRCUITS!
https://www.amazon.com/Radio-Shack-Electronics-Learning-20-055/dp/B00GYYEL8I

At the same time, read this (which is a good topical explanation, and free):
http://jacquesricher.com/NEETS/

And buy and read this (which is an EXCELLENT formal introduction into the physics):
https://www.amazon.com/Practical-Electronics-Inventors-Third-Scherz/dp/0071771336

Also you are going to learn how to program, which is an entirely different topic. Programming and hobby electronics make you a master of the universe, so it's worth it. I learned programming in the electronics domain and it was awesome. I made a microcontroller FM synthesizer:
https://www.youtube.com/watch?v=3TvuzTK3Dzk

So basically, the way I learned programming in general was self-teaching with books. Again, you have to do it hands-on. Actually complete the examples in the books, and you'll be fine.
First, learn procedural c programming using C primer plus. Buy an older version so it'll be super cheap:
https://www.amazon.com/gp/offer-listing/0672326965/ref=sr_1_3_twi_pap_1_olp?s=books&ie=UTF8&qid=1465827790&sr=1-3&keywords=c+primer+plus

Next, learn Object oriented programming using head first java. They do a great job of tackling OOP, which can be a difficult thing to learn.
https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208/ref=sr_1_1?s=books&ie=UTF8&qid=1465827860&sr=1-1&keywords=head+first+java


You're overwhelmed because they're deep topics. But, seriously, its the most fun shit ever. You'll love learning how to do it.


u/daaa_interwebz · 9 pointsr/csharp

> Clr via c#

amazon link for the lazy

u/tmckeage · 9 pointsr/csharp

I think some of these are a bit to specific for an entry level position where they know you have no experience ahead of time.

Whats your background in strongly typed languages?

This is a copy paste from a previous comment I made to a similar question I saw in the past:

If they are aware of your lack of knowledge I would focus less on the specifics of C# and more on programming basics, principals of OOP, and what it means to be a strongly typed language...

  1. have a strong grasp of the following: if, else, switch, while, do, for, foreach
  2. understand how to properly use recursion
  3. understand the difference between a reference and value type

  4. Know what the following are: Constructor, Property, Method, Member
  5. Understand how the class object is instantiated
  6. Have a basic understanding of inheritence and interfaces and how they work
  7. Have a basic grasp of the following keywords: public, private, class, new, static, void

  8. know the majority of the c# primatives (int, bool, long, short, string, etc)
  9. Understand how StringBuilder, DateTime, and TimeSpan are used
  10. Understand how a string is an immutable reference type

    I suggest the first four chapters of
    http://www.amazon.com/C-5-0-Nutshell-Definitive-Reference/dp/1449320104

    Also as a note I was in a similar situation, hired as an intern with no c# experience and basic python experience. They know you don't know shit, whats important is when someone explains something to you that you have the vocabulary to understand what they are saying.
u/arsenalbilbao · 9 pointsr/learnpython
  1. if you want to LEARN how to write programs - read "Structure and interpretation of computer programms" on python - SICP (project: you will write an interpreter of "scheme" programming language on python)

  2. if you want to TRAIN your OOP skills - Building Skills in Object-Oriented Design (you will code 3 games - roulette, craps and blackjack)

  3. Helper resources on your way:
    3.1. Dive into python 3 (excellent python book)
    3.2. The Hitchhiker’s Guide to Python! (best practice handbook to the installation, configuration, and usage of Python on a daily basis.)
    3.3 Python Language Reference ||| python standard library ||| python peps

  4. if you want to read some good python code - look at flask web framework (if you are interested in web programming also look at fullstackpython

  5. good but non-free books
    5.1. David Beazley "Python cookbook" (read code snippets on python)
    5.2. Dusty Phillips "Python 3 Object Oriented Programming" (learn OOP)
    5.3. Luciano Ramalho "Fluent python" (Really advanced python book. But I haven't read it YET)

  6. daily challenges:
    6.1. r/dailyprogrammer (easy, intermediate and advanced challenges) (an easy challenge example)
    6.2. mega project list

  7. BONUS
    From NAND to tetris ( build a general-purpose computer system from the ground up) (part1 and part2 on coursera)
u/atdk · 9 pointsr/Python

Here is my list if you need to become a good programmer with Python as your language of choice.

Follow this order for rigorous course on learning Python thoroughly.

u/kabbotta · 9 pointsr/cpp

If you already know the basics of programming, then the C++ Primer is also an excellent introduction. The 5th edition is updated to include C++11.

u/DevilSauron · 9 pointsr/programming

I've been personally learning C++ from this book and it's really good. The only problem is that it talks only about C++11 and not 14 and 17 versions, but these new versions are relatively minor compared to C++11 and there's no better and more comprehensive book that talks about the most modern versions...

u/calp · 9 pointsr/java

I think the book people normally recommend for this is Effective Java by Joshua Bloch

u/K60d56 · 9 pointsr/programming

> But I've come to avoid mocking as much as possible as tests based
> on mocks don't prove anything, except that my code works under
> the assumptions i made

This isn't really how mocking is supposed to be done. I would recommend reading Growing Object Oriented Software Guided By Tests, written by the authors of JMock, and the people who originally came up mocking as a test practice.

In short, you don't mock external services or anything you don't own. You should mock an interface you created and that you own, that defines the contract that external dependencies must meet to work with your class on your terms (aka, ports and adapters). This is the essence of dependency inversion. Mocks ideally guide development towards DI.

The adapter is concerned with making sure that the external dependency actually conforms to the contract defined by the interface that is mocked, and adapter code must definitely be integration tested. And the integration test now needs only to verify that the adapter meets the terms of the contract. This separates testing the logic of the system (where TDD fits in) from tests of the integration with the external environment (functional and integration tests). However, the authors of the GOOS book recommend writing the user acceptance tests (functional tests) before you write the unit tests (which they lump into TDD, in a more holistic sense).

u/jbacon · 8 pointsr/java

Since you're already a programmer: Effective Java, 2nd Edition. That's pretty much your definitive Java language and Java best practices reference.

I would not recommend the Head First series - those are more geared to novice programmers. I don't think you'll have much trouble picking up basic object oriented concepts, which is probably the only thing that book might help you with.

For general programming reading, I recommend The Pragmatic Programmer - great read, lots of excellent advice in there.

u/aaarrrggh · 8 pointsr/PHP

I was right where you are now about 6 months ago. I'd done some unit tests in previous projects and could kinda see the point in using them for certain things, but I didn't understand the need for writing tests first, and didn't understand the value in the red, green refactor cycle.

I can tell you six months ago I started working for a company that believes heavily in TDD, and after going through the initial pain barrier, I now can't see any other sane way of writing code.

There were a few hoops I had to leap through in order to get to this point. One of them was due to the fact that I simply wasn't testing things correctly in the past. You should always isolate your tests to the EXACT thing you are testing in each case - so you should never really be connecting to the database, or depending on other modules etc. Any dependencies therefore need to be injected into the system under test and mocked accordingly, so you know you are isolating the thing you want to test.

You also should never be testing implementations, which is why you should never have to test private methods. You only care that the public methods of a class will return whatever you expect under the conditions you are testing for. This is crucial, because it's this that makes it really easy to refactor your code later.

When you take this approach for everything you do (combined with doing red, green, refactor), you find yourself soon entering a luxorious position of being able to refactor things at a higher level just to make things cleaner and easier to understand.

Just this week I took a system with over 2500 unit tests and refactored some of the fundamentals of that system - found some abstractions and moved them higher up the chain + extracted some interfaces to make the code easier to extend without modification, and all the while I knew everything was working because my unit tests proved it. This is part of the core of a system that deals with literally millions of users each day (seriously), and I did so without fear.

This approach means the code is constantly getting cleaned and tidied up as we go along.

The red/green/refactor approach works something like this:

  • write a failing test (this is important, because simply going for a green pass right away can sometimes bite you - perhaps the test is providing a false positive? You should always see the test fail first for this reason)

  • Make the test pass - I tend to do this in a sane way, but I don't try to engineer my code so much at this point. Just get it passing. The key to this is to only test the expected behaviour of the class, not to test the implementation - we only care about the result, not how the result is achieved. Doing this brings us to the next part:

  • Refactor. This means we can do obvious stuff like removing duplicate code, and then generally chopping and changing stuff around to make it easier to understand and less complicated.

    The refactor step is crucial, but because your tests should be rapid (because we've mocked out all dependencies), you can refactor in very small steps and run the tests each time you make a small change. This way you can neaten up and tidy your code in small, safe, incremental steps, and you keep doing so until you are happy that it's easy to understand and give you the flexibility you need. Once you're happy, you move onto the next test.

    The entire cycle is quite quick actually - much of the complexity comes down to to learning the best way to test and how to mock out dependencies etc.

    Our suite of around 2500 tests takes about 15 seconds to run, but as I'm working on a feature I may only be running one test at that point, so it'll usually take less than a second to run the tests as I'm refactoring. Toward the end of the process I run the entire test suite to make sure everything still passes.

    I went from not believing to seeing this work in practice, and now I honestly don't think I can work anywhere that doesn't do TDD. I would be happy to teach other people how to do it in a company, but as mad as it sounds, to me now, not doing TDD is like saying you don't want to use version control. This has all changed in the last 6 months, having seen it work in practice.

    Here's a book I highly recommend: http://www.amazon.co.uk/Growing-Object-Oriented-Software-Guided-Signature/dp/0321503627

    I love the title of that book "Growing Object Oriented Software Guided By Tests" - this it the thing - working this way allows you to "grow" your software, and the tests really do guide you towards the solution you actually need (this is powered by the refactor step).
u/xxf1sh3rxx · 8 pointsr/jailbreak

I'm currently using Objective-C Programming: The Big Nerd Ranch Guide

So far I haven't learned much that I didn't already know from Java or Python, but if you don't have any programming experience I'd say this is a great start

u/evanwalsh · 8 pointsr/ios

The Big Nerd Ranch book on Objective-C doesn't assume you have any programming experience and I've found it helpful for someone that's not very familiar with compiled languages. Also, it was published very recently, so it stands a chance at being most up to date.

u/drjeats · 8 pointsr/gamedev

C++ Primer is one of the usual go-to books for beginners.

[EDIT] Thank you /u/xgalaxy for pointing out I had linked the wrong one. Get this one: http://www.amazon.com/Primer-5th-Edition-Stanley-Lippman/dp/0321714113

u/solid7 · 8 pointsr/learnprogramming

> I'm taking a Unix class in c/c++.

Those are two very different things. Please clarify.

> We are using the book by Sobell. I want to ask if I should read the book?

Uh.. if it's required for your class, yes you should obviously read it. If you are looking for supplemental material, I'd suggest:

u/shankrabbit · 8 pointsr/csharp

CLR via C#


This is the only book you need as a beginner to C# who already knows other languages.

What are you waiting for? Go get it! Read it! And impress the shit out of your employer.

u/cbm1745 · 8 pointsr/aggies

C++ is the language used! It's not too hard of a class if you have any programming experience. And even if you don't it's not bad, it's meant to teach you the basics. I went through some of this book he summer before and learned almost everything we did in that class ahead of time and it made it a breeze! Good luck!

u/TransFattyAcid · 8 pointsr/webdev

The agile principles are based around the idea of iterative development. This invites what you're calling rework to make the product the best it can be.

Obviously, you're coming at this from a place of frustration because you want to meet deadlines but the "simple" solution is to build all these steps into your estimates. If you're not setting the deadlines, then you need to be up front with your manager about what you can get done in the given time. Maybe it'll work, but not be clean code (the P.S. here is that after it ships, you need time to make it clean). Maybe you can get features X and Y done, but not Z.

Refactoring and code reviews are part of the job. Yes, your manager is going to make suggestions you might not agree with and, yes, the senior devs are going to send you back to the drawing board sometimes. Sometimes it's because they're jerks and sometimes it's because experience has taught them something.

All in all, I'd recommend reading any of the following by Robert Martin. Clean Coder is perhaps most relevant to estimates and deadlines but they're all really helpful.

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/LaurieCheers · 7 pointsr/programming
u/b_bellomo · 7 pointsr/learnjava

I don't know what is that book's style but these free programming books/courses will strengthen your knowledge of the basics and introduce you to more complex stuff :

u/trimatt · 7 pointsr/java

If you want to gain a bit of confidence in writing good Java code i'd start by reading Josh Bloch's Effective Java. It's a fantastic reference manual to have on your desk...

Check it out here

u/ForeverAlot · 7 pointsr/cpp

There are more bad sources of learning C++ on the Internet than there are good ones. I am not familiar with LearnCpp.com but looking at just a handful of its chapters it is misleading, out of date, violates a number of C++ idioms, and focused on the wrong things wrt. learning C++ specifically.

C++ Primer 5th ed. is a very good book for getting started with modern C++.

u/pureofpure · 7 pointsr/cpp

C++ Primer (5th Edition) it's good to start https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113/ref=sr_1_1?ie=UTF8&qid=1496834580&sr=8-1&keywords=c+primer

Try to avoid books like "for Dummies" or "Teach Yourself".

u/bixmix · 7 pointsr/VoxelGameDev

Steps to build your own engine from scratch with no knowledge:

  1. Math: http://amzn.com/0201558025
  2. Programming: http://www.amzn.com/0321751043
  3. Intro Language: http://www.amzn.com/125785321X
  4. C++ Language (Reference Books):
  5. OpenGL Intro: http://opengl-tutorial.org/
  6. OpenGL Reference: http://www.opengl.org/sdk/docs/
  7. Scour the internet for voxel info

    Note: Most people who decide to put together a voxel engine take about 2 years from inception. At the end of the two years, they will have a library they could use to create a game. They've also already made it through the first 4 steps when they start.

    Without a degree program to solidify the concepts, I suspect that the first 4 steps will take at least 2-3 years: about 10-20 hours per week each week.
u/Zweifuss · 7 pointsr/cpp

C++ Primer (https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113/) as /u/sempuki mentioned.

It's clearly written and is really good at teaching you modern c++ concepts and conventions, while many other c++ books are actually "program c using c++" books.

u/emcoffey3 · 7 pointsr/webdev

I'm a big fan of JavaScript: The Good Parts. I'm not sure if it is quite intermediate, but it is a terrific (and short) read.

Secrets of the JavaScript Ninja is a bit more advanced. It's written by the guy who created jQuery. I found some of the coding style to be sort of strange, but it does have a lot of great information.

u/liaguris · 6 pointsr/learnjavascript

I learnt ( in fact I am still learning ) JS from YDKJS ( all books read almost 80% , you can view them legally here ) , EJ (read almost 60% , you can download it legally from here , the site of the book is here ) and MDN , with a background of : I know what if and for does and i also know what a function is . My advice is to jump from one resource to another if you feel you are stuck . Also I did not read them linearly . Another book that is useful although a bit outdated is DOM enlightment (read almost 20% of it) . I do believe that professional JS , and javascript.info are also worth to take a look .

Other resources for JS are a meh from me .

I have no clue about the third book in the video .

edit : js the definitive guide is also worth looking although a bit outdated .

u/iissqrtneg1 · 6 pointsr/csharp

Learn what's happening at the metal.

Edit: I'll be a little more helpful and say read this book: https://www.amazon.com/CLR-via-4th-Developer-Reference/dp/0735667454 (not an affiliate link)

u/affectation_man · 6 pointsr/programmingcirclejerk

Um... that's what the 2012 book Secrets of the JavaScript Ninja is all about. It chronicles Intel's development of the Core 2 architecture, their first to have JS inside, which enabled them to give AMD a trashing they have still not recovered from.

u/rjett · 6 pointsr/javascript

Advanced

Medium

Old, but probably still relevant

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

Docs

The one that everybody recommends

HTML5 spec

HTML5Rocks

Latest Webkit News

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

u/yanalex981 · 6 pointsr/learnprogramming

http://www.amazon.ca/Primer-5th-Edition-Stanley-Lippman/dp/0321714113

There are two books with very similar names (C++ Primer, and C++ Primer Plus), and usually, this is the one that's being referred

u/Azzu · 6 pointsr/Cplusplus

> What's next?

I read plenty of websites to help out new or aspiring programmers, but this theme repeats like a thousand times and I just don't understand it. It's probably an issue with the system, but even then I still don't get why people are this way, it's as if they are not thinking...

Anyway. "What's next?" is immediately obvious to any rational person.

> I'm interested in making a game.

You do that. Tadaaa fucking done why did you even ask.

The problem is people are learning stuff for learning's sake. What the flying fuck? I just don't get it. You should learn stuff because you want to do something. You, OP, actually know what you want to do, making a game, so just... start? You will encounter plenty of problems along the way. You will research those problems and learn a huge amount.

If you notice you are lacking fundamental skills and just don't make any progress, read a fucking book. Have people forgotten that there are books on topics to learn those topics? I entirely taught myself C++ just by reading this, I have infos on how to get it if you want.

Also Go to StackOverflow and read the top 1000 questions (or how many you want).

There are so many resources on the internet... so many blogs to follow and read, so many tutorials to do.

I'm a little bit sorry that this is a rant, but I also included plenty of information so don't you fucking complain.

u/maertsoi · 6 pointsr/learnprogramming

I'm kind of in shock no one has mentioned getting a good programming BOOK.

book!

Read it. Do the examples, answer the questions, experiment and break stuff.

u/ProgrammingThomas · 6 pointsr/iOSProgramming

Apple's own guide to Objective-C isn't awful. If you need some quick comparisons between Objective-C and Swift, I wrote up a bunch of equivalent code snippets a while back. You may also find the following useful:

u/MoTTs_ · 6 pointsr/learnjavascript

I would say either JavaScript: The Definitive Guide or Speaking and Exploring JavaScript

u/RecycledAir · 6 pointsr/javascript

I've recently been working on my JS skills and heres a few resources I've found super useful:

Books:

Javascript Patterns

Javascript: The Good Parts

Javascript: The Definitive Guide (While an exhausive resource on the topic, this one is a bit verbose)

Web:

Mozilla's Javascript Guide (One of the best free online javascript guides/references.

How to Node (Tutorials on server-side Node.js)

Daily JS (Interesting JS related news)

Echo JS (Similar to above but updates less frequently)

Hacker News (This is more general tech news but there is a ton of useful web stuff, especially as node.js is currently a hot topic. Reddit actually spawned from HN)

Online Videos (free)

Douglas Crockford's Javascript Lectures (I would recommend these to anyone getting into javascript)

u/NisusWettus · 6 pointsr/csharp

C# in Depth likely isn't what you need. That's more aimed at proficient coders that want to understand the nitty gritty/internals.

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin) is very popular. Not specifically aimed at C# (a lot of the examples are Java) but it's guidelines about how to write clean code in general. The lessons carry over to all/most languages. That's probably more the sort of thing you want.

https://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

Robert C. Martin aka 'Uncle Bob' also has a few other books but I've not really looked into them. e.g. this one is focused on C# and looks decent based on a quick skim of the index but I've not read it:

Agile Principles, Patterns, and Practices in C# (Robert C. Martin)

https://www.amazon.co.uk/Principles-Patterns-Practices-Robert-Martin/dp/0131857258

u/obeleh · 6 pointsr/compsci

Perhaps offtopic but... Some books you should read regardless of CompSci branch

u/EughEugh · 6 pointsr/programming

There are several good books on designing good software:

Code Complete

Design Patterns

Refactoring

u/MassiveFlatulence · 6 pointsr/java

Since you're experienced, the best way to learn Java is to start coding in it. Create a simple blog in Java using basic servlet + JSP hosted in Tomcat + JDBC connection to some free database (Postgresql / H2). You will find issues along the way which you can Google around. The best thing about Java is that most questions already answered in StackOverflow. After you've done with it, go and read Effective Java then refactor your project to follow the best practice mentioned in the book. After that you can try to learn more libraries / framework eg. create a new reporting system and communicate the blog with the reporting system through JMS. Adding dependency injection using Spring and many more.

u/SanityInAnarchy · 6 pointsr/learnprogramming

I don't think there is anything you need to cover before the class, if it's a good class. However, I would suggest the following -- not before class, but probably before, during, and after class:

  • If the class goes reasonably well, pick up this book. It's a collection of best practices for Java. You will learn bad habits in class, and this will help. (It's not necessarily the class's fault, it's that Java warps your brain in all the wrong ways.)
  • For Java, learn Eclipse, and learn it well. You may find you prefer other IDEs, but Eclipse is among the most popular, it's open source, and Google builds things on it, like the Android and Dart SDKs.
  • Learn source control. It doesn't matter which you pick up first -- in my opinion, SVN was easier to learn, but Git is the best all around, once you get past the learning curve. And once you learn a distributed VCS like Git, you can use it on class assignments -- which I recommend doing, whether it's required or not. (And always make sure you tell your VCS what to ignore. Like, ignore .class files.)
  • That said, learn to do things without the IDE, so you understand what the IDE is doing for you.
  • Extra credit: Learn other JVM languages, like JRuby, Clojure, or Scala. In particular, learn at least one with a good REPL. This may be confusing, because you're using more than one language at once. But it also helps when you want to explore how a Java library actually works, in real time. I haven't found a good Java interactive shell, which is why I use JRuby's IRB for that.
  • Google any term I used above that you don't understand.
  • My experience with a community college was much worse than my experience with a university. If a university isn't practical, I understand... If it fails you -- that is, if you find yourself asking the professor questions that they can't answer, or if their answers don't make sense, don't be afraid to come back here or to StackOverflow.
  • If the in-class projects aren't big enough, start one out of class! Practice is what makes you a better programmer and better with the language, and the best way to practice is to give yourself a project that you're actually interested in. Work your way up from Hello World, but if you find yourself not wanting to practice, you probably need an exciting project.
  • Don't stop with Java. Learn other languages, learn other ideas. That said, when you find something you're really into, specialize and master it -- but you'll still always need to be stepping outside of that. Keep in mind that your skills in all likelihood will become obsolete. You don't need to chase every programming fad, but you do need to stay on top of the pulse of the programming community.
u/Zippy54 · 6 pointsr/Android

This is from my own personal experiences. Please, learn Java first, I cannot stress this enough. Knowing Java helps so much with design, I struggled with basic Java knowledge and hated programming for Android; I recommend Effective Java 8th Edition .

Be warned though, it's not very friendly to novice programmers, so I'd make sure you have experience in any 'C' based language beforehand - C++ would be a great help.

I'm really not trying to be a dick here, but you really do need to learn Java to a sufficient level. Do you know: Java Inheritance, Static Functions, Abstract Classes, 'For Each' operator? Mutaor Methods? Trust me, this will all come up in Android and more over, Android uses most of Java's library.

Please, I don't want to sound like a huge Dick, but this is crucial. Let me put this is into a metaphor. Learning the Android API without Java is pretty much suicide (I can't think of any good metaphor(s)).

I hope this helps, Oh and Inbox me on Reddit - I might have a few books for you.

u/chapmbk · 6 pointsr/java

The most important thing when looking for a Java developer job is to actually understand Java. I don't mean knowing how to write code in Java. I mean knowing how the language works. What is the purpose of equals/hashCode, how to make object Immutable, what is the String pool, etc...
You would be surprised how many developers think they understand the language and have no clue how it works.


  1. Read and understand effective java and clean code.
  2. Be familiar with and excited about automated testing. You should aim for 80% - 90% unit test code coverage in your projects.
  3. Be familiar with static code analysis tools. PMD, FindBugs, etc...
  4. Understand the benefits of code reviews. Be familiar with popular code review tools. Crucible, etc...
  5. Have a degree.
  6. Be familiar with current technologies. Show that you research new technologies on your own

    You do not need all these things to get a job. There are plenty of large IT organizations that will just hire lots of people to fill seats and then drop them if they don't work out. However, if you want to get a job at a company that is serious about producing quality code, you need to show that you are serious about being the best developer you can be. Getting a job at an organization like this will not only pay better but you will also have the opportunity to learn from all the highly skilled developers that work there.
u/fatboyxpc · 6 pointsr/PHP

[Test Driven Laravel] is an excellent resource for people who are new to testing, even though it is tailored to Laravel. There are plenty of concepts you can apply to other languages/frameworks, though.

[Growing Object Oriented Software Guided by Tests] is a book that really helped me understand testing, especially test first. The examples in the book are in Java, but again, the concepts apply to other languages. The Test Driven Laravel link I provided is very clearly inspired by that book.

I'm really surprised nobody has included the books by [@grmpyprogrammer] since he's fairly well known as the "testing guy" in the PHP community. I believe all of his books are on his [Leanpub].

[Test Driven Laravel]: http://testdrivenlaravel.com

[Growing Object Oriented Software Guided by Tests]: https://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627/ref=sr_1_1?ie=UTF8&qid=1525976055&sr=8-1&keywords=growing+object+oriented+software&dpID=51fUKOog3VL&preST=_SX218_BO1,204,203,200_QL40_&dpSrc=srch

[@grmpyprogrammer]: https://twitter.com/grmpyprogrammer

[Leanpub]: https://leanpub.com/u/chartjes

Edit: Apparently I needed to refresh before posting as other people have linked up to Grump Programmer.

u/woooter · 6 pointsr/apple
u/ziptofaf · 6 pointsr/learnprogramming

Well, time to get a good C++ book then. Here's a decent one:

https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113

I am not even kidding here - programming is not something you learn in a day or two. It's a process that lasts hundreds of hours. Meaning you will need to practice and for that you need resources.


Well, to be fair - it really depends on your aptitude and a professor in question. If you were just told to have specific output but nobody has explained basic syntax ahead of the time then it's a shitty course. But if it was covered during the lecture and you just dozed off then it's on you. Well, one way or another it means you will need an extra time at home with a decent resource to work out your problems and learn programming.

Also - be a bit more specific. What kind of programs are you trying to write and what actually causes you problems? Literally not knowing how to write a line of C++? Or not being able to understand a problem and finding a solution to it?

u/tango_oscar · 6 pointsr/gamedev

Best book to learn C++ in my opinion is Accelerated C++: Practical Programming by Example (350 pages). Right from the start, it teaches people to use STL containers and other C++ constructs, instead of teaching "C with classes" like many other books (including Thinking in C++). Unfortunately, it is outdated so you will have to learn about new features of the language. You can use A Tour of C++ for that(180 pages).

If you have the time and will to learn moder C++ from the start, then I would recommend C++ Primer. Similar in approach to Accelerated C++ but longer(970 pages).

u/kurogashi · 5 pointsr/programming

Have a look at Effective Java by Joshua Bloch - Each chapter in the book consists of several “items” presented in the form of a short, standalone essay that provides specific advice, insight into Java platform subtleties, and outstanding code examples. The comprehensive descriptions and explanations for each item illuminate what to do, what not to do, and why.

::edit:: wrote Essential instead of Effective

u/RG2000 · 5 pointsr/programming
u/UnspeakableEvil · 5 pointsr/java

Effective Java by Joshua Bloch.

u/videoj · 5 pointsr/learnprogramming

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

Design and Testing here.

Programming Languages here.

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

u/sh0rug0ru · 5 pointsr/java

Read lots of code and read books to get multiple viewpoints. This is a deep topic which will require more than superficial online reading.

Check this out.

Books I have found useful:

u/jesyspa · 5 pointsr/learnprogramming

If you're very far already (using the language for over a year, for instance) you could try to fix the gaps by watching Going Native talks and reading A Tour of C++. If you're just starting out, I suggest either getting C++ Primer or The C++ Programming Language and working through that.

u/FifteenthPen · 5 pointsr/learnprogramming

I wouldn't recommend "The C++ Programming Language" as a learning resource, though it's a great reference for once you've got a decent understanding of C++. I've tried reading that, Accelerated C++, and C++ Primer, 5th Ed., and C++ Primer was by far the most useful, and once I finished it I finally felt like I had a fairly solid grasp of the basics of C++.

u/discotuna · 5 pointsr/learnprogramming

For the actual programming, there's the Juce C++ library which is pretty essential. If you spend a few minutes scouring the website, he recommends some good resources (both digital and print) for learning C++.

For DSP knowledge I would start with DSP Guide because it's just bloody incredible.

As far as books go, do you mean books on audio programming or C++? I started learning C++ with C++ Primer, but for audio programming both Designing Audio Effect Plugins In C++ and The Audio Programming Book have been invaluable.

Also check out the KVR Developer Forum!

u/Mr_Dionysus · 5 pointsr/learnprogramming

Absolutely! You should always understand the simple features of a language before you move into more advanced measures.

This is how I first learned C++:

  • I bought a book

  • I installed Notepad++ and mingw

  • I hand wrote every exercise in the book. This is the key step. Writing the code by hand, and then compiling it from the command line.

  • Once you understand the command line, move on to makefiles. A simple way to automate the build process, that doesn't give you the luxury of an IDE.

  • Learn how to use the debugger! It is your friend, and most IDEs have debugging features built in.

  • Once you understand everything under the hood, get yourself a nice IDE. I use Code::Blocks myself, but other options are Eclipse, Visual Studio (Windows only), and Netbeans.

  • I currently almost never program outside of IDEs for a single reason: Code completion. Once I know the semantics of a library, having to type a whole function call or whatever is just a waste of time. Read the docs (thoroughly!), is the moral of this bullet point.
u/DrDray0 · 5 pointsr/learnprogramming

C++ Primer 5th Edition by Stanley B. Lippman. After years of fooling around with C++, this book took my understanding to the next level. If you have the time, read it, take notes, and try the practice questions. It is long though, but worth it if you are serious about learning the language. Might be rough for people completely new to programming though.

u/tyme · 5 pointsr/cocoa

>I liked the book with a scooter on the front...

Cocoa Programming for Mac OS X

I also recommend that book, along with Programming in Objective-C which I feel gives a more in-depth overview of the underlying Objective-C base of Cocoa.

u/hashcode · 5 pointsr/learnprogramming

"The whole OOP side" is the most important thing for understanding how Rails works. I mean, apart from the object hierarchy, there's nothing to it. Rails is a framework, and you use it just like any other collection of objects.

I am inferring from your reading that you think of OOP as something hard to learn. It's not! It's really simple, though if you're brand new to all of this it may seem like information overload. But really, it's nothing compared to learning Rails.

If you're new to web development, learning Rails is going to be hard. There's a lot to it. In order to really understand Rails you have to understand HTML, CSS, templates and dynamic HTML, probably JavaScript, database access which means probably SQL as well, and any number of other things. The difference between a client and a server. It's not easy.

But that doesn't mean you can't learn it. Hell, every web developer today has been in the situation of feeling overloaded by all the different pieces, and they all got through it. So can you.

But it might be a lot to tackle if you're new to programming (by which I mean you've been coding regularly for less than six months). One thing at a time might be best to prevent burnout.

If you want to learn Ruby, what follows is the sort of advice that everyone gives and everyone ignores, but I'm posting it anyway because I really believe that it's the best thing you can do (it's what I wish I did when I was learning how to program):

Read The Ruby Programming Langage.

It's short.

It's co-written by matz, the creator of Ruby.

It describes everything in the language.

Read it once straight through. Expect to understand about 20% of it. That's okay. There's a lot of stuff like unicode support details that you really don't care about. That's okay too. Skim that. The point is that, after reading it, you will know everything in the language. There will be nothing that you've never heard of.

You probably won't understand the difference between a block and a lambda and a proc after one reading, but you'll know that there are things called blocks/lambdas/procs and they're similar but subtly different and later on when you encounter them in the wild you won't be surprised at their behavior. You'll be able to say "Hey, I know that thing. That's a block." And then you'll be able to google "ruby blocks" and find out more.

Once you've read it, you will have no unknown unknowns. You can go out and code away for a few months, maybe work all the way through Learn Ruby the Hard Way, and later on come back and re-read. This time you'll understand 90-100% of it.

Intimate familiarity with your language of choice is important if you're in this for the long haul.

Edit: I realized that I didn't really answer your question directly: you should learn all of Ruby. It is not as hard as it sounds. Now, you shouldn't necessarily learn all of Ruby and then start learning Rails. You'll be learning a lot of Ruby as you go along, and before too long you'll stop running into new concepts. But never stop improving your Ruby knowledge until you've learned everything there is to know. You'll never know "enough" Ruby until you know it all.

u/enry_straker · 5 pointsr/ruby

It's been too long since i read Programming Perl but "The Ruby Programming Language" is the book that i use the most.

While the Pickaxe is good, you can't beat the pedigree of "The Ruby Programming Language" what with Yukihiro Matsumoto aka Matz aka The guy who created the ruby programming language in the first place, co-writing the book along with Mr.Flanahan.

Amazon_Link

u/evansenter · 5 pointsr/ruby

As the other posters have mentioned, I develop with Ruby as a day job doing web development on the Rails platform. That being said, I also used Ruby throughout college to do machine learning programs, genetic algorithms, and bioinformatics work. In general, Ruby's great for anything you want to just get done, without worrying about the contortions that some of the other explicitly focused languages put you through. Just having a REPL loop like IRB is great for very quickly trying things out.

That being said, Ruby is not good at any heavy computation. I don't care which version of Ruby it is, it's still slow for any heavy number crunching, so if you're going to be working with heavy datasets, it's best to pick your battles. As you've said you're just getting into programming, I would - rather than worry about if Ruby is the right language for you - just pick it up and learn with it. Certainly we aren't tied down to just using the bike on which we first learn to ride, and the same goes for languages.

If you have some *NIX / programming experience, I've heard great things about http://github.com/edgecase/ruby_koans

If you like to buy books, http://www.amazon.com/Ruby-Programming-Language-David-Flanagan/dp/0596516177 is the best and only Ruby book I'll bother owning. I have a short attention span (except when writing comments, apparently) and have found all other resources laud on and on about how great Ruby is, rather than tell you anything about it. Otherwise, they read like a dictionary. Not useful for me.

You've probably had it recommended, but if you like cartoon foxes, bacon, and a lot of comedic nonsense in your learning, check out http://mislav.uniqpath.com/poignant-guide/book/ - it's a quite fun way to get exposure to the language!

Ultimately the first steps are the hardest - and the best way to move forward is to set a goal. Perhaps write a program that takes a number n, and tells you what the _n_th prime number is. Certainly not the most exciting program, but something that can be improved on, etc etc.

u/shinigamiyuk · 5 pointsr/learnprogramming

I think maybe The Ruby Programming Language would be as close to K&R for ruby that you could get. Unless someone has something better.

u/Zuslash · 5 pointsr/webdev

I found Lynda.com to be extremely dry and slow. To me it was the equivalent of those old school mandated educational movies you would watch in classrooms back in the 90s on your faux-wood tv. Take this opinion with a grain of salt though as it has been almost two years since I have looked at anything on Lynda, I hear it may be better today.

If you are looking for web development in particular I would suggest the following:

  • Codeademy - Free and very good at introducing basic web development skills.
  • Team Treehouse - Paid subscription but well worth it in my opinion as they will walk you through everything from the most basic HTML to building advanced JavaScript applications.
  • CodeSchool - CodeSchool tends to be more advanced and I would wait until you have a strong grasp on your HTML, CSS and JavaScript before investing in their coursework.

    In addition, StackOverflow; A general programming Q&A website, has an answer to just about any programming issue you may be running into. If the answer is not already there, then chances are you will have one within 24hours.

    I began my pursuit into web development about 2 years ago. In that time I have gone through the resources listed above as well as the following books which have helped immensely:

  • HTML and CSS: Design and Build Websites - Ducketts whole series is extremely friendly to the new web developer and will help you build a solid foundation quite quickly.
  • JavaScript and JQuery: Interactive Front-End Web Development - Another Duckett book which was just released focusing primarily on JavaScript.
  • JavaScript: The Definitive Guide - A massive JavaScript reference. It has answers to just about everything.

    Some personal career history if you're interested:

    In the last two years I have gone from making 18k a year as a Technical Support Representative to 80k a year as a Front-End Engineer building JavaScript applications at a large FDIC Bank. It was only in the last two years that I really dug into Web Development (and programming for that matter) and I really can't see myself ever doing anything else for a living. The job requires an immense amount of learning (which I love) and will keep your mind sharp. I really do get a kick out of problem solving all day. Programming will require a major adjustment to the way you think. I can say that the way I work through problems now is completely different to the way I did before. I feel as if critical thinking has eluded me until the last two years and it has been a major life changing event. By far the biggest contributing factor to my growth has been the team I work with. You have to do your best to find a team that is willing to work with you as a junior so you can siphon that knowledge. Even if that means taking a low paying job, however; know your worth so that you can ask for the right amount of money once you have gained the necessary skills. As a personal rule of thumb, I will not stay at a company where I am the most knowledgable member of the team. This inhibits growth as a developer and will prevent me from realizing my true potential.

    Feel free to hit me up if you have any questions.


u/phao · 5 pointsr/learnprogramming

Eloquent JavaScript (http://eloquentjavascript.net/) has chapters on JavaScript for web programming (chapters 12 to 19).

As far as I know, JavaScript The Definitive Guide (http://www.amazon.com/JavaScript-Definitive-Guide-Activate-Guides/dp/0596805527/) also has several chapters on JavaScript for the web.

u/adamzx3 · 5 pointsr/javascript

I can definitely relate, this sounds just like me last year! I've done things the hard way and it took me 5x longer. I also prefer screencasts to books. I always need to create a project to solidify those fresh skills, otherwise they'll be gone in a month. Also tutorials for things like Backbone assume you know how to use jQuery, Underscore, and things like REST, and JSON responses... this can quickly get confusing if your not familiar with all of these. My largest regret is not building enough practice apps in the last year. I really should have applied more by doing, instead of staying in the theoretical world.

Here are some insights that i've made and the courses/tuts/projects that helped me the most:


Learn the language first:


u/wreckedadvent · 5 pointsr/fsharp

I was reading CLR via C# the other day and something that struck me is how often the author talked about the advantages of being to use multiple languages that can talk with one another seamlessly due to them all running on the CLR. The author seemed disappointed that VB became C# with slightly different syntax while other languages on the platform weren't really getting much love.

With C# getting pattern matching in the next version, I do wonder how far and how large C# will become, ultimately, and if we'll see a more distinct push to have more varied usage of other CLR languages to solve particular problems.

u/nemec · 5 pointsr/dotnet

A more appropriate title would be "Some things you'd like to know about the CLR".

CLR via C# is really all you want to know about the CLR.

u/ActionCactus · 5 pointsr/microsoft

I went to school for it, but I'll be the first to tell you that a fucking class isn't the best way to learn how to code. What kind of questions do you have?

If you're confused about why something like "System.out.println("Hi");" actually prints something to the console, I can explain to you what everything in that statement means (it's actually really intuitive and easy, and it's something professors usually don't tell you when they're introducing you to code writing).

If you want a recommendation on where to learn, Khan Academy and Code Academy are fantastic free resources, but another free service that I've found to be phenomenal has been [tutorialspoint.com] (http://www.tutorialspoint.com/java/). I also just recently purchased [a really good C# book] (http://www.amazon.com/5-0-Nutshell-The-Definitive-Reference/dp/1449320104/ref=zg_bs_697342_6); I like what I've seen in it thus far and if one by the same author exists for Java I'd recommend it.

All that said, by all means, ask me (or anyone else in this thread that'd like to answer questions) whatever you'd want. You also might want to check out /r/learnprogramming, and when you start getting to the more intermediate levels of programming stackoverflow.com is one of the best collab resources out there.

I'm not sure if mods would be okay with a programming question thread in this sub, so if you make a new thread somewhere else make sure to PM me so I can help answer your questions.

u/adamwathan · 5 pointsr/PHP

In the real Command Pattern, commands do have an execute method.

This excellent book by Uncle Bob devotes a great deal of time to that pattern if you'd like to learn more about it:

https://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258

u/periphrasistic · 5 pointsr/OSUOnlineCS

Hmm, I had a very different impression: I thought that Architecture & Assembly and Networks were the two best courses in the program, that Data Structures, Algorithms, and Operating Systems would have been among the best had they been taught a little better (for the former) or were more rigorous (for the latter), and that the Software Engineering courses, along with Web Development, Databases, and Mobile/Cloud were the worst courses in the program.

For SE I, the primary problem, as I saw it, was that the information was either badly out of date, or covered in such cursory depth as to be useless. The course is heavily based upon the optional textbook, and if you actually read the textbook, you'll quickly discover that the overwhelming majority of the research being cited and presented is from prior to 1990, and hardly any of the citations are from after 2000. Likewise, the course focuses heavily on software development process models, specifically Waterfall and Extreme Programming. However, neither process is particularly popular in the 2016 job market; most organizations at least nominally use some form of Agile methodology, but generally not particularly well. In any event, the process model used by your organization will likely be something you learn on the job. Finally, the course almost completely ignores issues of coding style and writing code that can be easily understood by other developers (which is an entirely different skill than writing code which will pass a grading script), and the sections on system design and object-orientation, which should be the heart of a software engineering course, are entirely cursory. SE I is sadly a required course, but if you actually want to learn software engineering, you are far, far better served by carefully reading Robert Martin's Agile Software Development and Clean Code.

The less said about SE II, the better. That course is a disorganized mess and OSU should honestly be ashamed to charge money for it (the bulk of the course content, in terms of lecture time, consists of links to two free Udacity courses).

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/DeathByIcee · 5 pointsr/androiddev

Not Android, but, much of what konk3r said in his comment is packaged nicely and easily consumable in Refactoring by Martin Fowler. Before you begin coding Android, understand Java and what it takes to write maintainable code. Any mildly intelligent chimpanzee can write code; it takes a talented programmer to write code that others (or even the dev himself) can maintain.

Other things:

  • Understand list views. They're ridiculously complicated but there are very few apps that don't need them, and I can count on one hand the number of developers in my company that I've come across that can implement them correctly.

  • Model-View-Controller. If you don't know the paradigm, look it up. iOS/Objective-C does a lot better job of lending itself to the paradigm naturally, but that does NOT mean that it is not applicable in Java. Separating your UI from your business logic/data is crucial and will save you SO MUCH PAIN later in maintenance stages.

  • Understand the Activity lifecycle. Re-read the documentation and experiment until you understand its ins-and-outs.

  • Never use hardcoded strings. They're a nightmare to maintain and completely impossible to re-use. For Android, UI strings should go in strings.xml (this means, if text appears in your app UI, it better be a string resource). You may also opt to use them for non-UI things, but I prefer constants in well-named files.

  • Understand when you need application context versus activity context. Understand the differences in the two. Use them appropriately.

  • Android is open source and apps are extremely easy to unravel to their source code, so, don't be shy about pulling down someone else's app and dissecting it to figure out how they implemented that cool functionality. Google's apps especially. Obviously don't commit copyright infringement, but a good programmer knows when to write from the ground up and when to not reinvent the wheel.

  • If you're passing information between activities, use Parcelable, or the Android Gods will smite thee. NOT serializable.

  • Utilize Android's helper classes. Did you know they have a TextUtils class? It is great for String functions (like checking if a string is null or "" with isEmpty();).
u/bjarneh · 5 pointsr/java

this book is often mentioned among the best programming books ever written; together with Larry Wall's (Camel) Perl book, and Dennis Richie's C book.

Effective Java

http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_1?ie=UTF8&qid=1314549239&sr=8-1

u/morihacky · 5 pointsr/androiddev
  1. storing activity references beyond their lifecycle:
    http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/
    http://www.androiddesignpatterns.com/2013/04/activitys-threads-memory-leaks.html

  2. Using Hashmaps when SparseArrayMaps would have sufficed
  3. This is a heated topic, but using enums is apparently costlier than simple static final variables

    Less specific resources:

  4. See the android developer performance tips page.
  5. While the OP asked for Android specific ones, it's important to know the Java related operations too and for that one only has to look at Effective Java - Joshua Bloch - possibly the best book on Java tips.

    I vehemently disagree with the internal/getter/setter rules mentioned in android developer tips page. I personally use proguard and don't think twice about virtual setters etc. since they most definitely help with clarity
u/bubsyouruncle · 5 pointsr/learnprogramming

I would highly recommend reading Effective Java if you want some more advanced java topics.

u/CSMastermind · 4 pointsr/learnprogramming

I'd suggest you should pursue software development as a career path. Once you're working full time as a developer it will be much easier for you to move into a .NET role if you choose.

The career market can be hit or miss. There are plenty of jobs using those technologies but they're less ubiquitous than say Node or Java.

In terms of keeping up your skill, Pluralsight has some amazing content. And I'd recommend these books:

Design Patterns in C# - probably the first book I'd read.

CLR via C# - In-depth, targeted at professional developers, and absolutely crucial for anyone doing it professionally.

Agile Principles, Patterns, and Practices in C# - Will help get ready to work on a professional software development team with a slant towards Cc#.

Pragmatic Unit Testing in C# with NUnit - Also important for working as a professional C# developer.

More Effective C# - Is more of a specialist read. Might be helpful after you've worked for a year or two.

Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries - Is better suited for a technical lead or architect. But could be useful to keep in your back pocket.

u/lingual_panda · 4 pointsr/cscareerquestions

Formatted version: (with a few edits)

>I am pretty new to this sub so excuse me if I go against the rules or formatting in any way.

>I am currently at a community college in NYC, majoring in Computer Science. Since I was a kid I was always fascinated by computers, how they worked and functioned. I always would tinker with the hardware or software. I even ran my own private server for WOW at the time (a big deal to me at that age).

>I entered college knowing I wanted to do computer science and I knew it dealt with a lot [of topics], not just coding or programming. When I got the prerequisites out of the way I was able to finally take a class that dealt with programming--intro to computer science--which aimed to ease you into coding through basic C++. My first week I was really happy and into it because I understood what was going on. I was ecstatic that I was actually doing some form of coding, basic or not.

>As the course progressed, I started to get lost and not understand anything. At that point I had no idea what was going on and before I knew it I had an F in the class. I talked to many people who had taken my professor before and not a single person said he's a good teacher. I have only heard negatives things about him, which is not an excuse for me to get an F in the class, but I told myself that I will retake the class and do my best next semester. (Btw if you are wondering all we did in that class was program the nim game and perfect it over and over.)

>Fast forward to next semester and I feel lost again although this time I put a lot of effort into the class and spent countless hours reading the book on my own and trying to teach myself. I even asked for help on /r/learnprograming and while I got lots of help there, I still could not understand many things. My main problem was that [even though] I could read the code and understand it, but I had a very tough time trying to write code for a specific problem, which seems to be a very common problem for many beginners. I messed up a lot in the class but at the end I received a B-, which is ok but I feel like I came out of the class without having learned anything.

>To make matters worse I start the advanced C++ course this fall and I'm terrified. To give more insight about my other teacher, he's very good at the lecture portion of the class but when it came to lab (where we actually did coding) he would give us a problem and just sit there at his desk. There were a lot of people who had problems with the class and a handful who knew what they were doing. Toward the end of the semester he told us that the college's program was very underfunded and that the photography major had more funding. He also told us that he disliked coding but was teaching it to us anyway.

>Sorry if this is dragging on or I'm not getting to my point quick enough but I wanted to give context to my current situation. So far from my experience with those two courses I feel very discouraged and scared. I have had the thought of switching majors countless times but I don't want to give up on CS. I am contemplating computer engineering because it combines computer science with electrical engineering. I will not only be coding, but working on hardware as well, which sounds like the best of both worlds to me. Then I think, if I can barely even make it in CS what makes me think I'll be able to do something harder?

>I am very scared for my future and just feel lost. I have contemplated switching to music production or audio engineering but those are only hobbies that I practice in my free time and I don't see much money there. I feel very scared as well that even if I manage to get a bachelors that I will just be sitting in a desk all day long killing myself and not having some sort of fun with my career, afraid that it will be a burnout job which a lot of people told me. Although I do understand that this all depends on the job you work in and the type of programs you write, as well as how much you even like programming to begin with.

>I apologize for this very long post but I guess I needed to vent and seek advice, also sorry if this is also poorly written as I am writing this in a rush because I need to go somewhere. To give further information I was using this book.

(I'm just watching an old episode of Mad Men with friends so I figured formatting this would be semi-productive.)

u/PajamaZen · 4 pointsr/learnprogramming

I used the first edition of this book years ago, the summer before university, and it helped me learn a lot of the basics.

u/stevewedig · 4 pointsr/androiddev

I think Uncle Bob's PPP Book is the original book from 2002. May be more options by now though.

u/gtani · 4 pointsr/scala

What else is there? git history, hopefully clean w/consistent branch/merges and commit messages, server logs w/devop notes (esp. heap, maxInline, GC etc params) annotated stacktrace or profiler runs, breakpoints/debug strategy, db schema, net logs, design docs yadda yadda. Not knowing anything else, i would read thru repo's recent and early history, run unit tests, profile/load test it and see how failure prone the server(s) are

You could start with an old repo that has the basic functionality you're interested in, hopefully it's a lot less LoC.

You could read Fowler or Feathers which i remember being good: http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/

http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052/

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/ir8prim8 · 4 pointsr/PHP

They are older books, but really changed my way of programming. Refactoring by Fowler and Test Driven Development by Beck.

https://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672
https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530

Feeling overwhelmed and confused can always be solved by breaking things into small enough problems and making enough tests to make sure that your assumptions match reality.

Frameworks can be confusing the way they hide details away from you. Remember though, that with open source, there is nothing to stop you from digging into the framework methods you are calling and see how they work. If you get stuck, sometimes looking at the source will tell you more than looking at the docs. Try multiple frameworks in multiple languages. Once you think you have an idea of the different parts required, try using a template library and an ORM library and write the rest of the code you need to make a basic custom framework.

If you want to see a more direct approach to web services, take a look at Go, where frameworks are almost discouraged. http://thenewstack.io/make-a-restful-json-api-go/

u/ckdarby · 4 pointsr/PHP

I have included some links for more information about myself in the original post.

To have a better idea of the type of person I am these are the books within my arms reach right now:

Design Patterns: Elements of Reusable Object-Oriented Software

[Refactoring: Improving the Design of Existing Code](
http://www.amazon.ca/gp/product/0201485672)

The Mythical Man-Month

Along with some other ~50 similar books I've read.

u/thief_garet · 4 pointsr/java

I just resently started a carreer as a Java Developer myself (m/22), so I can remember the things I had a hard time with like it was yesterday.

What I had the most trouble with, carreer wise, is the configuration of a lot of frameworks. Java in itself is relatively easy (especially since you already are an experienced developer), it's the frameworks that require the most time to learn. A lot of them require a certain amount of configuration, mostly in XML. Learning how to set them up was mostly trial and error in my case. Like someone else said in the comments, pet projects are the best way to learn this. So, to answer your question about what I hate about Java: this configuring is it. Stuff like that is easier in, say, C#. However, if you join an already existing project, the configuration is already done most of the time (although not always very good).

Now for the resources. I really did a bad job with Java in my first year of college, but this guy really helped me with his tutorials (I got 100% percent when I took the exam again): [The New Boston] (https://www.youtube.com/playlist?list=PLFE2CE09D83EE3E28). I linked you the beginner tutorials, but he also has intermediate. [Effective Java] (http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683) is also a good resource, like mentioned in the comments. Another one I like is [The Well-Grounded Java Developer] (http://www.manning.com/evans/). It is a really balanced book, talking about important things like Threading, the JVM, Dependency Injection, Continuous integration etc.

I would suggest you first do some little projects to get a feeling with Java as a language, and then stepping over to frameworks like Spring and hibernate. Check the differences between Spring and Java EE, read about dependency injection (Martin Fowler has a great article about this), etc.

This turned out longer than I expected, so I'll leave it at this. If you still have questions, feel free to PM me or leave a comment.

u/th3byrdm4n · 4 pointsr/learnprogramming

Pick up Effective Java on Amazon. It's the next step beyond the basics that teaches some really solid, fundamentals.

Once you have that under your belt, just have an idea and execute it to the best of your ability.

Then execute the next idea.

Then the next.

Then the next.

....

There's no shortcuts, just code your ass off. Learn by doing. If you want to make an app that you can use on your phone, pick up a book to do android (I assume) development (or just go through the public Android docs).

If you want to be able to use your app anywhere, grab a book for web development -- Everything is moving to Native Web, so I think that's the move towards longevity..

u/Idoiocracy · 4 pointsr/cpp

Thanks for the review. Your high esteem of it concurs with its #1 recommendation on the C++ FAQ.

Here is the US Amazon link for the book:

http://www.amazon.com/Primer-5th-Edition-Stanley-Lippman/dp/0321714113

u/exoticmatter · 4 pointsr/learnprogramming

You will not learn C++ properly from internet resources, particularly from bad ones like learncpp. You will need a good textbook, and we recommend C++ Primer (not C++ Primer Plus). And read the FAQ.

u/ehochx · 4 pointsr/cscareerquestions

I wouldn't recommend any websites for C++ because most tutorial authors seem to be stuck in the 90s. Take a look at some good books.

A Tour of C++ is pretty short but gives you a good overview over the language and some STL-features.

Scott Meyers wrote some books about best practices.

If you have a bit more time to spend: C++ Primer 5th edition explains pretty much everything (except concurrency). I read the book (took me a month) and was then able to write solid C++11 code.

u/dmazzoni · 4 pointsr/learnprogramming

Step 1: get a better learning resource.

Most online tutorial suck. They're fine for a quick intro or to learn more about one feature, but not for learning everything from scratch.

Buy a book.

Programming in Objective-C is pretty good and it's aimed at beginners.

If you don't want a physical book, get the Kindle edition and read it online.

Step 2: spend more time building.

For every minute you spend reading or watching, you should spend 10 minutes trying it out, doing stuff.

Programming is not about knowledge, it's a craft, like woodworking or pottery. You can't just watch masters build things for a month, then go home and build a dresser. You need to start small, build up your skills before you can actually build useful things.

So as you're reading the book: are you learning to write a loop? Stop, put down the tutorial or book, and type it in and run it. Get used to the syntax. Experiment with it - can you make it do something different?

u/Slackwise · 4 pointsr/ruby

I've read both the "Pickaxe" book and "The Ruby Programming Language" (co-authored by Matz and _why), and I have to say TRPL is much better.

It's a no-BS book about every single Ruby detail. Covers all the quirks and features I didn't even know existed. I definitely owe my knowledge of Ruby directly to it, but my introduction to the Pickaxe (only (free) book at the time). Pickaxe may be good to start with, but you can learn the same from TRPL and TRPL provides a much better reference later on.

u/chickenmeister · 4 pointsr/learnprogramming
u/bcguitar33 · 4 pointsr/learnprogramming

If you're into java, I can't help but recommend Effective Java

This book is what took me from Java beginner to closer to Expert. It's full of best practices, tips, tricks, and guidelines. I try to re-read it once a year. Sorry if my praise sounds hyperbolic but it's the truth.

u/shaziro · 4 pointsr/SoftwareEngineering

For testing, I liked this one: https://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627

For version control, continuous integration, continuous delivery, this was a good read: https://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912

There are many extreme programming books that briefly talk about pair programming. If you want a book specifically on pair programming only then there is this: https://www.amazon.com/Pair-Programming-Illuminated-Laurie-Williams/dp/0201745763

There are thousands of books out there for learning various topics of software engineering.

u/dstrott · 4 pointsr/aerospace

Look at using the Eigen library for linear algebra in C++. Its used extensively in CV and AI settings, so there is a lot of info floating about it and lots of examples. It does take some getting used to coming from MATLAB though.

Here are some C++ books that have proven useful to me:
The Bible,
Very Useful,
My favorite data structures book,
[Maybe of interest] (https://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ref=sr_1_25?ie=UTF8&qid=1484332390&sr=8-25&keywords=data+structures+in+C%2B%2B)

Also, keep in mind that the C++17 standard should be released this year, and there will be a new deluge of books.

Probably want to learn something about numerical analysis:
Numerical analysis

For vehicle dynamics and propulsion, are you thinking more FEA and CFD? If so, learning about GPU programming is probably more interesting since there is so much parallelization...
I recently picked this up but havent really worked through it yet...
but keep your expectations low, it is definitely non-trivial to try to spin your own packages, and it might be more worth your while to look at integrating with something like OpenFOAM for CFD, or to look into some of these packages for FEA. There are a lot of people who have spent a long time making these sorts of tools.

u/FieldLine · 4 pointsr/cpp_questions

Go nuts.

It isn't particularly enlightening; reading the STL itself never is. It is highly optimized, favoring brevity and efficiency over readability.

You'd be better off reading something like this -- I haven't read that particular book, but the author is well known in the C++ community.

u/fookhar · 4 pointsr/apple

Read this, then read this.

u/missedtheplane · 4 pointsr/simpleios

You didn't ask me the question, but I'm learning with the same material.

  • Paul Solt's course
  • Big Nerd Ranch Objective-C programming
  • Big Nerd Ranch iOS Programming

    I just finished working through the Big Nerd Ranch Objective-C book and found it extremely accessible and enjoyable. I started the iOS book yesterday and worked through five chapters - if you're genuinely interested in learning Objective-C and iOS these books are difficult to put down. Be aware that the newest edition of the BNR Objective-C is due at the end of November and the iOS book due at the end of December.

    Paul Solt's course provides video content that I have found to be beneficial supplementary content to the BNR books. Working through the book along with Paul's course has helped me cement the material. He posted a coupon to take the course for free ~1 week ago. Not sure the coupon is still valid or not.
u/TheUnwiseOwl_ · 4 pointsr/csharp

CLR Via C# is a really good book to have handy.

u/marpstar · 4 pointsr/cscareerquestions

I've never done any embedded software development, but as a web developer looking at you from the other side, this is what I see...

At the domain level, you'll be working with different technologies than you're used to. Embedded software developers do a lot more low-level interactions with inputs from sensors, so you'll see less of that. Web developers are generally dealing more with human interaction and data persistence and retrieval.

Another big thing to think about would be your OOP experience. Are you familiar with SOLID? Have you done any real-world development using OOP? Most of the web frameworks available today (from a server-side standpoint, at least...particularly ASP.NET) are rooted in OOP.

If you've got 10 years of experience developing, learning C# will be easy. I wouldn't focus as much on the language itself as I would learning the .NET standard libraries. You'll pick up the patterns as you go. I really liked the "Pro ASP.NET MVC" books, now available for MVC 5.

If you're looking specifically for books on C# and .NET development, I don't think there's any book better than CLR via C#. Don't let the title scare you away, it's a great book for learning the lower-level bits of the .NET platform, which are relevant everywhere from ASP.NET to WinForms.

If you aren't aware, there are huge changes coming to the .NET framework and ASP.NET, so you could choose to focus on ASP.NET 5 and get ahead of the game a bit, at the expense of availability of reference material.

u/Jutanium · 4 pointsr/dailyprogrammer

Head First C# is a great book. That, and C# in a Nutshell taught me everything I needed to know.

u/CrimsonCuntCloth · 4 pointsr/learnpython

Depending on what you want to learn:

PYTHON SPECIFIC

You mentioned building websites, so check out the flask mega tutorial. It might be a bit early to take on a project like this after only a month, but you've got time and learning-by-doing is good. This'll teach you to build a twitter clone using python, so you'll see databases, project structure, user logons etc. Plus he's got a book version, which contains much of the same info, but is good for when you can't be at a computer.

The python cookbook is fantastic for getting things done; gives short solutions to common problems / tasks. (How do I read lines from a csv file? How do I parse a file that's too big to fit in memory? How do I create a simple TCP server?). Solutions are concise and readable so you don't have to wade through loads of irrelevant stuff.

A little while down the road if you feel like going deep, fluent python will give you a deeper understanding of python than many people you'll encounter at Uni when you're out.

WEB DEV

If you want to go more into web dev, you'll also need to know some HTML, CSS and Javascript. Duckett's books don't go too in depth, but they're beautiful, a nice introduction, and a handy reference. Once you've got some JS, Secrets of the javascript ninja will give you a real appreciation of the deeper aspects of JS.

MACHINE LEARNING
In one of your comments you mentioned machine learning.

These aren't language specific programming books, and this isn't my specialty, but:

Fundamentals of Machine Learning for Predictive data analytics is a great introduction to the entire process, based upon CRISP-DM. Not much of a maths background required. This was the textbook used for my uni's first data analytics module. Highly recommended.

If you like you some maths, Flach will give you a stronger theoretical understanding, but personally I'd leave that until later.

Good luck and keep busy; you've got plenty to learn!

u/magenta_placenta · 3 pointsr/web_design

Pro JavaScript Design Patterns

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

JavaScript Patterns

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

High Performance JavaScript

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

Object Oriented JavaScript

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

JavaScript: The Good Parts

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

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

JavaScript: The Definitive Guide 6th Edition

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

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

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

u/GrayDonkey · 3 pointsr/java

You need to understand there are a couple of ways to do Java web development.

  • Servlets & JSPs. - Check out Core Servlets and JavaServer Pages or the Java EE Tutorial. Note that I link to an older EE tutorial because the newer versions try to switch to JSF and not much changed in Servlets and JSPs between Java EE 5 and 6. I recommend learning Servlets and JSPs before anything else.
  • JSF - A frameworks that is layered on top of Servlets and JSPs. Works well for some tasks like making highly form centric business web apps. Most of the JSF 2 books are okay. JSF is covered in the Java EE 6 Tutorial
  • Spring - Spring is actually a bunch of things. You'd want to learn Spring MVC. If you learn any server-side Java web tech besides Servlets and JSPs you'd probably want to learn Spring MVC. I wouldn't bother with GWT or any other server-side Java web tech.
  • JAX-RS - After you get Servlets and JSPs down, this is the most essential thing for you to learn. More and more you don't use server-side Java (Servlets & JSPs) to generate your clients HTML and instead you use client-side JavaScript to make AJAX calls to a Java backend via HTTP/JSON. You'll probably spend more time with JavaScript:The Good Parts and JavaScript: The Definitive Guide than anything else. Also the JAX-RS api isn't that hard but designing a good RESTful api can be so be on the lookout for language agnostic REST books.

    Definitely learn Hibernate. You can start with the JPA material in the Java EE tutorial.

    As for design patterns, Design Patterns: Elements of Reusable Object-Oriented Software is a classic. I also like Patterns of Enterprise Application Architecture for more of an enterprise system pattern view of things. Probably avoid most J2EE pattern books. Most of the Java EE patterns come about because of deficiencies of the J2EE/JavaEE platform. As each new version of Java EE comes out you see that the patterns that have arisen become part for the platform. For example you don't create a lot of database DAOs because JPA/Hibernate handles your database integration layer. You also don't write a lot of service locators now because of CDI. So books like CoreJ2EE Patterns can interesting but if you are learning a modern Java web stack you'll be amazed at how archaic things used to be if you look at old J2EE pattern books.

    p.s. Don't buy anything that says J2EE, it'll be seven years out of date.
u/HumanSuitcase · 3 pointsr/learnprogramming

As much as I like K&R, I have to say it's feeling way out of date. Try C Primer Plus.

u/HorkHunter · 3 pointsr/learnprogramming

If you're already familiar with programming, C primer plus

EDIT: spelling

u/JonnyRocks · 3 pointsr/dotnet

open source aside - you should read this book

http://www.amazon.com/CLR-via-4th-Developer-Reference/dp/0735667454/ref=sr_1_1?ie=UTF8&qid=1415979190&sr=8-1&keywords=.net+via+c%23

you have some terms mixed up. This book will explain everything .net is under the covers.

u/markdoubleyou · 3 pointsr/csharp

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

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

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

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

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

u/_rere · 3 pointsr/cscareerquestions

Hi there, fellow EE.

We should make a club :)

I believe you can do a crash course into software development and catch up later when it comes to be a better software developer, since you've already been in the market for 4 years I'm sure you know exactly what I'm talking about (job has nothing to do with education, and you can learn as you go), and I know its the same in CS, a lot of companies just want you to do specific thing, and they don't really care about your theoretical knowledge or your full knowledge with software development life cycle.


Since you are an EE graduate I think you can relatively easily land a c++ software development job, but the problem with c++ is that there is a lot of theoretical knowledge is expected from you.

Still I believe if you set aside 3 months of your lifetime and study the following:

Programming: Principles and Practice Using C++

Code Complete

introduction to algorithms

Optional:

Software Engineering

Java Heads first

C# in a nutshell

Note, half of these books will bore you to death, but you have to power through.
Also there will come times where you don't understand what you are reading, I find it best is just to keep going, eventually things will make sense.

I personally find books is the fastest way to learn, and give you the deepest knowledge and always access to awesome tips and tricks that you can't learn at class or from a video.

If you pick those books, you can read from them in parallel, make a habit of finishing a chapter per 24/48 hour and practice 1-2 hours of programming (of what you've learned) I'm sure by the end of the 3 months you will be better than a lot of CS graduates

u/sixothree · 3 pointsr/csharp

You need to pick a project that is bigger than your understanding of the language. It really is that easy.

Since you know a bit of Java, get this book: C# 5.0 in a Nutshell. It's an excellent reference.

I find myself using the following sites:

http://www.dotnetperls.com/

For basic learning.

http://stackoverflow.com/

For finding specific answers.

http://www.codeplex.com/

For finding useful open source projects and libraries.

http://www.codeproject.com/

For finding useful open source projects and libraries, as well as tutorials and guides.

u/tangerinelion · 3 pointsr/learnpython

Personally, I've found this book to be pretty good. It assumes knowledge of Python but does not assume knowledge of OOP.

u/JessieArr · 3 pointsr/programming
u/LyndonArmitage · 3 pointsr/programming

Personally I wouldn't mind if == never did implicit casting and acted like === (in fact I wish it did), but the rules don't seem that bad to me.

The example I gave was very contrived, and solution was naive, the best way to compare two arrays to each other would be to loop through them, like this. What I was doing was showing you how you'd take advantage of the implicit casting.

I think it was in John Resigs book where I read the best advice I have seen for JavaScript and it went something like "Treat everything as if it was an object and use === unless you need to use ==".

Also never use the wrapper objects if you can help it. Let the interpreter use them in auto-boxing and leave them alone. Because you are 100% right, things can get a bit weird then.

u/dragonandante · 3 pointsr/learnprogramming

I hope you meant this book. C++ Primer is a far better text than C++ Primer plus. The only thing I didn't like about C++ Primer is there were no solutions for the exercises. So when I was going through it, I couldn't compare my answers.

Also here's a stackoverflow post that helped me out in regards to C++ books.

u/a11121 · 3 pointsr/programming

Are you referring to C++ Primer 5th Edition or C++ Primer Plus 6th Edition ?

I had actually read that C++ Primer Plus wasn't as good as C++ Primer so I went ahead and bought C++ Primer 5th edition to learn C++ more in depth. The book has updates for C++11 so I was curious if you have a source for Sutter's claim that it's prehistoric.

My problem now is that the book is so big (~1000 pages), that I'm debating whether I should read through the whole thing page by page or just use it as a reference. I feel like if I skip one little detail of some feature, it could bite me in the ass later.

\
Found that info through stackoverflow's list of recommended C++ resources - search for "C++ Primer" and see the related footnote about C++ Primer Plus

u/ryzic · 3 pointsr/ECE

If you want to learn C++, this book treated me well. C++ Primer

It only goes to C++11, but honestly the differences between 11 and 17 are small compared to the differences between 03 and 11.

u/SeanRamey · 3 pointsr/cpp

Honestly, if I may, suggest that you use C++ Primer as a reference book (not C++ Primer Plus, two different books).

Also, your voice is REALLY quiet in the video. It really needs to be boosted, a lot. If I turn my speakers up to where I can hear you normally, and then start anything else, I'll be blown away.

And I hope that your video is just a "demo" video, because if you start teaching a beginner C++ using structs and functions and console output, you are going to confuse them. You need to start from the beginning.

I would also teach them the basics of the command line and how to invoke the compiler and linker manually, and show them batch files and a super basic makefile. These are things that are very helpful to know and they are always skipped over in tutorials. Here is a makefile that I made that is really simple to use, fairly simple to understand, and has a decent set of features. Feel free to use it or distribute it. https://pastebin.com/qDTM1WNC

u/TheSuperficial · 3 pointsr/cpp

Currently slated for end of the summer, but I'm sure Lippman's 5th edition of "C++ Primer" (not to be confused with Prata's "C++ Primer Plus") will be very good.

Looks like it's scheduled for end of the summer. I was hoping Lippman et. al. would put out a new version for C++11, but I wasn't sure until I saw it mentioned recently here on reddit.

u/theimp_ · 3 pointsr/orlando

If this is your first programming language its a tad unfortunate that it has to be C++ but by no means does it mean it is bad or anything. In fact its the language most aspiring computer scientists started out with in college prior to the 2000s.

You can start off with
Programming: Principles and Practice Using C++
and then going onto The C++ Programming Language, 4th Edition after completing the first one. There is also C++ Primer that is also highly recommended as another book for starting out.

A book along with web searches when you have questions will get you pretty far. Having someone to ask questions if you get stuck on something conceptually is also useful. The best advice I can give you is to really play around with the language as you are learning and do most of the practice exercises too. Stroustrup also has solutions to the exercises from the first book I mentioned online. Hopefully you have some months available to learn the language. On top of that you might need to learn some computer science topics like data structures as well. You just can't rush these things but you can accelerate it a little.

As for me, my C++ knowledge is 'rusting away' by the day. I learned the STL with C++ when it was made official only a couple years after (like over 10 years ago). Nowadays you have Boost and the language itself has changed. I have not presently needed to update my C++ knowledge to what is latest and greatest but I shall.

Also worth pointing out is that In my experience, when you work with different companies you might find that you never use official C++ libraries and most current language features, but you are supporting legacy stuff that was first written maybe 20 years ago when not even built-in STL was available. This means either you are going to use some now-arcane implementation of someone's version of base libraries or the company rolled their own from the ground up many years ago, and because its so well entrenched in the code-base it continues to be used many years later. Not a big deal, but you might want to find that out for yourself, that if you are learning the latest and greatest of library and language features - you might or might not be using it in practice with your company.

You can PM me if you have questions but I'm not sure I can commit the amount of time you might need in a tutor role.

u/TurkishSquirrel · 3 pointsr/learnprogramming

C++ Primer 5th Ed. is the recommended C++ book for beginners and is excellent. The Zyante thing they're doing is this interactive online book which is just kind of ok, although I didn't do it for CS10. Definitely talk to the TA and professor if you need help (it sounds like this is only online interaction? kind of sucks), the school also has SI (student instructor) sessions that you can attend for this course along with a tutoring office that has instructors for all types of courses. Keep in mind that the quarter system goes by quickly, and you don't want to fall behind.

I think if you start working through C++ Primer you'll be more than prepared for the course. Oh and welcome to UCR!

u/JacboUphill · 3 pointsr/UCI

You don't have to know anything about programming going in, as aixelsdi mentions. If you want to get ahead, here's some information which may help you do so. The rest is up to your own initiative. It can never hurt to know more about CS or more languages, as long as you don't waste time complaining about what's better in [insert language of choice].

I wouldn't recommend learning data structures and algorithm analysis before coming to UCI. Not because they aren't fundamental, they are. But because most people find it harder to learn those abstractions before learning the tools that utilize them (Python, C++, etc), which is why ICS 46 and CS 161 aren't the first classes taught. If you like math proofs more than math problems then maybe go that route, it could be helpful as iLoveCalculus314 mentions.

Languages: The CS introductory series (31-32-33) which you'll be taking first year is taught in Python. It switched to this because it's a good first language as a teaching tool. Right after you're done with Python, 45C will teach you C++ and 46 will use C++. The lower division systems core (51-53) generally use C or C++ but it differs by professor. Knowledge of Python will be useful in making your first year easier. Knowledge of the other two will make your next three years easier because they're common mediums for upper division courses. But you should be able to pick up a new language for a specific problem domain by the time you reach upper division.

Courses: If you want to get a head start on planning your courses, check the UCI Catalogue - Computer Science page. At the bottom it lists a sample of what your schedule over the 4 years might look like. That page is for the "Computer Science" major, for other majors in ICS see here.

Course Resources: You can actually view the Schedule of Classes without being a UCI student. Select a term (like Fall 2014) and a department (like I&C SCI) and it will list what classes were offered that term. Most lower div will be I&C SCI, most upper div will be COMPSCI. From the results you can go to the websites for those courses to see a syllabus, books used, etc. For example, here are the current websites for the introductory series ( ICS 31, ICS 32, ICS 33 ).

Your course professors and books and assignments will NOT be identical to those, but looking at what's currently taught will give you a pretty good idea of what the course entails so you can pre-learn anything that sounds difficult.

Books: If you have to pick one book to learn before coming to UCI, I would highly recommend C++ Primer, 5th Edition. It's very well structured as a self-teaching tool AND as a reference manual. You won't come away with any Python knowledge, but picking up Python as someone versed in C++ is easier than the other way around, and you'll find 45C much easier as well since you can focus on language quirks rather than fundamentals.

If you choose to learn Python first, Introduction to Computing Using Python: An Application Development Focus is the book currently suggested for ICS 31/32, and Learning Python (5th Edition) is suggested for ICS 33.

Another solid circlejerk book in the CS community is Code Complete, but I wouldn't recommend reading that until later on since it's more of a "best practices" book.

u/treeturtle · 3 pointsr/learnprogramming

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

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

u/jetsonian · 3 pointsr/learnprogramming

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

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

u/BestOpinionEver · 3 pointsr/learnprogramming

Objective-C is a fine first language, it won't be as easy as others would but unless your going to give up easy don't worry. The place I started was with this book, it really does a great job and if you go through the whole thing it can help you a lot! Use google, reddit, and stack overflow for any questions you have in addition. Then once you read the whole thing and feel okay about it here is a link to some free podcasts to help you get in the mind of making apps and for some additional support. I would definitely recommend reading all the book first though because those lectures move pretty fast, and that course is set up to be taken after a few of the intro to programming classes are out of the way. Also take advantage of this /r/iOSProgramming

u/defeatedbycables · 3 pointsr/IAmA
  1. The bootcamps that get the media publicity focus on intro to programming to "full stack" developer path, which, depending on your CS curriculum, should be what you get anyways - with added diversions into heavier CS stuff. Most college programs I know of do stuff like Operating Systems, Algorithm Analysis, Systems Programming (C/Bash/C++), Programming Languages (normally several small assignments done in several languages - i.e.: 'Implement quicksort in Ruby, C and Java') and Theory of Computation (my personal favorite) in addition to your 'Intro to Programming/Software Development' courses which is normally 2 semesters of basically learning a language (and the abstract concepts that apply to all languages) and then a Data Structures course.

  2. Anyone in the industry that has knowledge of hiring processes will tell you that a GitHub with many side projects and neat things you've done for either side money or personal growth is more important than a 4.0 GPA.

    I did Java as my language in my undergrad (for the intro courses) and for higher level courses I did a mix of Objective-C, C, Ruby, Haskell, Clojure - whatever really seemed interesting or suited to solving the problem.

    The only way you come to better understand a language and it's nuances, in my opinion, is to use it and use it a lot. Finding out the power of a language (and all common languages do have power -albeit different from each other) is awesome. The more you use it, you'll find what you hate.

    I also read a bunch of side material - Extreme Programming Explained, Objective-C Programming: The Big Nerd Ranch, and the ever popular Learn You a Haskell For Great Good! are some of the things I played with.

    If your curriculum doesn't require but offers a Capstone course, I would highly recommend it. Making a full product from start to finish is an amazing experience and it looks great on a resume.
u/ImEasilyConfused · 3 pointsr/IAmA

From OP:

>The exact four books I read are:

>Learning Obj-C

>Learning Java

>iOS Programming: The Big Nerd Ranch Guide

>Android Programming: The Big Nerd Ranch Guide

>However, I would now recommend learning Swift instead of Obj-C. At the time when I was looking into iOS books, good books on Swift were few and far between.

From u/AlCapwn351 in regards to other sources to learn from:

>www.codeacademy.com is a great site for beginners (and it's free). It's very interactive. W3schools is good for learning stuff like JavaScript and HTML among other things.

>When you get stuck www.stackoverflow.com will be a lifesaver. Other than that, YouTube videos help and so do books. Oh and don't be afraid to google the shit out of anything and everything. I feel like an early programmers job is 90% google 10% coding.

>Edit:

>It's also good to look at other peoples code on GitHub so you can see how things work.

u/SlaunchaMan · 3 pointsr/iOSProgramming

Stephen Kochan’s Programming in Objective-C is great for learning.

u/rishabhsingh8 · 3 pointsr/jailbreak

To go along with what /u/xXCallMeGreenyXx said, you should definitely learn Objective C before attempting tweaks. I'd personally suggest [this] (http://www.amazon.com/Programming-Objective-C-Edition-Developers-Library/dp/0321967607) because it starts from the basics.


Feel free to PM me though, if you need any help. :)

u/mfbridges · 3 pointsr/iOSProgramming

The book Programming in Objective-C is pretty good, and focuses on the language itself rather than SDKs.

u/thecoffman · 3 pointsr/ruby

If you're looking for a straight reference book on Ruby and you know how to program, I find that "The Ruby Programming Language" is better than the pickaxe, but it all comes down to personal preference. Both are excellent books.
http://www.amazon.com/Ruby-Programming-Language-David-Flanagan/dp/0596516177/ref=sr_1_1?ie=UTF8&qid=1289253722&sr=8-1

u/fofgrel · 3 pointsr/javascript

JavaScript: The Definitive Guide. It's long, but very thorough.

u/negative_epsilon · 3 pointsr/cscareerquestions

>how, exactly, things like MVC work in action, and why the little things always end up more challenging than anticipated.

These are things a bootcamp will not teach you.

I just finished this book and it goes over a lot of things like design patterns and how to stay agile, why code rot happens, etc etc. It might help you a lot more than a bootcamp would, and costs about 300 times less.

u/zebishop · 3 pointsr/csharp

I found that often the best way to know if your implementation is SOLID is to write the unit tests for it.

For example, if you want to test the PreferencesThing class, you could run into an issue because of the dependency on PreferencesStorage() : if it needs a file, the network, whatever, it will be hard to write. So PreferenceStorage should implement a IPreferenceStorage interface, that you would mock during the tests. And your class constructor or GetThing method would take a IPreferenceStorage parameter. In a strict SOLID approach, I guess that even the ObjectSerializer could be considered problematic.

That being said, keep in mind that SOLID is an excellent way to structure your code, not a magical hammer. Use it wisely.

I would recommend (if it has not been made) reading http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258 which goes in length on those topics. Also, anything else by Robert Martin (uncle bob) is usually a good reference on the topic.

u/sethgecko · 3 pointsr/NewOrleans

LSU's problem is not budget cuts. Their CS bachelor and masters programs have been unaccredited and very poor for 20 years. Their CS PhD program on the other hand is quite good but that's a completely different entity. (I'm not saying brilliant people haven't graduated from LSU CS, but those people were brilliant themselves and largely could have done without the 4 year term in undergrad since they learned more on the job than in Coates Hall)

SLU, LSU and all state universities are going through budget cuts. I'm on the advisory board for SLU and ULL and in the case of SLU in 2004, 67% of their funding came from the state. In 2014, it's down to only 28% from the state. So, tuition has gone up. The pressure for private donations has risen sharply. But despite this SLU CS revamped the department in 2005 including modern technology into the curriculum, modern theoretical concepts and increased its student project exposure with modern technology and techniques many times over.

So while LSU recently added a class incorporating AngularJS in it, SLU has been teaching students cutting edge technology and theory and technics like SOLID principles, MVC and now AngularJS for a decade now. I was directly involved in SLU continuing their ABET accreditation 6 years ago and wasn't even needed for the 2014 check. SLU is also constructing a new building for CS, despite having build a new for them less than 16 years ago. I don't know how I feel about it but whatever, it's a perk.

The difference isn't money, it's people. SLU and ULL CS profs have LSU profs beat by a country mile. The SLU curriculum is constantly adapted for the industry. The student focus is experience and application of the theoretical techniques. The theory classes will teach you a dictionary is faster than a list and in the project courses, which start sophomore year, you will see why and will never forget it.

Consulting firms cherry pick ULL and SLU junior project presentations for new hires while LSU CS graduates are largely unimpressive until their 3 year maturity.

So snag a used copy of the cs bible and give Doc a call.

u/thomaslee · 3 pointsr/learnprogramming

Unfortunately there's no substitute for practice, but one way to help you along your way might be to approach this learning from a testing perspective:

Write a few high-level integration or "system" tests that drives your program at a very high level -- ideally such that it doesn't need to deal with your program's internals at all (e.g. if your program should process some files and prints some output, your test might generate your files, call your program to process those files, then check the output is what you expected).

Then write your program against these tests. If you mess up your internal design, you have your high-level integration tests to prove your program's correctness when it comes time to refactor.

Of course, while you're figuring out your internal design you can be using unit tests to drive the design of individual classes too -- but don't be afraid to throw those unit tests away if your internal design happens to need to change.

Lots more detail about this sort of approach in https://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445 -- though I must admit, outside of unit testing everybody seems to have different terminology for testing at different layers (e.g. what that book calls "system tests" I know other folks call "integration tests").

u/purephase · 3 pointsr/rails

I don't think you need it explained from a Rails point of view. Ruby is an OO language, and Rails simply exploits that.

You need to learn proper design patterns in Ruby (which apply to most OO languages). Sandi Metz's Practical Object-Oriented Design in Ruby is pretty much the gold standard for Ruby and very readable.

It's based heavily off of Martin's Agile Software Development, Principles, Patterns, and Practices.

After that, you can look into SOLID but, in Ruby-land, I think the single responsibility principal coupled with the rules laid out in Metz's book (summarized here) is a good place to start.

Also, it's worth noting that if you have good test coverage it makes re-factoring much, much easier.

Good luck!

u/Midas7g · 3 pointsr/PHP

Object Oriented Programming is not for organization, or even for making parts reusable, although those are nice side-effects. OOP is for one thing: making your code easy to change. If you look at your code and discover nested if-elseif statements, or switch upon switch, you're definitely writing spaghetti code that is brittle and difficult to change.

If you use OOP for making your code easy to understand, you'll end up forcing concepts into your code that maybe don't really apply to the actual problem. For example, read chapter 6 from Agile Software Development, Principles, Patterns, and Practices. Everyone who starts solving the bowling problem will introduce the concept of "frames" but actually sticking with that object structure will needlessly complicate the design.

I develop by first writing a test, making it go green and then refactoring out the duplication. Then later when I need to make a change, I only have to understand a small bit of the code and I can make a change in a single place, confident that the places this functionality is shared will also behave in this new way.

My app is deployed weekly with new and occasionally radical features, is used by hundreds of thousands of people a day and hasn't had a single bug regression since we started programming in this fashion.

tl;dr: both of you are using OOP wrong.

u/MegaGreenLightning · 3 pointsr/javahelp

I've read both Effective Java and Clean Code and highly recommend them as well.

There's also Agile Software Development (by Robert C. Martin):
http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445/ref=sr_1_1?ie=UTF8&qid=1451828712&sr=8-1&keywords=agile+software+development

This book contains among other things a description of the SOLID principles of software design. For example the Single Responsibility Principle tells you that each class should have only one responsibility. This reduces coupling and leads to small and more easily understandable classes. The book also contains some nice case studies showing how to apply these techniques.

While Clean Code deals with writing code and how to design methods and classes, Agile Software Development tackles the topic at a higher level and discusses how to develop and design software consisting of different classes and packages etc. It requires a basic knowledge of programming and OO, though.

Robert C. Martin has also created a series of purchasable training videos at cleancoders.com. These videos cover the topics of both books starting with the rules for clean code and then going into the SOLID principles and other advanced topics.

u/UpAndDownArrows · 3 pointsr/learnprogramming

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

u/d357r0y3r · 3 pointsr/programming

He hits on a lot of the same points in his book: http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/

Worth a read, certainly had an impact on how I approach refactoring and design in general.

u/threepipe · 3 pointsr/arduino

Lol I've never heard a script kiddie ask for factoring advice... guess there is a first time for everything. Maybe try reading this -- https://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_1?ie=UTF8&qid=1468244890&sr=8-1&keywords=refactoring.

u/materialdesigner · 3 pointsr/programming

Refactoring

read it. seriously. it's a great book. and it's invaluable.

u/dohpaz42 · 3 pointsr/PHP

Agreed. There are plenty of resources out there that will help you understand design patterns. If you're new to the concept, I would recommend Head First: Design Patterns, it might be based on Java, but the examples are simple to understand and can mostly apply to PHP as well. When you feel like you've grasped the basic concepts of design patterns, you can move on to more advanced texts, like Martin Fowler's Patterns of Enterprise Design - this is a great reference for a lot of the more common patterns. There is also Refactoring: Improving the Design of Existing Code. These are great investments that will help you with any project you work on, and will help you if you decide to use a framework like Zend which uses design patterns very heavily.

u/throughactions · 3 pointsr/Python

Personally, I look for code smells. You can find them formalized in Refactoring: Improving the Design of Existing Code.

u/pitiless · 3 pointsr/PHP

The following books would be good suggestions irrespective of the language you're developing in:

Patterns of Enterprise Application Architecture was certainly an eye-opener on first read-through, and remains a much-thumbed reference.

Domain-Driven Design is of a similar vein & quality.

Refactoring - another fantastic Martin Fowler book.

u/nekochanwork · 3 pointsr/learnprogramming

> Is there a true singular source to learn Java?

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

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

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

u/cannibalbob · 3 pointsr/cscareerquestions

The feedback about "jargon for development" can be solved by going through some books cover to cover, making sure you understand the theory, and implementing the exercises. I understand that feedback to mean that the person who gave the feedback believes there is too high a chance you will inflict damage on the codebase by making decisions not grounded in solid theory.

Examples of titles that are classics and widely known:
Algorithms (4th Edition): https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X (there is an accompanying coursera course).

Code Complete: https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?s=books&ie=UTF8&qid=1469249272&sr=1-1&keywords=code+complete

Clean Code: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?s=books&ie=UTF8&qid=1469249283&sr=1-1&keywords=clean+code

Functional Programming in Scala: https://www.amazon.com/Functional-Programming-Scala-Paul-Chiusano/dp/1617290653/ref=sr_1_2?s=books&ie=UTF8&qid=1469249345&sr=1-2&keywords=scala

Learning Python: https://www.amazon.com/Learning-Python-5th-Mark-Lutz/dp/1449355730/ref=sr_1_1?s=books&ie=UTF8&qid=1469249357&sr=1-1&keywords=learning+python

Effective Java: https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_5?s=books&ie=UTF8&qid=1469249369&sr=1-5&keywords=java

Haskell Programming From First Principles: http://haskellbook.com/

I included multiple languages as well as language-agnostic ones. Functional programming is the near-to-medium term future of software engineering, and most languages converging towards that as they add functional features.

I don't think bootcamp is required. Learning how to learn is the most important thing. If you get into these books, lose track of time, and feel "aha! that's how these things that I previously thought were unrelated are actually the same thing!", and are able to keep it up for weeks, then that is a good sign that you can get to where you want to be.

u/rosenasty_ · 3 pointsr/androiddev

I've done Android for 5-6 years. It put me through college, got me a job after. It pays well, but I'm moving to another development position because I can't envision a career in android development. Keep your career goals in mind. They may be radically different from mine, and that's fine, but know them.

As for coding: Effective Java Dat gud shit. A little dated, but it's unlikely to steer you wrong. Android lags behind the latest Java versions. Android will get Java 8 Java 9 when the sun is dead.

Androiddev Protip: Don't be afraid of reading the Android source code when you're trying to understand something. I'm a veteran, and I do it probably every other day. The internet is full of lies.

EDIT: fistshake @ /u/little_z for torpedoing my genius witticism

u/SofaAssassin · 3 pointsr/cscareerquestions

You probably won't need to do anything until you actually start working, because you don't know what the tech stack of your company looks like yet.

For me, the generic Java-centric books that I think every Java developer should read are the following. They are the only Java books I did not end up burning/shredding:

  • Java Concurrency in Practice - Written by Brian Goetz, who architected and implemented large portions of the java.util.concurrent API that was introduced in Java 5, which makes writing concurrent code easier depending on your use cases.

  • Effective Java- Written by Joshua Bloch, who implemented major portions of the Java API. This is a lot of best practices for Java which are still applicable today (the book is 6 years old).

    Beyond either of those, though, I really wouldn't care about any other dead tree Java book. You'll probably spend significantly more time learning internal libraries and 3rd party stuff like Spring or Guice or Apache Commons or whatever your company uses.
u/t-rek · 3 pointsr/learnprogramming

Java

I heard that Effective Java is really good if you knew the basics (you should try to read into it a bit tough, as it isn't follow a classic tutorial format, but contains best practices and "recipes".

Then again you cold try some general programming books like:
Code Complete
Design Patterns(check the Head First edition too)
Refactoring
some books about analysis and design

Web

I've just read about a really good tutorial site of Mozilla on reddit. I will look it up in a minute

EDIT: here

u/thehollyhopdrive · 3 pointsr/java

Two Java specific books you should read cover to cover (and keep around as an effective reference) are Effective Java and Java Concurrency in Practice, and you should also seriously consider reading Design Patterns. The examples in it aren't written in Java but they hold for all OO languages.

u/beltedgalaxy · 3 pointsr/java

They did talk about some good, solid practices for Java, that really don't go out of relevance.
If you have a solid base of Java, much of what they talked about can also be found in a more cohesive format in Josh Bloch's amazing book "Effective Java" . even though this book was last published in 2008, the content is as relevant as ever, as it discusses foundational best practices.

u/ewiethoff · 3 pointsr/learnprogramming

I learned Java in the late 1990s from the first edition of Learning Java and also some of the official online tutorials. I just fooled around with it a short bit. I relearned Java some years later from Head First Design Patterns and Effective Java. The Patterns and Effective books really help you design your classes. Ps: I know nothing about Android programming.

u/fabio1618 · 3 pointsr/ItalyInformatica

Questo è un classico anche se un po' datato: https://www.amazon.it/Effective-Java-Joshua-Bloch/dp/0321356683

Ti consiglio di abbinarlo a https://www.amazon.it/Java-Action-Lambdas-functional-style-programming/dp/1617291994 per le ultime novità di java 8 (che sono fondamentali).
Sono in inglese e te ne devi fare una ragione... il 99% del materiale di qualità è in inglese.

P.S. Nè html nè css sono "linguaggi"

u/zachncst · 3 pointsr/cscareerquestions

Resources to help: Effective Java 2nd Edition by Joshua Bloch http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=la_B001CDCVUG_1_1?s=books&ie=UTF8&qid=1449594086&sr=1-1

Basically this entire book has most of the intricacies of Java boiled down. If you can commit this book to memory than most Java interviews will be killed.

Java 8 is definitely a new take on the language but most shops haven't gotten to it yet so knowing Java 7 is pretty much all you need.

u/nutrecht · 3 pointsr/java

> As such, the commission a team of 2 people to remake the tool in C++ and QT. Well that was started last January. 8 months later and they aren't even close to being done. I'd wager at this rate they have another 2 or 4 more months. The silly thing, is my program in java was 3 files with maybe 400 lines of code.

You are at a company with very junior people. Unfortunately it's juniors who fell into the expert beginner trap and feel they already know everything. It's common for people like this to shit on other programming languages. Actual experienced devs know they are just tools and pick the right tool for the job.

Regarding your questions; I for now would recommend to not focus too much on the framework (both Java EE and Spring are fine, and learning one means you're also learning pretty much 80% of the other anyway) and focus on your core Java skills first and foremost. You already have experience so you will probably blow trough something like this mooc really fast. Other than that books like effective Java and clean code are great books to have read for a professional Java dev.

When it comes to starting with either Java EE or Spring; pick the one you prefer. I'm personally quite fond of Spring Boot because it is quicker to get started with and still has all batteries included, but if you prefer Java EE it's fine too.

P.s. like others said; it's not been called J2EE for a long time. Some vacancies do write it this way but that's generally a sign the company hasn't gone with the times.

u/thakk0 · 3 pointsr/java

It depends, honestly. There is some discussion about this in Effective Java if you haven't read it.

I'll summarize some of what Josh Bloch says on the topic here:

> If a class is accessible outside its package, provide accessor methods...If a class is package-private or is a private nested class, there is nothing inherently wrong with exposing its data fields

For example --

public enum Planets
{
MERCURY(1), VENUS(2), EARTH(3), MARS(4), JUPITER(5), SATURN(6), NEPTUNE(7), URANUS(8)
private double _rateOfSpin;
public Planets( double rateOfSpin ) { _rateOfSpin = rateOfSpin; }
public rateOfSpin() { return _rateOfSpin; }
}

If you use rateOfSpin(), you have the option of making this a derived value without introducing a breaking change. For the cost of an additional "() -- you get some flexibility. If your enum is private or package-private, you can eschew the accessor with minimal risk.

Hope this was helpful.

u/zoqfotpik · 3 pointsr/java

If you're already past all the "learning java" type books, read this:

Effective Java: http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683


u/lbkulinski · 3 pointsr/java

From Data Classes and Sealed Types for Java:

>Digression -- enums
>
>If the problem is that we're modeling something simple with something overly general, simplification is going to come from constraint; by letting go of some degrees of freedom, we hope to be freed of the obligation to specify everything explicitly.
>
>The enum facility, added in Java 5, is an excellent example of such a tradeoff. The type-safe enum pattern was well understood, and easy to express (albeit verbosely), prior to Java 5 (see Effective Java, 1st Edition, item 21.) The initial motivation to add enums to the language might have been irritation at the boilerplate required for this idiom, but the real benefit is semantic.
>
>The key simplification of enums was to constrain the lifecycle of their instances -- enum constants are singletons, and instantiation is managed by the runtime. By baking singleton-awareness into the language model, the compiler can safely and correctly generate the boilerplate needed for the type-safe enum pattern. And because enums started with a semantic goal, rather than a syntactic one, it was possible for enums to interact positively with other features, such as the ability to switch on enums, or to get comparison and safe serialization for free.
>
>Perhaps surprisingly, enums delivered their syntactic and semantic benefits without requiring us to give up most other degrees of freedom that classes enjoy; Java's enums are not mere enumerations of integers, as they are in many other languages, but instead are full-fledged classes (with some restrictions.)
>
>If we are looking to replicate the success of this approach with data classes, our first question should be: what constraints will give us the semantic and syntactic benefits we want, and, are we willing to accept these constraints?

u/3m0rtal · 3 pointsr/ireland

Yes I agree. I'll have to take a look at that animation again. Its quite difficult as I'm using a list view. Book wise, for Java, I cannot recommend this highly enough,Effective Java: Second Edition, http://www.amazon.co.uk/gp/product/0321356683?psc=1&redirect=true&ref_=oh_aui_detailpage_o00_s00. For Android its an ever evolving environment so books tend to go out of date very fast. I'd recommend doing a udemy or udacity course

u/jasonswett · 3 pointsr/rails

> I am a relatively new to development

If you're new to development, it's hard enough just to learn Rails by itself. In addition to the Rails concepts (e.g. ActiveRecord, view rendering, etc.) there's Ruby, databases/SQL, servers, HTML, CSS and JavaScript. Even if you're already comfortable with all those things, it's pretty hard to throw testing into the mix. When I first got started my question was, "What do I even test?" Do I write unit tests? Integration tests? View tests? Controller tests?

My advice would be to forget about Rails for a little bit and just practice testing Ruby by itself for a while. Then, once you're comfortable with testing Ruby, it will be easier for you to go back and try to write some tests in Rails.

> What is your recommendation on if I should focus on rspec vs minitest?

A person could make technical arguments for either. Deciding which testing framework to use depends on your objectives. If you're teaching yourself testing to become a more marketable developer, then I would definitely recommend RSpec. Almost every Rails project I've worked on (20+ production projects) has used RSpec. Having said that, it's less important which tool you choose and more important that you have a solid understanding of testing principles. I personally chose RSpec and I'm glad I did.

Here are some testing resources I often come across:

Growing Object-Oriented Software, Guided by Tests (awesome book, highly recommended)

Rails 4 Test Prescriptions (just started it, seems good so far)

Working Effectively with Legacy Code (super good book and more relevant to testing than it might seem like)

Everyday Rails Testing with RSpec (haven't bought it yet but seen it recommended a lot)

Destroy All Software (just bought it today, seems good so far)

Lastly, I myself created what I call a Ruby Testing Micro-Course designed to make it easy for people like you to get started with testing. Feel free to check that out and let me know what you think.

u/davedevelopment · 3 pointsr/PHP

Growing Object Oriented Software, Guided by Tests is hands down the best TDD book out there in my opinion.

u/zargx · 3 pointsr/java

> The idea is that both DAOs join the transaction, and that either the
> data from both DAOs ends up in the DB, or none at all. The DB has some
> contraints set for the data that we are persisting.

and

> What we however really wanted to test was whether the data
> actually ended up in our DB and whether both DAOs joined the
> transaction to see if the effects of DAO1 are correctly undone
> (rollbacked) when DAO2 throws.

This is not what mocks are for. This is why you do integration testing and functional testing.

Mocks state the expections a class under test has for its collaborators, and verify behavior given those expectations. You use this to grow the interface for collaboration based on class under test's needs. Furthermore, the owner of the interface is the class under test, not the collaborator. If you change the interaction with the interface, you must verify the collaborator still meets the expecations of the class under test. This is in line with the principle of Depedency Inversion.

Thus, returning to your example, the proper question is what does the ServerFacade need from the DAOs? You grow the DAO to meet the needs of the ServerFacade. Then, integration tests should be written to verify that the DAO meets the expectations set by ServerFacade. And any time you change ServerFacade's expectations, you'd better make sure the DAO still meets those expectations by updating the integration test.

Seriously, read the book Growing Object Oriented Software Guided By Tests, written by the authors of the EasyMock framework. Before reading your own interpretation of what you think mocks are for, read how the authors of EasyMock intended it to be used.

u/cpp_dev · 3 pointsr/cpp

A handy book might be The C++ Standard Library: A Tutorial and Reference (2nd Edition).
As for something more visual experience I would recommend to watch Going Native 2012 and Going Native 2013 and maybe C9 Lectures: Stephan T. Lavavej - Core C++ then C9 Lectures: Stephan T Lavavej - Advanced STL. After you get a good understanding of new features will be good to read Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14, to understand how and when to use them even better.

u/cauchy37 · 3 pointsr/oddlysatisfying

I personally prefer his The C++ Programming Language over this book as a reference for C++ and The C++ Standard Library: A Tutorial and Reference as a reference to STL. This one feels to me a bit more of a beginner book, still a very good read though!

u/hesham8 · 3 pointsr/learnprogramming

Pick up this book for $15 and work through it.

http://www.amazon.com/Objective-C-Programming-Ranch-Guide-Guides/dp/0321706285

This book is written for complete beginners so that you will learn the C programming language on OS X, and then more specifically Objective-C so that you can begin programming for iOS and Mac OS X.

It'll guide you through everything from getting your development environment (Xcode) to creating your first programs. There's also an active forum community at BigNerdRanch if you run into problems, although all of us should be able to help you as well.

In my opinion, not only do you not need Windows, but developing anything in Windows is much more difficult than in OS X. OS X is based on UNIX, which is a big deal for programming, because it gives you access to the terminal and a nix filesystem (which is identical to Linux's – most programmers would suggest you use a Linux variant such as CentOS or Ubuntu, but to be honest Mac OS X is just as viable for programming as any Linux variant).

As far as getting started goes, it's always a good idea to learn the granddaddy of most languages: C, and one of its extensions (C++ or Objective C). After that you're free to learn whichever language you want. Python is a popular choice because it's very simple (and powerful!), but I wouldn't make it your first language if you're serious about programming. Python is almost
too simple for its own good. You won't learn many of the common language conventions, which you would* learn if you learned C or Java.

There are a few free C textbooks online, but none are as beginner-friendly and OS X tailored as the one I linked above. As far as development environments go, on Mac OS X there are two important environments: Xcode, which is Apple's own development environment. It will allow you to program in C, Objective C, and NASM. And then there's Eclipse, which is a multi-platform environment that supports a whole slew of languages.

u/silverforest · 3 pointsr/IWantToLearn

I would think C rather than C++, because Objective-C is basically C with the object orientation from Smalltalk smacked onto it.

My recommendation is to pick up a book. This one (Objective-C Programming: The Big Nerd Ranch Guide) was one recommended by the iOS 5 Developer Cookbook.

u/sprint_ska · 3 pointsr/Cplusplus

Here's the thing: learning any language takes practice: fingers on the keyboard, brain engaged in solving problems. Any other resource that you use, whether books, classes, or whatever, will only be a guide to show you what and how to practice.

So ask yourself: when you tried learning with a book, did you do it sitting in front of a keyboard with an IDE up, and actually do the hands-on sections or the examples in the book? If you did and still had trouble, then sure, an MIT Open Courseware class might help you: maybe you just learn in a different way.

I myself learned Python partly by going through the MIT Intro to Programming OCW, and found it be a great resource. By contrast, I learned C++ by working through this book. In both cases, though, I had to actually do the homework, work my way through the practice problems, and get the hands-on time, in order to become comfortable with the language.

So, TL;DR: it depends entirely on whether you're willing to commit to putting in the work to practice.

u/somekindofsorcery · 2 pointsr/compsci

Tips and pointers for writing good Java code
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683

Algorithms in Java with code examples
http://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/ref=sr_1_1?s=books&ie=UTF8&qid=1416453105&sr=1-1&keywords=algorithms

For mobile development, check out the Big Nerd Ranch books. They contain guided projects that help you learn a variety of core features of mobile programming.

u/valbaca · 2 pointsr/cscareerquestions

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

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


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

Top Recommendations:

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

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


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

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

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

For Intermediates:

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

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

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

u/Xartorx · 2 pointsr/politota

После java можно как-раз.
По java советую Thinking in Java и Effective Java и в довесок.

u/Tovxc · 2 pointsr/AskReddit

If you're looking to get into programming, Java is a good starting language. It's relatively easy to pick up and does a lot of things for you that C++ doesn't. A good book to start learning with is Java Software Solutions by Lewis and Loftus. Another book for a little more theoretical and advanced learning is Effectiv Java by Joshua Bloch.

Edit: Book links

Java Software Solutions: http://www.amazon.com/gp/product/0132760770/ref=pd_lpo_k2_dp_sr_1?pf_rd_p=1535523722&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=0321465881&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=07GGH53RVK0D4GZY11KX

Effective Java: http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683

u/jj2parkie · 2 pointsr/manga

Probably. It might take some refractoring, but you would need a SaaS like Parse to handle the cross platform sync. I never tried Parse, but I don't want to since it costs money after a certain quota. I've heard some horror stories of independent developers messing up their Parse and blowing through their quota as they failed to put a kill-switch.

Same. I started this project around November to learn Android development. I have a year off before I start college, so I thought of learning some software development. My only experience at the time was high school computer science using C#, so even if you are learning you can contribute. :) Even if it's intimidating you can contribute by submitting issues and such. I contributed to a small database library which was over my head, but I browsed the source to find out how to do something, found an typo in the SQL, and submitted an issue explaining the problem and how to fix it: he forgot a letter.

Although I started learning programming in 2014, if you need any advice on learning Android development, you can PM me. I can provide a list of books you can find online which are helpful for learning Java:

  • Effective Java

  • Advanced Topics in Java

  • Clean Code

  • Design Patterns


    All these books are sectioned such that you only need to read parts you want to, so they are very good references. These books really helped in knowing the syntax of a language and knowing how to use the language which I found was very important for a project of this scale. My first version of it was so hacked together that it was impossible to refractor to add new features. These books really helped for the second version even though I couldn't apply what the books advised effectively.
u/Chomskyismyhero · 2 pointsr/learnprogramming

Head First Java

Thinking in Java

Effective Java

Java Concurrency in Practice

Best $150 you'll ever spend. Read in order listed.

u/oorza · 2 pointsr/javahelp

Read, in this order:

  1. Thinking In Java.

  2. Effective Java

  3. Java Concurrency in Practice

    Those three books should get you wherever you need to be, without getting more specific books (e.g. framework books).
u/MrPhi · 2 pointsr/InternetIsBeautiful

I usually look for the community pages of stackoverflow on the topic.
For example, to learn more about C++ I have been searching for something like "C++ book stackoverflow" and found this page. 4K upvotes, 27 revisions, 23 contributors, last edited in December 2015. Definitely a reliable source.

There does not seem to be any post about Java books on stackoverflow except for this more generalist one, that looks reliable but not updated since 2013.

This last post suggests Head First Java by Kathy Sierra.

I have heard that Effective Java by Joshua Bloch is a very good book for intermediate Java programmers, and the author in the first pages suggests The Java Programming Language by Ken Arnold as an introduction to Java. This last one is also listed on the stackoverflow answer, I would probably go for that one.

u/ekchang · 2 pointsr/androiddev

Beyond just Android resources, you're going to want to pick up a copy of Effective Java, which is the bible for Java development. It's also a very easy book to read; I say this as someone who has never completed a single "read x textbook pages" assignment in school because textbooks are awful. One of the things I look for in a developer is a strong Java foundation, more so than knowing the Android-specific nuances.

u/zenon · 2 pointsr/programming

Effective Java is necessary if you work with Java.

u/haakon · 2 pointsr/java

In your example, the first argument is not needed:

public static int sum(int... numbers) {
int sum = 0;
for (int i : numbers) {
sum += i;
}
return sum;
}

"Tricks" like these are just part of the language, so to learn them, read a relevant book I guess. To learn more idiomatics and best practices, I'd recommend Effective Java

u/denialerror · 2 pointsr/learnprogramming

Do some reading for a start. If you haven't already Effective Java and Java Puzzlers are IMO the perfect way to get into the finer complexities of the language.

Find something you don't understand and want to know more about, then find a book on it and read. If you don't find yourself getting anything from a book, practice what you already know and learn by doing instead by making something.

Also, if your employer is so inclined, see if they are willing to pay for you to go on some training. Even if they don't advertise a training budget, more companies than you think are are happy to fund their employees' learning.

u/edbrannin · 2 pointsr/cscareerquestions

A few suggestions for you:

  1. Buy and read Effective Java, 2nd Edition. It's a fantastic book on good patterns & habits to use with Java, written by one of the language's authors.
  2. Strongly consider using Maven, Gradle or something else that can pull Maven dependencies as your build system. It's so much nicer than keeping a bunch of jars around, and can make it much easier to reuse any libraries in your portfolio.
  3. If you have a server-ish pc at home, try setting up a Jenkins server on it to automatically build & test the projects in your GitHub account.
  4. When your applications start getting bigger, check out the Spring Framework. Especially the JDBC stuff when you start using a database, and Spring MVC is hands-down my favorite way to write a web API (it's the closest to Flask/Rails I could find for Java).
u/sunlollyking · 2 pointsr/javahelp

Joshua Bloch's essential Java is pretty widely available http://www.amazon.co.uk/Effective-Java-Edition-Joshua-Bloch/dp/0321356683

Its still considered the go to book when talking about concurrency and multithreading, i read it in University and found it a bit heavy going but it is highly insightful and Bloch is very knowledgeable on the subject.

u/acdesouza · 2 pointsr/rails

Do you know: Growing Object-Oriented Software, Guided by Tests?

It's main language is Java. But, the technics can be easily applied to Ruby environment.

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

u/caindela · 2 pointsr/learnprogramming

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

Here's how I would guide the younger me:

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

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

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

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

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

I thought that this book was pretty good, Growing Object Oriented Software Guided By Tests.

For me, when I was learning about TDD and testing in general, my biggest 'AHA!' moment was realizing that there isn't any secret to writing tests. Rather, the secret is to write code that is easily testable. When your code is easy to test, figuring out how to write your unit tests becomes trivial and all the TDD practices sort of fall into place. If your code is not easily testable, TDD and testing in general will be a huge pain in the ass, and it'll seem like a giant waste of time. In order to improve the testability of your code, I'd recommend reading about dependency injection/inversion of control if you don't already know about them.

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

The book recommended above by /u/clappski is very good. I also recommend it.

Since you probable will be doing some refactoring on your code, I'd also recommend:

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/MoreCowbellMofo · 2 pointsr/java

>How valuable is an Oracle cert?

No more than any other online course from a respected institution such as google, say: https://cloud.google.com/training/free-labs/ or one of the online courses available at MIT/Stanford.

>What else should I look into to boost my repertoire?

See if your university has any business partnerships you could do a 2-3 month project for. I worked with one of the university's here in the UK as part of a business/university partnership and that gives the students real world experience and us some free work. Win-win if the project is completed.

Sorry - mostly UK (amazon) links :)

TDD - https://www.amazon.co.uk/Growing-Object-Oriented-Software-Guided-Signature/dp/0321503627/ref=sr_1_1, Video by Trisha Gee whos fairly well known for speaking on this stuff: https://www.youtube.com/watch?v=QDFI19lj4OM (some very handy shortcut keys in the video and a good outline of some of the tools available to you).

Clean Code - https://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 (by "Uncle Bob")

Design patterns - https://www.amazon.co.uk/Head-First-Design-Patterns-Freeman/dp/0596007124/ref=sr_1_1

Learn to use shortcuts in Intelli J to speed up your ability to generate/refactor code: https://www.amazon.co.uk/Getting-started-IntelliJ-Hudson-Assumpção/dp/1849699615/ref=sr_1_1

Also Jetbrains does good newsletters (curated by the same lady that made the video above under TDD) sign up to stay up to date with interesting/relevant blogs/articles/industry news https://www.jetbrains.com/resources/newsletters/

Github - https://www.amazon.co.uk/Version-Control-Git-collaborative-development/dp/1449316387/ref=sr_1_4

Bash Commands - https://nikgrozev.com/2016/05/22/shell-cheatsheet-part-1-common-bash-scripting-tmux/

XP/Scrum/Kanban development process - https://www.agilealliance.org/glossary/xp/ the way we work

Trusted developer blog on various engineering topics https://martinfowler.com/

Interview Prep https://www.hiredintech.com/courses

Hint: the above books are likely to be available at any academic library. If not, request them. you likely only need to read 33-50% of them and you'll be golden. I imagine you can likely get hold of electronic versions of these books as well.

The best thing you can do to prepare yourself is to start practising developing projects... get them up on github. it could be a website, a desktop application/game/tool, a demo of sorting algorithms, a web service... literally anything. Fork others' projects, code a feature request and create a pull request back to the original repository/codebase on github. Just build something rather than nothing. Anyone can do the latter. There's so much more opportunity now that we have github available. Think of any thing you might be interested in working on and someone, somewhere has likely already got a project underway in that area, and you're free to submit a pull request to their repository at the click of a button. This wasn't really possible 10-15 yrs ago.

The simple answer is there's so much to know, you just have to find what your interests/passions are and follow those as much as possible.

No matter how good you are at what you do today, the tools will be different tomorrow and may even depend on the industry you enter: AI, web services, blockchain, computer vision, robotics? The list is long and each one requires you to be highly trained (over many years) before you're considered any good at it.

Just try to learn what you can. Find something that genuinely interests you and study it until you become a trusted authority on the subject, or you find something you're more interested in instead.

If you have any ideas for the type of area you might be interested in put them up here and perhaps someone can point you to a relevant project?

https://en.wikiquote.org/wiki/Howard_H._Aiken "Don't worry about people stealing your ideas. If your ideas are any good, you'll have to ram them down people's throats."

u/sh0rug0ru____ · 2 pointsr/java

This is Dependency Inversion.

The best demonstration I have seen for effective use of interfaces is in Growing Object-Oriented Software Guided By Tests. Interfaces express the requirements a unit has that its dependencies must fulfill. The dependency is inverted (synonymous with terminated?) - instead of the unit depending on the specifics of its dependencies, the dependencies must be adapted to suit the requirements of the unit.

u/FroggyWizard · 2 pointsr/UKPersonalFinance

Thanks!
During his degree, my friend who is currently in the machine learning engineer role had only studied one or two modules (out of 6 per year) of machine learning but still got the job. I believe they start with even more training than the software development grad scheme I'm on. I think it's 1-2 months of training before you start doing proper work.

The textbook was this one: https://www.amazon.co.uk/Growing-Object-Oriented-Software-Guided-Signature/dp/0321503627/ref=sr_1_5?crid=1VLKSUNCURZGL&keywords=test+driven+development&qid=1555061804&s=gateway&sprefix=test+driven+%2Caps%2C138&sr=8-5

I'll PM you the company

u/thekguy · 2 pointsr/programming

One option is to follow the techniques explained in the book Growing Object-Oriented Software, Guided By Tests. They use Test-Driven Development as their design technique, but they don't start from the bottom up and leave integration testing to the end. They start with the "walking skeleton" concept from Crystal Clear: A Human-Powered Methodology for Small Teams, an implementation of the thinnest possible slice of real functionality that you can automatically build, deploy and test end-to-end. They then start a TDD cycle by writing a failing acceptance test for one feature and, in the process of making that acceptance test pass, they will write a failing unit test, make it pass, and refactor and they will repeat this process until the acceptance test for the feature passes. The will then write the acceptance test for the next feature and go through the same process again until all features have been developed.

Besides the book itself, there is a short tutorial I was reading yesterday called Three Steps to a Useful Minimal Feature which describes how to write a "walking skeleton" using a simple "Pay a Bill" scenario.

u/slowfly1st · 2 pointsr/learnprogramming

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

​

Other things to learn:

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

    ​

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

    ​

    (edit: other important things)
u/ilikeorangutans · 2 pointsr/softwaredevelopment

Let me start by saying good code is code that solves the business problem at hand. For someone that really cares about internal quality of software that was a hard thing to accept.

You didn't quite define what you mean by "good" in your question, so I assume you mean adherence to SOLID principles. I've long thought like this too but realized adherence to some metric by itself is not very helpful, exactly because you end up in situations where your code is overdesigned, or worse, has the wrong abstractions.

What helped me figure out where the line is was stepping away from SOLID and focusing on Test Driven Development (TDD). TDD is great because it forces you only to write as much code as you need, not more not less. But in order to write testable code you'll have to apply SOLID principles. So you end up with code that reaches just the abstraction level you need to solve the business issue you're trying to solve.

The interesting aspect of this is that there's no clear universal line you can draw and say "this is too much design!" or "this is too little!". What I've observed is that there's just the right amount of design, and interestingly that's, at least in my opinion, a function of how much change you expect. Writing a 100 line hack to do something that you'll never change again is perfectly good code - it does what you need it to, it has certainly no wrong abstractions or over design. But as with most software, change is inevitable and with change internal quality becomes more important. If your code has good internal quality changing it is easier. The better the internal quality, the easier, within limits. So finding the line is an interesting exercise to balance the cost of design vs the expected rate of change.

If I may recommend some reading here:

u/Crandom · 2 pointsr/programming

I realise this isn't free but Growing Object Oriented Software Guided by Tests is the best book on testing and OOP that I've ever read. I highly, highly recommend it.

u/newocean · 2 pointsr/cpp_questions

It will get tougher just stick with it. I just pulled my copy out to figure about where you were. Another book I recommend owning is this one:

http://www.amazon.com/The-Standard-Library-Tutorial-Reference/dp/0321623215/ref=dp_ob_title_bk

Actually if you PM me, I'll give you my email or skype so you can ask questions.

u/zzyzzyxx · 2 pointsr/learnprogramming

> I'm really only showing them the deep end

Fair enough.

> const correctness has less functional impact on what a program does than functions/arrays/pointers/OOP/many-other-concepts

True, it doesn't affect the behavior of the code. But code that works is not inherently good code. It's hard to write good code in C++ and I see a lot of bad C++ come through r/learnprogramming so I am of the opinion that best practices should be taught early. I can understand your argument with opportunity cost though.

Perhaps it's sufficient to say at the outset "if you don't expect something to change, mark it const; I'll explain further in the future". Then in your lectures you can mention it in passing, e.g. "This function should not modify this parameter so I am making it const". It's easier to remove a too-restrictive const than it is to insert a necessary one later. You can expose them to consistently good const usage before you explain in detail.

> I may ask for your feedback on that lecture specifically when I do it, if you're willing to participate.

Absolutely. Just let me know when.

> Movie editing is the problem

Oh, sorry; I misunderstood. Lightworks seems to be the best free editor comparable to Premiere.

> Any suggestions for good resources

In my opinion, C++ is always best learned from a book. The two that I would recommend right now are C++ Primer 5th ed and The C++ Standard Library 2nd ed. Though you will be able to skip around to the C++11 parts, both would also be good for your students.

u/zzing · 2 pointsr/cpp

One possibility (available on the 9th): http://www.amazon.com/The-Standard-Library-Tutorial-Reference/dp/0321623215/ref=dp_ob_title_bk

The only potential problem is that the author had an interview recently that put serious question on the quality of the work done. So I would wait and see. The present book is really good though.

u/jtbrown · 2 pointsr/learnprogramming

I would highly recommend just diving in with Objective-C. Skip all the other languages - they'll just slow you down. The Big Nerd Ranch Objective-C Programming book is an excellent way to get started with programming in general, and you get to learn Objective-C (of course). Here's the link: http://www.amazon.com/Objective-C-Programming-Ranch-Guide-Guides/dp/0321706285

I've written a bit more on my blog based on my experience - it's a bit different from yours, since I already had Java experience when I learned Objective-C, but you certainly don't need to learn another language first. Here it is: http://roadfiresoftware.com/2014/03/can-i-learn-objective-c-without-knowing-c/

u/Adams_Apples · 2 pointsr/learnprogramming

> Maybe now is a good time to step back and consider what kind of programming job you might want to target.

This is definitely something you should keep in mind. Try to become really awesome at one thing. That's not to say you shouldn't have a well rounded education in programming, just that someone who is simply ok at everything isn't getting a job anywhere.

Here are a few texts which I consider to be great for a novice programmer:

The C Programming Language : ANSI C

It's an older book, but it's still the best book to learn the language.

C++ Primer : C++

I used this book to get started with C++, and found it to be easy to follow and informative. Some say it's not a beginner book per-se, they may be right. I was already very familiar with C when I started.

Objective-C Programming: The Big Nerd Ranch Guide : Objective-C

If you're planning to write apps for Apple's iOS and OS X platforms, you're definitely going to need to learn this. Otherwise, don't bother.

Algorithms : Algorithms / Data Structures

This is not the be and end all authority on algorithms, but it's a great book. It's less theoretical and more concrete in my opinion.

I don't feel qualified to give recommendations for other topics like Java or web development, as those aren't really my strong suits. Happy hunting!

u/goldfire · 2 pointsr/computing

If you can get another book, I would recommend this one; it is basically written to be the other book's only prerequisite, so it will take you through the language without assuming that you already know anything at all. As far as Internet tutorials, the first thing I found in a quick search that makes similarly few assumptions is this. There may be others, I'll try to look more later.

Keep in mind also that, if you want to write iOS applications, you're going to need either a Mac or some kind of hackintosh, because the tools you will need run only on Mac OS.

u/firstmanonmars · 2 pointsr/IWantToLearn

This book by Aaron Hillegass is what I consider to be the bible for noobs. He's an amazing teacher.

Objective-C Programming: The Big Nerd Ranch Guide

I've been writing Objective-C for a decade now and writing iPhone apps since Apple first launched their SDK, and since wayyy back in the Mac-only days I've always referred people to "the Hillegass book".

u/cupuz · 2 pointsr/iOSProgramming

I'm considering starting off with this and then moving onto this book

u/mutatedllama · 2 pointsr/ios

I'm currently working through the Big Nerd Ranch books which are fantastic. They have such a good way of teaching - you are constantly writing code and there are a lot of challenges for you to complete at the end of chapters. I picked them up after recommendations from many other redditors.

They have two books:

  • Objective-C Programming - for those with no previous Objective-C experience.
  • iOS Programming - for those who have worked through the above book &or those who already have a good understanding of Obj-C.

    I started with the first and would definitely recommend both.
u/fndmntl · 2 pointsr/learnprogramming

Before you read any iPhone-specific development books, you're going to want a good understanding of the C and Objective-C language. Trust me, building a good foundation will help you immensely down the road. I can't recommend this book highly enough. http://amzn.com/0321706285

u/ThingsOfYourMind · 2 pointsr/learnprogramming

if you could save up for C++ Primer, its really a good book on C++, I can't recommend it enough.
But for the 15 euro price range, perhaps the A Tour of C++ a book written by the language creator himself.

u/SpoobyPls · 2 pointsr/learnprogramming

I'm not sure the order they'll teach the courses, but from what I've seen generally, in computer/software engineering streams you start with C++. The book I'd recommend would be this one. It's a great book that goes into real depth. In my opinion, once you learn C++ well, you will breeze through Python, Java and C#. Although, you will most likely be using a different book for your course.

As far as laptops, it seems you've decided on Macbook Pro. One thing I'd check is what your school recommends. At one of the universities I attended they used software that was specific to Windows only; most students had Macs so they struggled. Although, you can technically use a VM.

u/Rapptz · 2 pointsr/learnprogramming

You'd have to forget nearly everything you know about Java. Most of the stuff doesn't apply (outside of some similarities with the class syntax). Programming Java style in C++ is one of the biggest mistakes people make when learning C++ from a Java background. My only strong recommendation is to avoid that mistake and realise that just because C++ has classes does not mean that the ways to do things in Java are the correct way to do things in C++.

With that out of the way, the best resource I can recommend would be a good book. I recommend C++ Primer as a good book to learn from. There are, unfortunately, not many resources teaching C++11 as it is relatively new but C++ Primer does a pretty good job.

u/jungletek · 2 pointsr/learnprogramming

It is, but you want this one instead.

u/btalbot · 2 pointsr/learnprogramming

The gold standard in beginner C++ seems to be Lippman, Lajoie, and Moo's C++ Primer, and at < $40 USD on Amazon, why not just pay the money? It is a good book, and if you are serious about learning it, that is a great way to go about it. Plus the money spent might owrk as a little more incentive to actually do it.

I don't know about any good video tutorials, and haven't thought about the medium enough to comment on it. I don't do well with them, and in my experience, they tend not to have a lot of exercises, which will help make you a good programmer.

u/moarthenfeeling · 2 pointsr/gamedev

Hi, thank you. :)

You should learn C++ using C++ Primer by S. Lippman. (Not to be confused with C++ Primer Plus which was linked here before). Just be sure to learn modern C++, not "C with classes"! Then I recommend reading Effective C++ and Effective Modern C++ by Scott Meyers. Effective Modern C++ has some awesome examples of modern C++, but it also contains pretty hard edge-cases, so be aware of that.

The best way to learn Lua is by this book. It's very well written and I consider it to be not only the best book about Lua, but one of the best programming books ever!

Lua Users wiki is also very useful and contains lots of resources and sample code.

I also recommend checking out SFML Game Development book which is well written and contains some game programming patterns. You'll find it very useful even if you don't use SFML.

Oh, and Game Programming Patterns is a great read too.

___

Now, how much experience should you have with C++ to make games with it? That's a hard question! You should just start learning it and try making some small games with SFML or Corona. You'll see what you have to learn for yourself. :)

u/Mat2012H · 2 pointsr/learnprogramming

This book: https://www.amazon.co.uk/C-Primer-Stanley-B-Lippman/dp/0321714113

Don't bother learning C++ from online resources.

u/Danori · 2 pointsr/computerscience

To learn C++ as someone completely new i recommend this series on youtube: https://www.youtube.com/playlist?list=PLAE85DE8440AA6B83
This will introduce you to the language and alot of the concepts that carry over to other languages as well. After you go through that whole series as boring as it may sound i really recommend you buy a textbook and read through it, doing whatever programming projects / exercises that interest you. My recommendation for a textbook would be C++ primer:
https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113

Edit: Also, I would recommend as your first language you start with Python. Its becoming more and more popular as an introductory language and its well suited to get you past the initial learning curve. I personally haven't worked with the language too much myself so I cant provide you with any recommendations. Good luck, comp sci is an incredibly interesting subject and is useful in so many aspects of work. :)

u/ztherion · 2 pointsr/learnprogramming

The C++ Programming Language is a good reference. If you want something more beginner friendly, C++ Primer is good.

u/nimtiazm · 2 pointsr/cpp

The C++ Programming Language (4th edition) by Bjorne Stroustrup is the de-facto C++ reference and understanding book. Hands down. Take a quick tour in earlier chapters and in depth references later in the book. If you’re an experienced programmer, it should start making sense to you pretty soon.

If you want another practical and feature-driven C++11 book then C++ Primer (5th Edition) https://www.amazon.com/dp/0321714113/ref=cm_sw_r_cp_api_17Luzb7M0HRNV should do it.

u/kisuka · 2 pointsr/Ragnarok_Online
  • rAthena
  • Hercules
  • Git
  • C
  • C
  • C++
  • C++
  • Linux
  • Client Hexing
  • PHP
  • FluxCP

    There's a few resources. Ultimately it comes down to you sitting down and playing around with all this stuff. Sure you can watch courses, read books, etc but the best learning experience comes from using the programming languages, operating systems, setting up the server emulators, etc.

    Keep in mind that you won't learn everything overnight. I started my time with all of it back in 2005. Wasn't until around 2009 that I had a firm grasp of most of these concepts and turned it into an actual career path. These are all skills that can be used outside of RO stuff.
u/aLogicalOperator · 2 pointsr/learnprogramming

First off I messed with a lot of languages before I think I really grasped the basics. I'll note that I used some Qbasic and Lua before starting my CS degree but I don't think they taught me good fundamentals because they are a little more "simple" and left me confused looking at lower level languages which is pretty much anything else.

I just started my CS degree recently and finished the first class which was in C#. I felt like this language really gave me a better grasp on the fundamentals.

More importantly than the language though I'd say get yourself a good book. For my C# class we used this book which is really good but kind of expensive. If you are interested in C++ many people recommend C++ Primer or The C++ Programming Language.

In taking my C# class I realized I thought I knew a lot about the basics of programming but actually didn't fully understand some very basic stuff, even things I had used a lot before.

u/StarBP · 2 pointsr/personalfinance

C# has excellent tutorials on the official Help site for Visual Studio 2013. You can download Visual Studio Community for free here. It is fully-featured and allowed for personal use (both non-commercial and commercial); you just are not allowed to use it on a development team of more than 5 people. After you become experienced with C#, learning Java is as easy as going through a textbook (also available in a physical version) and/or study guide (the latter might be a little too toy-ish for you if you're looking for job skills). If you are opposed to C# due to not liking Microsoft etc, then I'd use the previously linked Sedgewick and Wayne book and download Eclipse. Fair warning, C#'s tutorials are excellent and I've never found a better way to learn to code using a language with significant real-world use... if you choose the Java route to begin with it may be hard if you're not using a formal class. Once you know how to program, I'd say going through the MIT OpenCourseWare Intro to CS class would be a good idea to learn a different kind of language (Python, which has more scripting elements to it). C++ would make a good language to learn third, the best resources I've found so far for that are here, the book can be found as a PDF here or as a physical version here... warning, not all the material is available at all times due to the fact that it's an actively running class. A class on algorithms (book here, you may need to learn more math... probability, calculus, set theory, and the like... first, not sure what your background is on that) would be a logical step to take somewhere down the line. After that you will pretty much have most of the skills that someone with a minor in CS would get, learning the HTML/CSS/PHP chain and building a website would be a good way to round out your skill set. You should be able to get through quite a bit of this in the next 18 months. Good luck! Also, as others have said, try not to spend too much money... most of what you need can be found on the Internet, and the rest should only be a hundred dollars or so for a textbook. If another topic in CS that I haven't mentioned interests you as well, there's probably an OCW course for it, the sky is the limit once you have a firm foundation (I'd say the bare minimum for that is knowing Java and C++ and thoroughly understanding the material in the Algorithms class I linked above... still I've found C# is far easier as a first language though so if you try to shortcut it you might struggle... once you know one language the rest come pretty easily, especially if they are as similar to your first as C# and Java are, so your first goal is to learn C# [or Java if you are still that adamant]).

u/zom-ponks · 2 pointsr/cpp_questions

Get a book and an idea what you want to do, the C++ Primer comes highly recommended, but it's only going to tell you how the language itself works.

Also, check out the FAQ from the sidebar.

u/DutchmanDavid · 2 pointsr/gamedev

Read books. It might be boring, but a lot more informational than watching a youtube video.

If you already know how to program in another (preferably OOP) language there's The C++ Programming Language or C++ Primer if you want to learn C++11 (not to be confused with C++ Primer Plus, which is a different book 'series')

If you don't know how to program and you want to learn C++ for game development there's Beginning C++ Game Programming, which starts at the beginning (variables are one of the first things explained). After that book you should read up Introduction to Algorithms to make sure you're not writing horrible inefficient programs. Then there's Design Patterns: Elements of Reusable Object-Oriented Software to teach you more about certain patterns used in programs design (needed when using Ogre3D for example. Ogre3D was 90% magic to me until I read about Design Patterns. :p As alternative to DP:EoROOS there's Head First Design Patterns, but it's Java-centric which is a whole other beast than C++.

After those books there's this Stackoverflow thread. Read the first answer (the gigantic list of books). The thread used to be a ton of comments (with the most votes comments on top), but all anwers got copied to the first comment, so it's all sorted on votes. Code Complete (2nd edition) was the most upvoted one, The Pragmatic Programmer was the 2nd most upvoted one, etc.

Then there's this Stackoverflow thread, which is more C++ centric.

I hope this helps :)

u/Cloveny · 2 pointsr/IWantToLearn

For learning C++, personally I don't think youtube tutorials is the way. To this dayh I haven't seen any good beginner C++ tutorials on youtube that don't teach bad practices or have other notable flaws. Instead, in my opinion the best information available on C++ are various books. Since you aren't completely new to programming, I'd recommend C++ Primer 5th Edition, and for clarity, if you find a book called C++ Primer 5th Edition Plus it's the wrong one, and usually considered inferior to C++ Primer 5th Edition.

Visual studio in itself isn't a very complex thing to learn to use. You don't really need to spend a lot of time on trying to learn it to begin with, at least. You might want to check out some of their more advanced features when you've actually started to become more advanced in C++ though.

u/AmnesiA_sc · 2 pointsr/StopGaming

https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113

This book is incredible. I picked it up at Barnes and Noble a few years back and it's fast paced but easy to understand. I highly recommend it if you're learning C++

u/andrewbkillen · 2 pointsr/learnprogramming
u/amphanpy · 2 pointsr/learnprogramming

I heard good things about this book. It's awfully expensive, but I'm sure you could find a free copy somewhere.

https://www.amazon.ca/Primer-5th-Stanley-B-Lippman/dp/0321714113

Other than that, I understand how you feel. Learning programming for the first time can be a bit rough. For now, go through a book like the C++ Primer (or a similar one) and try to understand at least the basic syntax and key aspects of programming. (object oriented programming can come a little bit later!)

I also highly suggest, actually typing out a variety of C++ code related to a concept you're interested in, that is not straight from the textbook, then compiling and running it. For example, make an array of ints, then an array of doubles. Or write a function that multiplies two argument values and returns a double, then write a function that returns void, but also multiplies two argument values and instead prints the output. Or write a program that does a combination of things like loops, calling functions, iterating over an array. It doesn't have to be anything amazing.

u/totalanonymity · 2 pointsr/learnprogramming

Well, to begin with, learncpp is a discouraged resource in this subreddit's Recommended Resources. As mentioned previously, C++ Primer, 5e is hailed quite a bit on this subreddit.

As a side note: Check out this SO link on why using declarations are bad practice.

u/xd43 · 2 pointsr/learnprogramming

http://www.amazon.com/Primer-5th-Edition-Stanley-Lippman/dp/0321714113

There may or may not be a very easily obtainable PDF if you google the book name. If you're serious about c++, I recommend buying it though, since it's cheap anyway.

u/Uramon · 2 pointsr/italy

Secondo me dovresti partire dalla programmazione base, prima di addentrarti nello studio degli algoritmi. Per il linguaggio, un buon compromesso è il C++ per iniziare, a mio parere. Un ottimo libro (in lingua inglese) è questo

u/legends2k · 2 pointsr/cpp

I can understand. My suggestion would be start high-level and once you're comfortable then go low. In fact, the practical advise also is to stay high-level as long as you don't have a need (like performance benchmark showing a bottleneck, etc.) to go low.

If you're a book reading person, C++ Primer is a good book.

u/ai4pi · 2 pointsr/learnprogramming

I just bought it too. Learning c++ with C++ primer and YouTube since I’ll be having to take C++ courses for my degree. Also python for machine learning and web development stuff.

u/jamangold · 2 pointsr/learnprogramming

Programming in Objective-C by Stephen Kochan

u/dysfunctionz · 2 pointsr/jailbreak

Rather than a book, I highly recommend watching the Fall 2011 Stanford iOS development course. I had spent a whole summer going through this book and, while the book is decent, it only briefly touches iOS development.

A year later, I'd forgotten most of what I'd learned, and finally had an idea for an app. After spending about two weeks watching the Stanford lectures and doing a few of the course assignments (which are all available to download) I was ready to start in on my app, just going back in to watch a lecture here and there on big topics like Core Data and concurrency and learning the rest as I went from the documentation and Stack Overflow. And now I'm preparing to put out a beta at the end of the month. I highly recommend the course.

EDIT: The course does assume you have a decent amount of programming experience, which I did as a Computer Science student. It may be harder to get through if you haven't programmed in something like Java, C#, etc and don't have a basic understanding of code patterns.

u/beeb2010 · 2 pointsr/iOSProgramming

I would get a good reference book on objective-c like: http://www.amazon.co.uk/Programming-Objective-C-Automatic-Reference-Developers/dp/0321811909/ref=sr_1_5?s=books&ie=UTF8&qid=1367517200&sr=1-5&keywords=ios+programming

Maybe try some Cocos-2d game development (features on Ray's site)?
Also, maybe try creating some utility apps such as the standard shopping / things to do list app to get a good foundation in table views and storing data.

stackoverflow.com is a good FAQ type site with lots of questions on which you may find useful while you are developing.

icodeblog has some good info on, although it's not updated as much as it used to be - http://www.icodeblog.com/category/tutorials/

I've just come across this site (parse) which seems to have some good tutorials with downloadable code https://www.parse.com/tutorials which you might want to look at.

Also tuts+ http://mobile.tutsplus.com/category/tutorials/iphone/

maniacdev http://maniacdev.com/category/ios-developer-tutorial

may be of some use? http://docs.xamarin.com/guides/ios

edumobile http://www.edumobile.org/iphone/

ioscreator http://ioscreator.com

u/viper1092 · 2 pointsr/ObjectiveC

I've been learning ObjC on own for a bit now. I took a two-pron approach. I am reading this book which covers ObjC basics and I am watching the Fall 2012 Stanford iOS courses on iTunes U. It's really got me going thus far. It also breaks the monotony of just reading a book, it feels like you are really in the class room.

u/DavesNotThere · 2 pointsr/Random_Acts_Of_Amazon
u/TheMiamiWhale · 2 pointsr/iOSProgramming

Ray Wenderlich's site has great tutorials. I'd strongly encourage you to work through these books - they should give you a pretty strong foundation:

  • Programming in Objective-C - this will also give you a primer/background in C language features as well.

  • BNR's Objective-C Programming - great overview of the language

  • BNR's iOS Programming

    Ray Wenderlich also has some Swift tutorials but if you are just starting out I'd focus more on Objective-C for now as it will be very useful to know when looking at libraries that aren't ported to Swift.
u/codexjourneys · 2 pointsr/learnprogramming

Get this book from Amazon:

Objective-C Programming: The Big Nerd Ranch Guide
http://www.amazon.com/Objective-C-Programming-Ranch-Edition-Guides/dp/032194206X

It assumes zero knowledge and is the best programming book I ever read. (It's the one that got me started programming.) Then you can move on to their iOS Programming book. You might get stuck in that book. If so, go to Ray Wenderlich's tutorial site.

Have fun!

u/Pinkman5545 · 2 pointsr/learnprogramming

I'd learn objective-c first since a lot of iOS apps are still written in that. Swift is a bit easier to learn so once you get objective-c down you could move to that. There are lots of good tutorials online. Udemy's $19 course is pretty good. For books, I'd start with The Big Nerd Ranch.

u/rkho · 2 pointsr/learnprogramming

I found this book to be extremely helpful: http://www.amazon.com/Programming-Objective-C-Edition-Developers-Library/dp/0321967607

It assumes two things:

  1. You don't have any prior experience in programming.

  2. You are competent enough to comprehend logic when presented in a simple manner.
u/boyfarrell · 2 pointsr/ObjectiveC

I was in your position about ten years ago. The book that made it all click for me was Programming in Objective-C. In it Steven Kochan walks the read through the core principles of object orientated programming. As you said you are a complete beginner this seems like an ideal place to start.

Once you have the fundamental understood I would then recommend trying to build some simple apps. Follow these video tutorials, Apple Programming (YouTube).

u/oureux · 2 pointsr/iOSProgramming

2008-2009: Took 3 High school level Computer Engineer/Science courses and studied Assembly Language Robotics (This is where I really took up an interest in programming)

2010-2012: Attended Humber College (Toronto, Ontario, Canada) for a multimedia course that mainly focussed on web development.

2011-2013: While still in school and for a bit afterwards I worked at a company that did AS3 based facebook games and then ported them over to iPad using Objective-C (This is where I was transitioned over to iOS programming)

2013-Now: I've worked at many companies in different roles from junior->lead.

My learning basically was from trial and error, and not from being scared to just jump into large projects. You really shouldn't because it could put you off but I was in the state of mind that this is my career and I love learning new things so one of my first major personal projects was an RPG game engine made from scratch for iOS. It didn't use ARC, IB, or any 3rd party frameworks (When I was first taught Objective-C I was told this is how it should be so I continued down that road). I was very proud of what I was able to accomplish as such a Junior developer. I did go onto making more apps, for example: Sky and being on development teams, for example: BNN GO.

Books: Programming-Objective-C-6th & C-Programming-Language-2nd are the two books I read when starting out and sometimes reference or read them still.

Future: I hope to teach myself to be more patient as a developer and not jump the gun on features being "prematurely" completed or bugs being fixed. I believe this is a problem a lot of developers suffer from and could be seen as ADD-Developers if you will. I would like to crack down on this personally because I find myself shifting towards more of a lower level, application architecture role and will need to be more sure of my code as it would hold together the application in a sense.

u/Jeremy1026 · 2 pointsr/IAmA

I totally skipped the 2nd question you asked there, sorry about that. Find $32.48 in between the couch cushions, go to Amazon, and buy Programming in Objective-C by Stephen Kochan. Here is a link: http://www.amazon.com/Programming-Objective-C-Edition-Developers-Library/dp/0321967607 Read this book, work through it. Then do it again. This will give you a great base to build off of.

u/alexcp · 2 pointsr/learnprogramming

These two are the most recommend for beginners

The Ruby Programming Language

Agile Web Development with Rails


More advanced topics:

Metaprogramming Ruby

The Rspec Book

u/jeromius · 2 pointsr/webdev

I'd highly recommend checking out this book: JavaScript: The Definitive Guide - it covers everything you need to know in an easy to read way - I still keep a copy on my desk as a reference, one of the best books on the subject.

u/raze2012 · 2 pointsr/learnprogramming

honestly, the site looks better tailored towards JS than the resources I used back in the day to learn. The generic things I do for a new language is:

  • look at learnxinyminutes.com to get a feel for syntax
  • try and do some problems on hackerrank.com to practice (it's easier than coming up with and verifying problems by myself IMO)
  • google for important tools/ides/plugins that people like to use with the language after I get a feel for the core language (Don't obsess too much on this step. Or even feel compelled to use these tools. This is just so that I know they exist in the case I'll need a larger scale project done.

    for JS specifically, all I'd suggest is to keep using that site if it works, and get comfortable looking through/googling the mozilla docs (closest thing to a Javadoc, I guess). I'd normally point to this book as an offline referece, but JS has changed a lot since the last edition. I'd wait until a new edition comes out before jumping on it.



u/U3011 · 2 pointsr/web_design

Here's a good list I keep posting because people often ask the same question - not like it's a bad thing.

In any case follow the below, but I really suggest for total newbies to first go through the course Codecademy offers. It won't teach you much in how to do things but the syntax education is good. Follow their HTML and CSS courses and when you're done, create a site using just HTML and CSS. Once done, try to emulate a few of your favorite sites using just these two languages.

Once done you should check out the free 30 day Tutsplus courses on HTML/CSS and jQuery. At some point you will want to go back to Codecademy and take their JS course. Syntax and method of doing or starting certain things is important. It's incredibly easy to pickup the actual methods of doing things once your head understands the syntax used.

Any form of education that follows a hierarchical format makes for easy learning.
__


Codecademy isn't bad. It won't teach you much in the way of doing things but it does teach you the way to type out code, the general process and stuff. I can't speak for myself because I work as a professional developer and have been tinkering with code for 10 years now, but I did give the first lesson to one of my brothers. He's not great with computers or the Internet, but he was able to follow the first two sections of the basic HTML/CSS course and able to make his own site albeit very basic in nature nearly a month later (3 week gap following him doing the lessons). He was able to do a rough basic site of his Facebook profile, and he nailed it. It should open doors for you in terms of having the basic knowledge of how to do things. It'll allow you to read more advanced stuff and pick it up much faster than if you hadn't.

Below is a list I sent to someone on here a while back.

>
>http://www.reddit.com/r/webdev/comments/1eqaqo/best_books_or_online_resources_for_comprehensive/ca2w2dn?context=3



>PHP and MySQL Web Development (4th Edition)
>
>Beginning PHP and MySQL: From Novice to Professional
>
>Read the second book, do all the examples, then go back to the first book. Pay a lot of attention toward array manipulation. When you're comfortable with that, get into OOP. Once you do and OOP clicks for you, you'll be able to go to town on anything. I've heard a lot of good about Jefferey Way's video lesson courses over at TutsPlus. I've never used them nor do I need to, but I've never heard a single bad thing about their video courses. Their Javascript and Jquery is a great starting point. This is great stuff too if you're willing to put in the time.
>
>Professional JavaScript for Web Developers
>
>JavaScript: The Definitive Guide: Activate Your Web Pages
>
>Responsive Web Design with HTML5 and CSS3
>
>The Node Beginner Book
> Professional Node.js: Building Javascript Based Scalable Software
>
>Paid online "schooling":
>
>http://teamtreehouse.com/
>
>http://www.codeschool.com/
>
>Bonus:
>
>http://hackdesign.org/
>
>
>I've got a shit ton (Excuse my French) of books in print and E-Format that I could recommend, but it would span a couple pages. Anything is easy to learn so as long is it's served in a hierarchical format that makes it easy to absorb the information. A year ago I started to learn Ruby and using ROR as a framework. I can say it's been quite fun and I feel confident that I could write a fully complete web app using it. I started node.JS a few months ago, but it's been on break due to being sick and some unexpected events.
>
>My knowledge is extensive only because I wanted it to be. I'm not gifted by any means nor am I special. Not by a longshot. Some people are gifted when it comes to dev and design, most are not. Most only know one or the other. I forced myself to learn and be good at both. I'm 23, I started when I was about 12. I'm only breathing more comfortably now. I know a load of people on here and other sites who make me look like complete shit.
>
>
>Also for what it's worth, sign up to StackOverflow. It's the bible and holy grail rolled up into one site. It's amazing.
>
>Also;
>
>Hattip to /u/ndobie
>
>> CodeAcademy
>
Team Treehouse
> CodeSchool. This is more programming but still very useful & has free stuff.
>
Tuts+
> Google. Probably the best way to find out how to do something specific.
>
This subreddit. If you have any questions about how to do something, like parallax scrolling, try searching for it, then ask, make sure to include an example of what you want if you don't know what it is called.

u/sticksnbeans · 2 pointsr/learnprogramming

Python is an easier starting point than C. I've tried to learn Python many times, but I always find myself gravitating toward C.

C Programming Language by Kernighan and Ritchie is a very good book to pick up.

C Primer Plus by Stephen Prata is another good one for the C language. I gravitate heavily toward C. Mostly because it interests me. Also the first programming language I've ever decided to pick up.

Do not give up denizen! Programming is an exciting experience when you get things to work properly. There is so much you can do with it.

Best piece of advice is to choose what best suites your interests, and goals.

u/devacon · 2 pointsr/programming

7-zip uses a mix of C, C++ and assembly. Unless you have experience with any of these languages, I would highly recommend starting with something much simpler.

I would say if you're trying to learn programming, you need to strip away all the extra 'stuff' that gets packaged up to make a production system. Don't worry about the GUI, and put WPF and C# to the side (for the time being). Start with something simple that will allow you to learn variables, functions, types, control flow, etc. A lot of people recommend Python, and that's a fine place to start. Any language where you can open a new file, write a few lines of code, and see a result would be ideal (Lua, Ruby, Javascript, etc).

More to the point of your question, GUI design is hard. There are all kinds of issues that have to be taken into account: event callbacks from the 'worker' code to let the interface know something changed, threading issues (does the interface lock up while the backend is working?), does the 7z file format even lend itself to parsing just a directory listing without decompressing the entire file?... There is a lot there, and it's not a good starting point. It's something that you can move toward as you learn the basics, though. And I always like looking through other codebases looking for good ideas.

If you're really serious about specifically working with 7-zip, the code is available at their website. You'll need to download the source code from 7-zip.org, then you'll need C Primer Plus and C++ Primer Plus. These are the best 'intro to...' books that I've found for C and C++. You're looking at a few months of reading and experimenting, and a lot of frustration. You're not only going to learn the languages, but also the Windows API that will allow you to interact with the folder views. These are somewhat stubbed out in the 7-zip source, but the specific view you're talking about would need to be written from scratch.

Regardless, it sounds like a fun project and if you put in the time I'm sure you'll get some benefit from it. Just be aware that this is trying to paddle against the current, and it is easier to take a step by step approach (in my opinion).

u/DingDongHelloWhoIsIt · 2 pointsr/java
u/ZeroBugBounce · 2 pointsr/learnprogramming

The book CLR via C# is great on going in depth on these topics, so as long as you know the basics, this book can really fill out the details.

I would highly recommend it.

u/developerinsoul · 2 pointsr/csharp
u/anonymousbjj · 2 pointsr/dotnet

If anyone is interested in exploring this, the CLR does a lot more than just compile VB and C# to native code. Here is a book that will show you much more: http://www.amazon.com/CLR-via-Edition-Developer-Reference/dp/0735667454

Note: This is not a beginner book.

(EDIT) Technical error.

u/snarfy · 2 pointsr/dotnet

CLR via C#

.NET reference source. The gritty stuff is in mscorlib.

u/BlackOdder · 2 pointsr/csharp

This is my favorite book. Easy to understand but deep http://www.amazon.com/5-0-Nutshell-The-Definitive-Reference/dp/1449320104

u/indu777 · 2 pointsr/learnprogramming

If you are new to programming it is better to take another approach. You should choose your specialization first (game development, web, data mining or something else). Second try to solve problems in that area and use C# for this. For example if your choice is game development then search for books “how to make games with C#”.
If you cannot decide where to go with c# I recommend book: http://www.nakov.com/blog/2014/01/13/free-programming-book-csharp-fundamentals-nakov-presentations-slides-videos-lessons-exercises-tutorial/
It has lots of exercises and will teach you not only C# syntax but also basic programming techniques like OOP principles, algorithms and data structures.
If you already know any programming language then any C# reference book will be sufficient. For example http://www.amazon.com/C-5-0-Nutshell-Definitive-Reference/dp/1449320104/ref=asap_bc?ie=UTF8

u/webitube · 2 pointsr/Unity3D
u/ixAp0c · 2 pointsr/learnprogramming

C# 5.0 in a Nutshell might be what you are looking for. It's more of a reference than a tutorial, and if you don't know Java I'm not sure how hard picking up C# syntax will be (disclaimer: I don't program in C# and haven't coded a single line of Java since it was required in a High School class).

u/sirdoctoresquire · 2 pointsr/dotnet

So, this post is close to a week old. I hope I'm not too late.

Microsoft actually has some pretty good training courses that you can go through for free.

C# Jumpstart

ASP.NET Jumpstart

I used the jumpstarts as a refresher a while ago after I got stuck developing on Oracle for a while and they are both good overviews.

That said, when you are looking at doing MVC .NET development you are really talking about three things. Learning C#, learning about the .NET framework, and learning how to develop in Microsoft's implementation of the MVC framework. I would learn in that order.

Since you have experience with Java, C# should be fairly familiar to you. I'd still recommend skimming over the basic differences. Once you've got that in hand, it is good to learn about the basic offerings of the .NET frame work. I've found that C# 5 in a Nutshell does a great job at going over both C# and the .NET frame work. It is dry, but worth going over. Once you've been through the first few chapters, you can pick and choose where you want to dive in next. IMO, LINQ is great.

Then, once you've got a good grasp for C# and the underlying framework, it is pretty easy to tack the MVC model on to it. The biggest problem I've seen is devs trying to learn every thing all at once. Depending on your experience level, you may be able to dig right in. Best of luck.

u/Mr_Bennigans · 2 pointsr/gamedev

> I think if I learn how to program with an aim to work as a software developer and make games on the side, is this viable after just turning 20?


There's nothing wrong with the age of 20. I started school at 20, graduated in four years, and found work as a software engineer right out school.


What you have to figure out is how to make the best of your time left in school: should you take a class or two on programming and graduate on time, or (more dramatically) change your field of study to computer science and spend a few more years in school? That's something only you can decide. If you want to finish your architecture program and graduate in a reasonable amount of time, I can assure you that your math and physics background will be enough to get you work as a software engineer, but only if you can actually program.


Part of working as a software engineer means being able to program in multiple languages. That's because it's not really about the language, it's about the logic. All languages follow certain patterns and while syntax or wording may change, they all share ways to implement the same logic.


It also means knowing what data structures to use for what scenarios. The phrase "There's no such thing as a free lunch" comes to mind. All data structures have advantages and weaknesses and no data structure is perfect for every occasion. Know the differences, know the performance impact, and be able to speak to them. This won't just help you write better code, it will help you land a job. Interviewers love to ask questions about data structures.


As a corollary to data structures, you also need to know your algorithms. You need to know the performance impact of different ways to search and sort, traverse graphs, and find the shortest path (particularly relevant for game programming).


You said you're learning Python and that's great. Python is a great way to learn how to program. It's dynamic, it's friendly, and it has a rich library. Learn Python inside and out, then pick another language and figure out how to do the same things. C++, Java, and C# are all pretty popular in the industry, pick one of those. Once you know how to program in a few languages, you focus less on minute implementation details specific to one language and more on high level abstraction shared across multiple languages. By that point, you'll no longer be speaking in code, you'll be speaking in plain English, and that's the goal.


I don't know many good free online resources for learning languages, I learned mostly out of textbooks and lecture slides (along with lots of practice). There are some links in the sidebar to some tutorials that are worth checking out. Beyond that, I can recommend some books you may want to read.


  • Algorithms in a Nutshell - one of the best quick references on algorithms you can read
  • C# 5.0 in a Nutshell - excellent language reference, aimed more at advanced programmers, though it's comprehensive in scope, covering everything from language syntax and structure of a program to more complex tasks like threading, multiprocessing, and networking
  • Learning XNA 4.0 - a great game programming book, teaches 2D and 3D game development using Microsoft's C# and XNA framework
  • Java in a Nutshell - another great language reference
  • Starting Out with Java - introductory programming text, has end-of-chapter problems for reinforcement, a little pricey so see if you can find a used older edition
  • Starting Out with C++ - another good introductory programming text from Tony Gaddis
  • Python in a Nutshell - I can't speak to this one as I haven't read it, but I have been extremely happy with O'Reilly's "... in a Nutshell" series so I suspect it's as good as the others
  • Learn Python the Hard Way - free online book about learning Python, begins with simple examples then teaches you how to break it so you know both sides of the story, wasn't as comprehensive as I'd hoped but it taught me the basics of Python
  • Programming Interviews Exposed - sort an all-in-one book covering lots of different topics and giving an insight into what to expect for that first interview

    EDIT: I added Programming Interviews Exposed because it's a good reference for data structures, algorithms, and interview questions
u/cheesekun · 2 pointsr/dotnet

I agree. 50 dollars can get you a 2000 page reference book. Hell 30 dollars can get you a nutshell book http://www.amazon.com/5-0-Nutshell-The-Definitive-Reference/dp/1449320104/ref=pd_sim_b_1

But with StackOverflow & great MSDN documentation is there a real need for books that gather dust?

u/ooa3603 · 2 pointsr/cscareerquestions

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

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

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

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


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

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

u/pdexter · 2 pointsr/learnprogramming

I would look into IPython. Not that it's a book, but that's what most (all - hopefully) scientists use. And that's what you sound like you'll be using Python for.

As far as a book that focuses on Objected Oriented theory and applications? Not a clue. Maybe this? http://www.amazon.com/Python-3-Object-Oriented-Programming/dp/1849511268

I would suggest looking for an open source project and studying its design.

u/CreepyStepdad · 2 pointsr/learnpython

related question- I inherited a couple books, I could use some advice.

I'm about 2/3 through Think Python, I am working through the University of Michigan Programming for Everybody course (and the book: Python for Informatics) and the Rice University An Introduction to Interactive Programming in Python Part 2 (both on Coursera)

I inherited Introducing Python, Fluent Python, Python 3 Object Oriented Programming, and Effective Python

Which one should I jump into after I finish Think Python?

u/takethecannoli4 · 2 pointsr/learnpython
u/LinuxLeafFan · 2 pointsr/linux

O'Reilly texts generally have a good reputation. If you want to learn bash scripting it's probably a good place to get started. I personally have never read a BASH scripting book so I cannot comment.

Once you have gained some basic scripting skills and knowledge of some of the LINUX/UNIX power tools (sed, awk, grep, flow control, etc), I would suggest taking a look at the following wiki pages:

  • http://mywiki.wooledge.org/BashGuide

  • http://mywiki.wooledge.org/BashPitfalls

    The wiki pages I listed are very good but they lack information regarding common commands (sed, awk, grep, cat, echo, printf, join, paste, etc)

    For python depending on how far ahead you are, I would suggest Automate the Boring Stuff with Python and/or Python Crash Course. Skimming through them, Automate the Boring Stuff with Python is a quick introduction to some things you can do. Python Crash Course is a more complete/learn the language type book.

    If you feel you are becoming more advanced in Python, I would suggest picking up a copy of:

  • Python 3 Object Oriented Programming

    The above book was recommended to me by a developer and I feel I learned a lot from it when I was trying to take my python skills to the next level (especially coming from a background in functional programming).
u/voidpirate · 2 pointsr/javascript

I would check out Secrets of the JavaScript Ninja

It's a great book if you are coming from a different programming language to JavaScript. The syntax of JavaScript may feel familiar but don't be fooled. Javascript has many different quirks, that you should wrap your head around in order to write "good" JavaScript.

u/PoisonTaffy · 2 pointsr/learnprogramming

Agile Principles, Patterns, and Practices in C#

Covers a lot of varied grounds and isn't boring to read.

u/DEiE · 2 pointsr/learnprogramming

I would place OOP and practice on the top of the list. OOP on the top because it is much broader than a single language and practice second because practice is just plain important.

Data structures and algorithms come third and fourth because they are more forgiving in practice. OP is using Python which has a lot of data structures and algorithms built in (lists, sets, sorting, etc.) so they aren't immediately needed for results. On the other hand, if you aren't utilizing OOP and abstraction the software is more likely to turn into an unmaintainable mess (although your project will have to have a certain magnitude before it comes to this point).

One of the best resources I have read on OOP is Agile Principles, Patterns, and Practices. This one is focused on C# but the principles are applicable much more broadly.

Don't get me wrong, all are important, this is just the way I would prioritize.

u/pier25 · 2 pointsr/godot

If you want a great beginner book on C++ I recommend "C++ Without Fear"

u/banuday17 · 2 pointsr/java

Sure, glad I could help. It sounds like you're having some difficulties with the fundamentals of object-oriented programming. The Java tutorials are good, but they are focused on the Java specifics and don't really go into the bigger picture.

For that, I would highly recommend Agile Software Development, Principles, Patterns, and Practices by Bob C. Martin.

u/time-gear · 2 pointsr/6thForm

Projects on github is a good way to show them. And then you can talk about how to know how to use git (not worth mentioning IMO but still)

Books: https://www.amazon.co.uk/Software-Development-Principles-Patterns-Practices/dp/0135974445 is a book that outlined the SOLID principles for coding which are quite popular today. In the recommended section are some others by him as well

u/MrKurtHaeusler · 2 pointsr/software_design

Possibly one or both of Bob Martin's books.
Agile Software Development, Principles, Patterns, and Practices (comes as a Java or C# version, but many of the ideas will probably be useful if you are using an OO language) or
Clean Code

u/instilledbee · 2 pointsr/compsci

Data Structures and Algorithms in C++ by Adam Drozdek - Pretty much helped me survive my Data Structures class

[Refactoring: Improving the Design of Existing Code by Martin Fowler]
(http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672) - Serves as my go-to book at work, right next to Design Patterns.

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/teresko · 2 pointsr/PHP

What you have to realize is that framework is a tool for development. It lets you code pages faster, by already have done the "mindless tasks" (like creating user authentication or routing the requests) and letting you focus on the parts that matter.

But there is a cost - performance. Unless you really suck at writing code, framework will make you application slower, because of all the generalization and "works for everyone" approach.

If you have an existing site, just slapping on a framework will gain you nothing. If you want to rewrite you application from scratch, then framework will let you complete that in less time (if you already know how to use said framework).

If instead you want to expand or optimize the existing functionality, you should focus on refactoring and profiling your existing codebase. If that is the case, here are few books which would help you with it: Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin , Real-World Solutions for Developing High-Quality PHP Frameworks and Applications by Sebastian Bergmann and Refactoring: Improving the Design of Existing Code by Martin Fowler. Said book will not give you clear rules for "how to do this", but instead will explain you the direction in which you should aim.

---

P.S. in my personal opinion , CodeIgniter is one of the worst php frameworks out there, with unreasonably high popularity.

u/Pet_Ant · 2 pointsr/programming

Clean Code
Refactoring into Patterns
Both talk a lot about them but do not enumerate them authoratatively.

u/binarybabe · 2 pointsr/TwoXChromosomes

I've found that I gained most of my best experience on the job, and that staying at a job where I wasn't learning anything was a huge mistake and detriment to my career.

That said... I don't think I'm a super genius either. I did well in college and my GPA helped with my first few jobs. But I have lots of hobbies outside of work, and rarely spend my time at home thinking about the office. A lot of times companies aren't looking for the super genius type either... if they were they'd have a hard time filling staffing requirements. I think the keys are learning how to interview well, focusing on letting the interviewer know that you're willing and good at learning and having the basics of OOO down to a T. Come off as confident, even if you don't feel it. It never hurts.

As far as books go, here are some of my favorites:


Programming Interviews Exposed


Programming Pearls


Refactoring



I'm mostly a java programmer, so here are three absolutely necessary java books:


Head First Design Patterns


Core Java 1


Core Java 2 - Advanced


u/califield · 2 pointsr/webdev
u/vinnyvicious · 2 pointsr/gamedev

Have you ever heard of the open/closed principle? Or the single responsibility principle? Or Liskov substitution principle? All three are being violated. It drastically reduces the maintainability and extensibility of your code. I can't swap serializers easily, i can't tweak or extend them without touching that huge class and it's definitely not the responsibility of that class to know how to serialize A, B, C, D, E and the whole alphabet.

I highly recommend some literature on the subject if you're curious about it, it would drastically improve your approach to software architecture:

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

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

https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215

http://cc2e.com/

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

u/Astald_Ohtar · 2 pointsr/learnpython
u/bigmikemk · 2 pointsr/learnprogramming

What you do is called refactoring and it is a good thing to do as long as you don't do it instead of planning ahead. But often time you can't plan out every little detail and then it's the right thing to do some cleaning once you have a working implementation.

Martin Fowler wrote a whole book about the topic (which is very good btw): http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672

u/phuber · 2 pointsr/dotnet

If you are open to it, here are a few good reads to help you on your way. The legacy code book may pay dividends quicker given your situation.

Clean Code: https://www.amazon.com/dp/0132350882/ref=cm_sw_r_cp_apa_ruhyybGGV0C34

Refactoring: Improving the Design of Existing Code https://www.amazon.com/dp/0201485672/ref=cm_sw_r_cp_apa_gwhyyb1VRNSKK

Working Effectively with Legacy Code https://www.amazon.com/dp/0131177052/ref=cm_sw_r_cp_apa_0whyyb3Y604NJ

Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler)) https://www.amazon.com/dp/0321601912/ref=cm_sw_r_cp_apa_JxhyybA08ZQF8

u/MorrisonLevi · 2 pointsr/PHP

As others have mentioned you need tests.

If you can't write tests at all because the way the code is put together then the first step is to untangle things. This can be hard. If your code is working I'd probably just leave it alone until you need to touch the code for some other reason (adding a new feature, usually).

I recommend this excellent book for learning about specific ways to refactor, as well as when they are commonly used: http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672

u/gilesgoatboy · 2 pointsr/programming

strictly speaking, it depends on the language, but probably you don't understand objects. given that you're in Python and it's got OO (or close enough), I'm going to escalate that from a probably to a very very probably. basically, if you move the stuff inside the ifs into methods on objects, in the absolute simplest case, you'll put each if inside a different object, and then your huge chain of ifs turns into:

object.method(arguments)

And instead of throwing all those ifs in there, you basically run through all the ifs ahead of time by just giving that block of code an object of the appropriate class.

The absolute best book on OO (in my opinion) is Refactoring.

http://www.amazon.com/gp/product/0201485672?ie=UTF8&tag=gilebowk-20&linkCode=xm2&camp=1789&creativeASIN=0201485672

I have a feeling the Head First book on OO is also very, very good. I haven't checked it but the series is a great series.

u/ickysticky · 2 pointsr/AskProgramming

Refactoring: Improving the Design of Existing Code is ok. I don't know if it is as amazing as the reviews think, but it is pretty good. It is a little Java centric.

You really don't see many blog posts/internet articles about refactoring. It almost sounds like you are looking for help with design, refactoring is just the process of how to reach a better design.

The most important part is to write unit tests to make sure that you preserve the required behavior during refactoring.

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/Iteria · 2 pointsr/cscareerquestions

If you're 4 years into your career and you haven't been failing at it and getting fired, you probably don't need to go all the way back to the absolute basics. You just need to fill in holes and keep pace with change.

I like to read books/blogs on emerging technology and areas becoming relevant. Like I just read [Refactoring: Improving the Design of Existing Code] (http://www.amazon.com/gp/product/0201485672) because we were doing a huge refactoring project at my job. I read Ng-book and an .NET MVC right when I got my current job because I'd never worked with angular or MVC before. I'm currently looking at some stuff about .NET Core. It won't be relevant at most places for years, but it's nice to keep on the edge sometimes.

Blogs are also good things to read too. The Morning Brew is my favorite site right now for keeping up with .NET.

If you're worried about your fundamental skills I'd say work through something like codility. I think you'll find a lot of the problems trivial or easy to pick up and do with a little googling. Sites like this are usually the kind of questions you'll get asked in interviews, so if you can do them, then you're fine on that front.

u/powder-keg · 2 pointsr/ruby

I'm looking for something similar - not so much a 'learn ruby' book as a more technical 'best practices' type of book - something more in line with Effective Java or the Effective C++ series.

u/doclight · 2 pointsr/java

If static were an evil modifier, I'm pretty confident it wouldn't have been added to the language.

> no.

Static constant values allow the compiler to compute anything solely dependent on them at compile time, instead of at run time. Like say for example:

public static final double E_TOTEN = Math.pow(Math.E, 10);

> So singleton instead of static is somehow magically ok now? It's the same damn thing @
@

Would you prefer if I used the word enum?

> I have no idea what your example is demonstrating.

It wasn't an example, it was a question. Which one provides better encapsulation? A method that has access to every member variable in the class, when the necessary values are provided through public accessor methods, or a static method that uses the public accessor methods.

If you're really serious about coding in Java, I recommend you check out Josh Bloch's Effective Java.

u/SkyMarshal · 2 pointsr/learnprogramming

Do you not have the course textbook? Does it not explain well? If not, I suggest two other books instead of something online:

Program Development in Java

Effective Java, 2nd Ed

Both available for Kindle reader, so you can download and start reading immediately no matter what platform you use.

Books > blogs or reddit posts for explaining broad questions like this.

u/kanak · 2 pointsr/AskReddit

Depends on your experience. If you haven't programmed before, I think Big Java would be a good book to start with (it's the book MIT's Civil Engineering Dept uses to get them up to speed with Java). If you've programmed before, you're better off doing the official java tutorials followed by Core Java 1 and Core Java 2.

Regardless of the path you take, if you intend to do ANY kind of "serious" java programming, Effective Java is a must-read.

Finally, you'll want a good reference book. Gosling's Java Book is the definitive one, although you might prefer a book by O'Reilly.

u/fredisa4letterword · 2 pointsr/learnprogramming

First of all, singleton is not really a good pattern to use; many (including myself) consider it to be an anti-pattern because it's just a synonym for global state, which generally makes programs difficult to understand and test.

There are common patterns... the most common reference would probably be https://en.wikipedia.org/wiki/Design_Patterns .

I also really strongly recommend all Java programmers to read https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683

It's more Java specific and covers a lot of pitfalls in the Java language and libraries. It's a very interesting read that comes from a guy who designed a lot of the Java standard libraries and learned firsthand problems with the language.

u/melancholiclabs · 2 pointsr/Drugs

Read a lot of books. Everything is usually available as a pdf on the internet and the ones that aren't are $10 to rent on Amazon. Here's the ones that I've read that relate to this project.

Java

u/cjt09 · 2 pointsr/learnprogramming

> Sometimes I believe that most books are wastes of paper, because everything relating to programming can be found online.

Although this is true, the problem with online resources is that they tend to be inconsistent. They assume different competency levels, assume familiarity with different concepts, approach problems in different methods, etc. This isn't much of an issue for a veteran programmer, but I think a solid book is great for beginners. Here are two good choices.

u/KoleCasule1 · 1 pointr/csharp

Hehe, thanks for pointing out. I'll definitely read "APP&P" as it's from Uncle Bob and I see people cherishing his work.

Since I mentioned it, I assumed you are talking about Uncle Bob's book: https://www.amazon.co.uk/Principles-Patterns-Practices-Robert-Martin/dp/0131857258

Correct me if I am wrong.

u/Innovashiun · 1 pointr/learnprogramming

For what it's worth, you are up to something. The thing is, however, that in big tech companies they use "Java, C++ or other mainstream" as a placeholder. They won't shut the door in your face if you tell them you're good at C#. As an example look at John Skeet, author of C# in depth who's working at Google now.

Agile principles http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258 and working with Hadoop with .NET http://blogs.msdn.com/b/data_otaku/archive/2013/08/14/hadoop-for-net-developers.aspx but in general, someone can jump back and forth if the need rises.

You're probably looking at something like "I prefer start-ups and mid-sized companies over corporate" and not something language-specific.

u/jacobisaman · 1 pointr/ISTJ

I have been a software engineer for about a year. We use Test Driven Development where I work, and I have found that it really helps me think through the requirements and make decisions about what the software should do one step at a time. I definitely prefer this method to just "feeling it out" like some of the intuitives do.

I have also found it incredibly useful to get familiar with good programming practices and patterns and would recommend stocking up on books and maybe reading them with another person or two for discussion. Clean Code and Agile Principles, Patters, and Practices have been very useful for me. Once you start to get the general patterns down, designing something from scratch isn't such a mind explosion, because you have a general idea of how things should be designed and what "good" software looks like.

u/MadeWithPat · 1 pointr/node

Clean Code is a good one :) The book where he goes into SOLID is the Agile PPP book . I believe he refers to Clean Code as a sort of prequel to Agile PPP.

It sounds like you’re doing pretty well and on the right track. CORS is an area where I’m not especially strong, tbh. I would probably put the api on an api.example.com subdomain, but that’s sheer personal preference.

I’ve spent so much time in .NET recently, it’s nice to jump into a JS discussion. Time well spent, in my mind.

u/gibbons1980 · 1 pointr/csharp

I think learning OOP is a very good idea. There are tons of books on the subject but I would recommend these 2:

Uncle Bob's Agile Principles, Patterns, and Practices in C#

This book will teach you not only about good OOP principles (SOLID principles) but a also a lot about other programming practices such as testing and refactoring.

Sandy Metz's Practical Object-Oriented Design in Ruby: An Agile Primer

Don't worry about being a Ruby book, you should be able to understand the concepts (and learn some Ruby). Sandy ha a very good way of teaching how to think about OOP.

Hope it helps.

PS: I'm curious: what exactly did you struggle with? What made you think you should learn OOP?

u/sh0rug0ru_ · 1 pointr/java

I would suggest reading these books to get a deep understanding of OOP:

  • Agile Patterns, Princples and Practices in C#
  • Growing Object Oriented Software Guided by Tests
  • Clean Code

    Here's a chapter from the Agile PPP book, Heuristics and Coffee, which gives a great overview on how to think in OOP terms. Keep this in mind: OOP is a way of thinking as much as it is a way of programming. OOP lives in the spaces between objects, in the methods, not necessarily the objects!

    Also, note that OOP is a code organization, which really starts to make sense in larger programs. I would suggest writing some larger programs, such as a contact manager, an email client, a chat application, etc. Larger programs will give you a chance to play with technologies such as databases and client/server networking. More stuff to add to the ol' resume.
u/radiantyellow · 1 pointr/cpp_questions

I used this book, C++ without fear, when learning C++ at school

https://www.amazon.com/Without-Fear-Beginners-Guide-Makes/dp/0132673266

its a good book for learning C++, its a bit dated but its good for starters. After that you should get something better, like C++ prime as recommended by /u/EraZ3712

u/codestart · 1 pointr/learnprogramming

Is there a reason you don't want to do CS/CE? It will pay off in the long run if you get one of those degrees instead. I have written a blog post that will help you out here.

Also I am pretty sure you will be learning C/C++ in your beginning programming class. You can check out this book C++ Without Fear.
I am also creating an interactive way to learn C at CodeStart

u/KarmaAdjuster · 1 pointr/gamedev

A little more background on my path, I've been primarily a designer working professionally since 2002, but I'm finding that in order to avoid being promoted into obsolescence, learning to program seems like it would be a worthwhile endeavor.

I started out learning Python using code academy, which was pretty good for the basis, but when trying to take that knowledge and follow a tutorial I found for making a space invaders game with Python, it was still over my head. So I continued my training with the book Hello Python. I chose that book because it looked like the examples it had were the closest to being game related and still approached coding from a beginners perspective.

Midway through the book, I shifted over to C++ at the advice of another programmer colleague, and I'm working my way through the book C++ Without Fear (it looks like there's a new edition available now). I chose this book for similar reasons to the Python book. I'm not over whelmed with this book as it tends to be pretty basic in some parts and then glosses over concepts that are a bit trickier. So I've enlisted the aid of another programmer friend and have been meeting semi-regularly with him to go over the parts I struggled with in the book. He's been fantastic.

My UE4 progress has been pretty separate from my C++ training so far. I was already pretty familiar with previous versions of the unreal editor from having been responsible for maintaining the content section of UDN back in the days of UE2 and UE3, so I've just been watching the tutorial videos while I work out to learn about what's new and where to locate everything now. I really should play around with just building a few simple things with EU4. The blueprint system looks like a big improvement over kismet, which was already pretty awesome.

I hope that helps. Good luck to us both!

u/NuclearCoffee77 · 1 pointr/learnprogramming

Hi OP. I tried learning programming, but found most beginners books to be absolute shit and aimed at already proficient programmers. It's hard to find a book that targets absolute beginners. So far this is a very good book I've found:

C++ without fear.

It teaches C++ for absolute beginners. C++ is probably the most important programming language out there, though not necessarily the easiest. You can find a download link to the pdf here.

You will need to download and install visual studio of course. As for the internet connection problem.. yeah maybe you can ask for access to the internet by explaining to prison officials your intentions.

u/0x6f6f70736966617274 · 1 pointr/learnprogramming

The original edition of this book got me started in programming. I have a strong bias toward encouraging new, serious programmers to start with a natively compiled language and move from there. If you're looking for a leg up, I think this would be a great book for you to work though.

u/htglinj · 1 pointr/dotnet

Robert C. Martin, a.k.a. Uncle Bob, initially wrote a book for Java (2002) before the C# (2006) book was written. The only version he seems to maintain, or at least I can find links for on GitHub, is Java.

The book has helped me understand concepts, and most consider Uncle Bob one of the essential authors of computer programming. The C# book has code throughout, especially Section 4, but I cannot find a downloadable source. You'd have to input by hand, page-by-page if you wanted the complete system.

u/njw1108 · 1 pointr/agile

https://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445 could be a good start.

and Uncle Bob's blog has a lot of insightful thoughts as well https://blog.cleancoder.com/

u/CreeperShift · 1 pointr/learnprogramming

I recently asked my prof the same thing, and he recommended this:
https://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445

A little older but apparently still very good. Haven't gotten to it yet tho so I can't really tell you more.

u/dencan · 1 pointr/sweden

>[1] http://www.amazon.com/dp/0135974445/

Det där var ju en ganska tvivelaktig källa. Eller så missade jag en ganska stor bit av agil utveckling på högskolan.

u/rocketsocks · 1 pointr/askscience

Code every day. Work on as many little interesting projects as you can. If you don't know any languages I'd suggest starting with Python, there are a million different tutorials and resources online, so getting started shouldn't be a problem.

Add to that, read some books to learn about how software development projects work, different techniques, best practices, pitfalls, etc. Here are my recommendations on books: The Pragmatic Programmer, Refactoring, Code Complete (a bit dated, but still solid), Rapid Development (slightly mis-titled, it's a good overview of different development practices), The Architecture of Open Source Applications, and Design Patterns. Code as much as you can, be ambitious, be analytical and introspective about the problems you run into, and read and understand those books too. There's a lot more you'll need to learn to become a good developer, but what I've described will give you a very strong base to build on.

Oh, and if you don't already know discrete mathematics you'll need to pick that up. I'd recommend this book.

u/ABC_AlwaysBeCoding · 1 pointr/ProgrammerHumor

If I could make a recommendation based on time-tested experience, I'd recommend following the advice of 2 books, Refactoring: Improving The Design Of Existing Code and Growing Object-Oriented Software, Guided By Tests.

Basically, if you are committed to this codebase, you can rewrite bits and pieces of it (while covering them with tests to make sure you didn't break any functionality) and slowly migrate/transform the code to a point where it's more maintainable.

Of course, if you have a manager who you can't convince this is worth spending time on, you might point them to a resource like this about technical debt or perhaps this one to bring it down to dollars and cents (which every manager understands).

I'd also recommend reading this great piece by John Carmack (of id's DOOM fame, and now VR... He's a highly respected OO C programmer, I'm sure you've probably heard of him) about his excursion into 1 month of programming using a "functional style" (it's applicable to any language, actually, including PHP). It has great quotes like this one: "No matter what language you work in, programming in a functional style provides benefits. You should do it whenever it is convenient, and you should think hard about the decision when it isn't convenient."

I promise you that if you can follow some or all of the knowledge I've linked you to, your job will become both less frustrating and more enjoyable (down the line).

u/xnoise · 1 pointr/PHP

There are a ton of books, but i guess the main question is: what are you interested in? Concepts or examples? Because many strong conceptual books are using examples from java, c++ and other languages, very few of them use php as example. If you have the ability to comprehend other languages, then:

http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_1?ie=UTF8&qid=1322476598&sr=8-1 definetly a must read. Beware not to memorize it, it is more like a dictionary. It should be pretty easy to read, a little harder to comprehend and you need to work with the patterns presented in that book.

http://www.amazon.com/PHP-5-Objects-Patterns-Practice/dp/1590593804 - has already been mentioned, is related directly to the above mentioned one, so should be easier to grasp.

http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420/ref=sr_1_1?ie=UTF8&qid=1322476712&sr=8-1 - one of the most amazing books i have read some time ago. Needs alot of time and good prior knowledge.

http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_4?ie=UTF8&qid=1322476712&sr=8-4 - another interesting read, unfortunatelly i cannot give details because i haven't had the time to read it all.

u/boshlol · 1 pointr/django

Working Effectively with Legacy Code is an excellent book, I would also recommend Refactoring: Improving the Design of Existing Code

u/codahale · 1 pointr/programming

I think you're confusing poorly factored code with a holistic piece. You can always find a way to split up a long method into smaller, more meaningful pieces -- you may end up with more lines of code, but it's about how easily the code is understood, not the disk space it takes to store the code.

It's not a simple choice between "stuff it all in a class" and "stuff it all in a function." Refactoring has a huge list of ways of cleaning up existing code -- I'd suggest getting a copy and reading it.

u/zahlman · 1 pointr/learnpython

> Python with Github? Of course I can google plenty of guides, but the fact that I read many of them and still don't use it, shows me that I don't think the guides were good or sufficient (or I just suck at google). To me (for now) it feels like a big hassle with the commits, etc. for a very small profit (despite the sharing with other people). Is there a good and concise resource that you'd recommend?

Is it really GitHub you need help wrapping your head around, or is it git itself that causes the problem?

>101 of bad habits/beginner mistakes link/resource? I've seen plenty of links now that say "don't import *!" or similar stuff. But never a real compilation. Can also be about habits of programming or little shortcuts or tricks and tips, not only common mistakes people new to Python make. I know I'm asking for a lot but it might help and turn out to be very useful.

Well, there's the Zen of Python, which you can see for yourself at the REPL using import this. But for more concrete advice... if I found a compilation like that, I don't know that I'd trust it. A lot of these things are subjective. And anyway, if you're expecting to be able to read through something like that and magically get rid of bad habits, I can tell you it just doesn't work that way. You need to practice, and you also need to focus on the positives rather than negatives. Get used to the techniques by which code is improved. If you like physical books for this sort of thing (I don't), the best I can recommend is this one - you might be able to find online versions, but as far as legality goes, you're on your own to figure that out.

u/devnull5475 · 1 pointr/programming

This is a good read: Working Effectively with Legacy Code

Basically,

  • Get unit tests in place
  • Get instumentation in place
  • Start refactoring

    P.S. I assume you have already studied Refactoring by Martin Fowler.
u/VikingCoder · 1 pointr/gamedev

I think others have said what needed to be said, but I'll throw out one more piece of advice:

Get a teddy bear.

No, wait - hear me out!

A lot of people advocate code reviews with other developers, to keep themselves honest. When you're about done adding a feature to your project, you should review the code with another developer. After going through this a few times, many developers learn to clean their code a bit, before letting another developer see it. How you solve it, isn't how you should leave it.

Well, it turns out that this mental act of getting ready for a code review is where you get a lot of the benefit of code reviews. Meaning, for a lot of the value of code reviews, you don't even need the expense of a code review! Just the act of preparing for one, makes your code better.

So, I've heard of getting a code review teddy bear.

When you think you're about done, adding some new feature to your code, get ready to code review it with your teddy bear.

And then you have to explain all of your changes and new code to the teddy bear, aloud. Use English, and tell it what each line of code does.

And then don't add comments to explain the tricky bits! Rewrite your code so that the tricky bits are readable. And if you can't rewrite it so that it's readable, then encapsulate those tricky bits inside methods with simple names, simple parameters, and no access to global variables.

GOOD LUCK, AND KEEP TO IT! It'll make you a better software professional in your main career! Tinkering is good! Don't get frustrated!

Maybe try reading "Refactoring"

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

Just to get the mental wheels turning.

And maybe try: "Working Effectively With Legacy Code" to inspire yourself...

u/Eclipse1agg · 1 pointr/incremental_games

> future proof'd myself so I don't end up in situations where I'd have to rewrite basic stuff to get new features in later.

I recommend you Refactoring, improving the quality of existing code. It helped me to get past overengineering code and embrace working code now, even if I need to rewrite later.

u/grumbel · 1 pointr/learnprogramming

I would suggest a look at Refactoring - Improving the Design of Existing Code, using Python's unittest library and have a look at how to write Python modules. This talk about dependency injection is also worth a look.

The book won't directly teach you how to write "complex software", but it will help you understand how to untangle whatever spaghetti code you have produced so far. Furthermore using Unittests forces you to write code in such a way that it's reusable, which again forces you to think about how to un'spaghettify it.

u/ensiferous · 1 pointr/PHP

I can't exactly give a better alternative because on how you refactor code as it is highly variable. There are written multiple books about it^1 which span thousands of pages.

^1 Such as Clean Code and Refactoring

u/krues8dr · 1 pointr/webdev
u/TheCellch · 1 pointr/learnprogramming

we worked through some items from Effective Java and Clean Code but that is more of an addition and good to know. The Principles we learned were just worked into the lessons and nothing from books. Here's the list of them so you can take a look at them, Wikipedia should give you more information (I linked them for you). However it is important to not just read them and add a checkmark, some of them really change the way you programm. You can't respect all of them cause some will exlude others. And finally not all are really principles some are more of a guideline.
Start with SOLID:

  1. (SRP) single responsibility principle
  2. (OC-Principle) Open/Close Principle
  3. (LSP) Liskov substitution principle
  4. (ISP) Interface segregation principle
  5. dependency inversion principle
  6. (DRY) don't repeat yourself
  7. (CoI) Composition over inheritance
  8. Effective Java Item 17 Design and document for inheritance or else prohibit it
  9. Loose coupling
  10. Test-driven development
    no real Principles from here on:
  11. differ Information Hiding from encapsulation
  12. Use speaking names for classes, methods and attributes
  13. A lot of little units is better then one big (refering to classes)
  14. Use Interfaces to abstract and decouple

    I just checked my notes and here is what I did not mention so far:
    We of course learned the Encapsulation (public, private, protected none). We learned about Collections ((Java Collection Framework) Map, Set, List and the different implementations). Threading, concurrency, Executor, Queue and Dequeue, MVC, Event/Listener Pattern, Exceptionhandling, Comperator, Hash and Equals, Polymorphism, casting.

    Please not that we are not professionals on all this we just learned the basics more or less.

    Hope this helps
u/AllGoodMan · 1 pointr/cscareerquestions

Also This is one of the best books to get

u/DevIceMan · 1 pointr/cscareerquestions

To be honest, the vast majority of formal education classes (that I am aware of) at most CS universities are completely lacking in this area. Some of the resources available (such as that book I linked), are so much higher quality than you'll get at university, written and refined by some of the best in the field, that your best bet is probably to do a little reading. There are also good & free talks online, such as the ones by Google I/O ones.

Here are a few links I've saved on the subject of architecture and design.

u/MemoVsGodzilla · 1 pointr/learnprogramming

Well if you enjoy Josh Bloch style then go on with this , its really good and if you pay attention you can learn a bunch of stuff that work on any object oriented language.

u/yusuke_urameshii · 1 pointr/java

I can't mention much about certs, but here is a good book for when you are a little more experienced in java to use for some more advanced subjects.

Also learn the difference between the environments. Host environments are different from how java environments work as well. some examples would be java runtime vs compile time compilation, and how there are somethings that get you into trouble more so than host would, etc.

http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683

u/Loomax · 1 pointr/javahelp

There is going to be a lot of "Head First Java" recommendations and I suppose it is a decent entry if you are of a visual learning type (personally I can't get along with it).
Even tho you did say books, https://www.edx.org/ is there to learn if you want to.

My suggestion would be to start developing your own application (can be the most simple thing) and expand on it and use resources like stackoverflow and if you got a little bit of experience I really recommend reading Effective Java by Joshua Bloch.

That is (from those books I have read) the book that has gotten me the furthers in understanding what to look out for. Beside that I suggest to find some people that enjoy the same and talk about coding and share experience (this one is most likely the most important point, since you learn so much from others and them pointing out your wrong-doings).

In a list this would be:

  • Learn the basics of java (you say you got that)
  • Create your own project
  • code code code
  • talk to others about your code
  • redo (it's wrong anyway)
  • read up on how to improve on the design
  • read Effective Java
  • Keep on doing it
  • Last but really important: Keep notes of what wrong and why!
u/Deinumite · 1 pointr/java

That's probably a good starting book. Once you are more advanced, and if you want to continue learning java, I'd check out this book. It's literally the best java book ive ever read.

http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_1?s=books&ie=UTF8&qid=1319858709&sr=1-1

u/Nimelrian · 1 pointr/de_IAmA

Ich war schon immer ziemlich fit was Programmierung angeht.

Codecademy ist eigentlich immer eine gute Anlaufstelle. Falls du lieber mit Büchern lernen willst, gibt es Java von Kopf bis Fuß und nachdem du die Grundlagen drin hast Effective Java. Beide Bücher sind leider schon etwas älter und decken daher nicht die neuesten Features von Java 7/8 ab, aber die kann man sich auch mit Online-Artikeln aneignen.

u/bumhugger · 1 pointr/learnprogramming

It's perfectly fine in an isolated assignment like this, but it's also easy to start using exceptions as a part of code flow in larger software when you are writing programs for a living. And that's when bad stuff might happen, plus it is harder for your co-workers to decipher what your methods are supposed to do.

Effective Java by Joshua Bloch is probably the best book you can read if you want to improve your code. It's not that thick, and it's divided into "items" that are easily read in any order you like. For instance, there is an item about exceptions, just like your case, but probably way better explained than I did :)

Things like this might seem nitpicking, but in my opinion the easier it is to read your code, and the more robust your methods and classes are, the better. Otherwise you produce spaghetti that people have to maintain 10-15 years from now and they will curse their miserable lives every day. I've been there, it really opened my eyes :D

u/readytogetstarted · 1 pointr/suggestmeabook

i think sicp or i guess intro lin alg. One more book would be a general programming book, something like: c++ primer

I guess I'd start with c++ primer or sicp. I don't know if c++ primer is the best first programming book. To be honest I started with C for dummies. People will probably laugh at you if you tell them you learned to program from C for dummies but it worked for me.

u/xgalaxy · 1 pointr/gamedev

I feel it is my duty to point out that there are two C++ Primer books and one of them is the not so great book, and the other is very very good. The one being linked is the mediocre book.

You want this one:
http://www.amazon.com/Primer-5th-Edition-Stanley-Lippman/dp/0321714113

u/wtfisthisidontevenkn · 1 pointr/EngineeringStudents

DON'T use K&R C as another poster suggested.

  • If you're in a REAL hurry to pick things up, try this: http://www.amazon.ca/Accelerated-C-Practical-Programming-Example/dp/020170353X edit: type in and compile every example/problem in this book

  • If you have some time to spend, use this: http://www.amazon.ca/Primer-5th-Edition-Stanley-Lippman/dp/0321714113

    The main thing is to practice. At the intro level, I know there isn't a whole lot to practice with if you don't have an idea of something you'd like to implement. I do have a series of 4 homework problems for a class I TA'd a couple of semesters ago - problems were due every 2 weeks and each assignment built on the previous one in order to encourage good object-oriented behaviour. PM me if you'd like them. I will try to dig up the solutions, but not sure if I still have them.

    After that you'll need a DS&A course, but this is probably in your program anyway.
u/bhldev · 1 pointr/learnprogramming

Libgdx is the obvious choice and wraps LWJGL, Android and even iOS with RoboVM. There's many Minecraft-like games made for it like Delver.

But before you make your bed with Java you should think about C++. Most gamedev jobs will demand C++. You shouldn't limit your options this early. Instead of spending time working on a game this summer consider learning algorithms, data structures and networking along with a decent C++ book like C++ Primer. Also think about learning computer graphics. This will put you ahead of the pack.

By the way gamedev is not what you think it is. Game courses are usually 400 level classes (4th year) for a computer science degree and most who can survive a CS degree end up not entering gamedev because of the work conditions and opportunities elsewhere. And if you don't have that ability/knowledge you will be limited by the games you can make. A lot of people try to take a shortcut with a "game diploma" or other such things. Do not be seduced. Take CS and do games on your free time.

u/surpriseprofessional · 1 pointr/learnprogramming

actually, yeah maybe I do. I was referred to this. but assumed this one was a newer edition.

so is the one I just linked a good book then?

u/ApoMechanesTheos · 1 pointr/learnprogramming

For Java, I'd highly recommend Khalid Mughal's books. For instance, https://www.amazon.com/Programmers-Guide-Oracle-Certified-Associate/dp/0132930218 is for Java 8. Disclaimer: I learnt Java from his book way back in the day when Java was still in version 1.4. However, I find his style unobtrusive and pithy without being dry.

For C++, forget about Stroustrup and Meyers for some time. Stanley Lippman's book, https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113, is pretty good.

I don't know this subreddit's policies, but in case you want to try out the ebooks first, gen.lib.rus.ec is a good site to find the books.

u/ManWithABeard · 1 pointr/cpp_questions

In the sidebar there is link to a book guide. Pick a book based on your current programming language skills. From what you are writing I guess you are an absolute beginner, so I'd suggest either C++ Primer or Programming: Principles and Practice Using C++.


A general piece of advice: learning a programming language is a lot about doing. Just like with a human language, just studying without actually using it does not work. You need to practice, practice, practice.

u/TwinHits · 1 pointr/learnprogramming

C++ Primer is the only one I have experience in. If you want to learn a pointer language, I would again direct you to CS50.net.

u/kandeel4411 · 1 pointr/cpp_questions

I know how you feel, my college was practically the same. Here are some resources that helped me through:

https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb

TheCherno has a really nice C++ tutorial. Might not be the best on modern standards, but if you are looking for a place to start, this is a good one, really explains stuff nicely.

​

https://www.amazon.com/Programming-Principles-Practice-Using-2nd/dp/0321992784/ref=cm_cr_arp_d_product_sims?ie=UTF8

https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113/ref=cm_cr_arp_d_product_top?ie=UTF8

These two so far is the most recommended books I could find in this thread, Programming Principles has more nice exercises and is what I personally used, but to be honest just go with the one that clicks for you. read through the preview chapters if you could find them and choose the one you like.

​

https://codeforces.com/

https://www.hackerrank.com/dashboard

https://www.codewars.com/

I think this is what helped me the most at the start if you don't know what to do, solving problems really helps you get comfortable with the basic language syntax, programming logic and is a lot of fun.



Lastly, Google search is your best friend, seize it. Don't be afraid of making a lot of mistakes because you are going to make many AND be willing to explore! Because chances are, there is always going to be a better modern way to do something. Try to know the advantages and disadvantages(Important) of each way if you could, it all may seem so cryptic at first and confusing(it probably is) but it will all click someday.

​

Learning C++/Programming is a life-time learning, Good luck on your journey!

u/PSNB · 1 pointr/Cplusplus

You might want to check out C++ Primer

u/PageFault · 1 pointr/programminghelp

C++ Primer by by Stanley B. Lippman, Josée Lajoie and Barbara E. Moo is most likely what you are looking for.

Edit: Note that C++ Primer Plus is not the same book and is not as commonly recommended.

u/wilsonkoderhk · 1 pointr/learnprogramming

I'm currently reading C++ Primer, it's updated for the C++11 standard, it's also indepth and provides a lot of insight to the inner workings of C++. http://www.amazon.co.uk/C-Primer-Stanley-B-Lippman/dp/0321714113/

:)

u/shadolit · 1 pointr/learnprogramming

I thought the C++ Primer Plus by Prata was considered a bad book to learn from which is often mixed up with this one of a similar name (C++ Primer 5th Edition).

u/hewholaughs · 1 pointr/cpp

Awesome! This is the book right?

Doing tutorials was just the very first steps, but I'm interested in learning it in much better detail, thanks a lot!

u/Simulate_Me_Bot · 1 pointr/Python

Stanley Lippman's book, https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113, is pretty good don't know what you did there.


--------------------------------------------------


[How am I doing?] [Want a bot?] [info]

u/s3rr00 · 1 pointr/learnprogramming

I personally like Primer Plus but some people on this subreddit dont like it because it talks about C. This is the one reddit loves

u/Lethn · 1 pointr/MensRights

Can confirm as I'm currently learning C# and the Unity game engine and I'm very close to releasing my first game now. Just about all my programming has been self-taught or alternatively I've chatted with other programmers about how to put in certain game mechanics.

I highly recommend C++ Primer 5th Edition if anybody is looking to get into programming because it has a huge glossary of all programming terms among other things and you'll actually understand a conversation you're having with a programmer if you get it.

http://www.amazon.com/Primer-5th-Edition-Stanley-Lippman/dp/0321714113

u/close_my_eyes · 1 pointr/learnprogramming

The C++ Primer has a great section on templates and template specializations. I used to code in C++ and did lots of templates. I highly recommend this book if you're going to continue coding in C++.

u/fancysuit · 1 pointr/learnprogramming

Check out the FAQ. I've never read it, but they seem to suggest C++ Primer (5th Edition).

u/jh1997sa · 1 pointr/learnprogramming

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

Here's a few good books for different languages:

Learning Python - Python

Beginning Java - Java

C++ Primer - C++

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

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

btw, I'm 16 ;)

u/Admiral_deLorei · 1 pointr/wheredoibegin

This is my go-to link for any sort of C++ resources. You'll want to pay attention to the 'Beginner' section. The first book mentioned, C++ Primer is a great resource - especially since it has been updated to cover C++11, the new C++ standard. I highly recommend going through that book. You can either purchase it from the link above, or I'm sure you can find it somewhere else.

You should also know that C/C++ and C# are a little different. C/C++ languages are compiled to run natively on your computer. C#, however, is a Microsoft-developed language that compiles to something called bytecode. It's more like Java than C or C++.

u/a_redditor · 1 pointr/learnprogramming

Obligatory C++ Primer (NOT Primer Plus) plug for one which has been updated for C++11.

u/josyula · 1 pointr/learnprogramming

Its good to start with C++ it encompasses all the major programming concepts like pointers,polymorphism,inheritance,Object oriented programming. catch a good book i studied from Robert Lafore.
( http://www.amazon.com/Object-Oriented-Programming-C-4th-Edition/dp/0672323087 ) You can also try the C++ Primer ( http://rads.stackoverflow.com/amzn/click/0321714113 ) which is considered by far the best book for C++ by many programmers it delves deeply through the concepts all the best.

u/ebookit · 1 pointr/learnprogramming

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

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

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

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

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

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

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

Books to read:

C++ Primer (5th Edition)

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

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

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

Safe C++: How to avoid common mistakes

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

Sams Teach Yourself C++ in One Hour a Day

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

u/Nicholas-DM · 1 pointr/learnprogramming

https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list

For the book list.

https://rads.stackoverflow.com/amzn/click/com/0321714113

For the book. You'll want the 5th edition, as it is relatively updated.

Also pretty affordable for a textbook.

Note that Stroustrup's beginner book is also available-- however, I got it myself and I found the exercises too vague, and had to jump through a ton of hoops to even get the included code resources and programs to compile on Linux. The Primer is a little bit slower, but so far seems to be fantastic aside from a typo here and there.

u/Amorphic · 1 pointr/simpleios

I've seen the following recommended, I've not read them myself yet, so can't comment on how good they are or not:

Objective-C Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)


Programming in Objective-C (4th Edition) (Developer's Library)

u/wcbdfy · 1 pointr/learnprogramming

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

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

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

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

u/adamthats · 1 pointr/learnprogramming

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

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

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

u/mayonuki · 1 pointr/learnprogramming

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

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

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

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

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

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

Finally, use a better title when asking for help!

u/codevil · 1 pointr/iOSProgramming

The Big Nerd Ranch Guides for Objective C and iOS Programming are just about the best books for absolute beginners, I've found. I had programming experience in Java and Android apps prior to working on iOS, but read the two books anyway (online tutorials are the faster way to go) just to see if I could pick up something in-depth, and I did.

http://www.amazon.com/Objective-C-Programming-Ranch-Edition-Guides/dp/032194206X/ref=sr_sp-atf_title_1_3?ie=UTF8&qid=1408323435&sr=8-3&keywords=big+nerd+ranch+ios

http://www.amazon.com/iOS-Programming-Ranch-Edition-Guides/dp/0321942051/ref=sr_sp-atf_title_1_1?ie=UTF8&qid=1408323435&sr=8-1&keywords=big+nerd+ranch+ios

u/Zarro_Boogs · 1 pointr/learnprogramming

As the Big Nerd Ranch Objective-C Programming book so eloquently put it:
> The life of a programmer is mostly a never-ending struggle. Solving problems in an always-changing technical landscape means that programmers are always learning new things. In this case, “learning new things” is a euphemism for “battling against our own ignorance.” Even if a programmer is working with a familiar technology, sometimes the software we create is so complex that simply understanding what’s going wrong can often take an entire day.

>If you write code, you will struggle. Most professional programmers learn to struggle hour after hour, day after day, without getting (too) frustrated. This is another skill that will serve you well.

u/linkrift · 1 pointr/iOSProgramming

Can't go wrong with the Big Nerd Ranch. That'll get you going on obj-c and a simple starter app. Their iOS specific book is great if you don't mind translating some of the out of date stuff.

u/efroum · 1 pointr/IAmA

If you're just starting, I'd suggest Big Nerd Ranch's Objective-C Programming. http://www.amazon.com/gp/product/032194206X?ie=UTF8&at=&force-full-site=1&ref_=aw_bottom_links

u/kippypapa · 1 pointr/iOSProgramming

I did this back when it was only like $150
https://www.udemy.com/the-complete-ios-7-course-learn-by-building-14-apps/?dtcode=zVm6tx21l7ow

Vea Software - simple and easy projects
http://www.veasoftware.com/tutorials/

Chris Ching - great guy
http://codewithchris.com/

The Bible
http://www.amazon.com/Programming-Objective-C-Edition-Developers-Library/dp/0321967607

And, if you get stuck, come back here and ask questions or message me! It's a great skill and fun to do as well.

u/meteorfury · 1 pointr/ObjectiveC

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

u/dxmzan · 1 pointr/iOSProgramming

It gets harder and harder as time goes on because a lot of the new books, editions and tutorials are converting to Swift.

Two of my favorite books for Objective-C are Stephen Kochan's Programming in Objective-C Sixth Edition and Big Nerd Ranch's Objective-C Programming.

Unless you're a voracious learner, I probably wouldn't read through the whole book but instead just use it for reference while also continuing your training in Swift. As someone else mentioned in this thread, most of your Objective-C work will probably be bug fixes or interacting with some Objective-C frameworks like RestKit. That means you'll have a plethora of codebase to look at and learn from.

u/iiMysticKid · 1 pointr/ObjectiveC

>Stephan Cochan

Not sure if it's a bug on Amazon UK, but it allows me to see the vast majority of the book without even buying it.

https://www.amazon.co.uk/Programming-Objective-C-Developers-Library-Stephen/dp/0321967607

u/carlosypunto · 1 pointr/ciif

He modificado mi comentario anterior, ahora es mas especifico. Ese manual, al que te refieres, requiere saber C o algo, tiene lagunas.

> Although it’s preferable to have some familiarity with C or one of the C-based languages such as Java or C#, this document does include inline examples of basic C language features such as flow control statements. If you have knowledge of another higher-level programming language, such as Ruby or Python, you should be able to follow the content.

Es decir, a la hora de la verdad, necesitas conocer mucha terminología C (enum, const, typedef, etc.) para entender código (incluso de Apple), el de Swift lo cuenta todo o un 98% y evoluciona con el lenguaje.

De todas formas me refería más a las páginas web bien indexadas puedes acceder a ellas con culaquier navegador (lo malo que con conexión) y desde cualquier dispositivo. No me gusta mucho iBooks prefiero los PDFs o webs.

A mi para Objective-C me ayudo más este libro y hombre yo había programado algo antes en otros lenguajes y con C había jugueteado un poco

Espero ansioso tu opinión al respecto, ademas tu eres de los que aprendiste y te desarrollaste en Objective-C, a mi me ha pillado a medias.

u/nura2011 · 1 pointr/cscareerquestions

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

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

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

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

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

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

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

u/IronSpekkio · 1 pointr/learnprogramming

http://www.amazon.com/Ruby-Programming-Language-David-Flanagan/dp/0596516177

this book is coauthored by the Matz - the creator of Ruby. its a really top notch book.

u/lucasec · 1 pointr/gatech

I initially learned Rails back in the day through a previous edition of this book, and found it a decent introduction. If you're already fluent in web programming and backend it may be a bit simplistic for your tastes, but it's a good introduction to "the Rails way" of doing things.

If you really want a deep dive on the Ruby language itself, far beyond what you'll need to get started on Rails apps, but what every mature developer should take the time to learn, David Flanagan's The Ruby Programming Language is a must-read.

By the way: don't knock the book until you try it. I think we've all had a bad experience with crappy, overpriced college textbooks, but professional reference books are a completely different story. It'll take less time than you think to make it cover-to-cover, and the organized, thorough presentation of a decent book ensures you'll come away with a complete understanding of the language that may even impress an interviewer when you're trying to get a job.

u/mobcat40 · 1 pointr/PHP

Sure, though I've also read people in your position are better at building apps with JS if they're new to it because things like PHP are completely different in how you start growing an app (classical vs prototypal inheritance) not to mention that if you also do PHP instead of just straight JS you're getting used to and learning 2 languages that are completely different in how you code. In either case you're right you have to learn JS anyway, here are the best resources after codeacademy basics stuff:

JavaScript: The Definitive Guide: Activate Your Web Pages (Definitive Guides):

http://www.amazon.com/JavaScript-Definitive-Guide-Activate-Guides/dp/0596805527/

JavaScript: The Good Parts:

http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/

Programming JavaScript Applications: Robust Web Architecture with Node, HTML5, and Modern JS Libraries:

http://www.amazon.com/Programming-JavaScript-Applications-Architecture-Libraries/dp/1491950293/

A cool talk from last year of the Fluent conference (and the author of that last book) explaining how different something like PHP and JavaScript are and why JS doesn't deserve the bad rap it used to get (He's a pretty cool guy from Adobe and I got to talk to him last week about all of these things we're talking about right now and where web development is heading, and why JS as a single language for the web can work even better):

http://www.youtube.com/watch?v=lKCCZTUx0sI

This was a really cool overview on JS today, and you get to see Unreal Tournament and the Unreal 4 engine run in a web browser:

http://www.youtube.com/watch?v=aZqhRICne_M

u/aboothe726 · 1 pointr/programming

i agree. books and tinkering are the very best way to get introduced to programming.

i read my first programming book the summer between my sophomore and junior years in high school. (i don't recall how old that made me at the time. 16? bah, i'm getting old.) anyway, that book was Herbert Schildt's The Complete Reference: C++. i found it really interesting, but knowing what i know now Python (The Quick Python Book and Learning Python are good) or Java (I learned on Thinking in Java, but Effective Java is supposed to be good, too) are probably better places to start.

hopefully your parents support your desire to learn programming. $30-$50 for a programming book and access to a computer are a small price to pay for starting a child on a hobby that could turn into a good career!

good luck, and keep us posted! :)

u/Vesp_r · 1 pointr/learnprogramming

I haven't read Head First Java, but I see it recommended often.

I personally learned from reading
The Java™ Tutorials
and Effective Java.

u/CydeWeys · 1 pointr/compsci
u/Glangho · 1 pointr/learnprogramming
u/bullcitydev · 1 pointr/learnprogramming

I would recommend picking up Effective Java and following along with the code examples. It's a great book that will help you when writing more 'advanced' Java programs.

Also if you are planning on making a career out being a Java engineer, I am currently in the process of writing a book that will hopefully be able to teach you many of the skills that you will need in the professional world. If you would like to know more you can sign up at www.javabeyond.com.

u/UberBeaver · 1 pointr/cscareerquestions

I would mainly recommend that you read Effective Java. It contains a number of tips and best practices for writing good Java code. Read it through, and when you get a Java job, be sure to incorporate the practices from the book in your coding.

u/smesc · 1 pointr/androiddev

Programming concepts and fundamentals don't change much. Also read effective java for style/design patterns/anti-patterns etc. http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683

u/radekhecl · 1 pointr/java

First make sure you know well plain java. Do some sipmle programs, read web tutorials or beginners book. After that, read Effective Java from Joshua Bloch.
https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683
You don't need to read every line of this book, but at least you should know roughly what is going on there.

Regarding the framewors. There are zillions of them so you have to be selective. It really depends on what you want to do.
Spring + sql is good for web applications. These are for example used as a administrative portals. It's kind of job safety since there are many of them and won't disappear soon. Go for that.

Now just a little advice for the job. The salary of the programmers goes down since it's becoming still easier to create generic things. To me it turned out to be really good deal to combine it with mathematics. Don't look to yourself only as a programmer, bring something more to the table.

Let me know if you need any help.

P.S.
I am thinking about flushing out some posts and examples related to computer vision in the next couple of months. Is this something you would be interested in to see?


u/sonay · 1 pointr/linux

If you want to program in Java, I would also suggest IntelliJ Idea. Community edition^[1] is free. Oracle docs are fine^[2], javadocs^[3] are great and the source is free for OpenJDK and if you want to go pro I highly recommend Effective Java^[4] by Joshua Bloch. There is also Findbugs^[5] which is cool for static analysis and most of the popular IDEs have plugins for it. You should also check Concurrency In Practice^[6] for multithreaded programming. If you are into web programming, I highly suggest Head First Servlets and JSP^[7]. There are also very good libraries such as Google Guava, Apache Commons etc.

  1. http://www.jetbrains.com/idea/features/editions_comparison_matrix.html
  2. http://docs.oracle.com/javase/tutorial/
  3. http://docs.oracle.com/javase/7/docs/api/
  4. http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
  5. http://findbugs.sourceforge.net/
  6. http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
  7. http://www.amazon.com/Head-First-Servlets-JSP-Certified/dp/0596516681

u/IJP · 1 pointr/learnprogramming

Have a look at the book Effective Java. Maybe not exactly what you are looking for, but I think you would find it very useful.

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/comp_freak · 1 pointr/cscareerquestions

I would say 1st get basic understanding about unit testing The art of unit testing book is good resources. This is a good start as Roy Osherove start from basic testing and explain why a unit test need to fast and must use test framework like (xUnit or nUnit). The idea is to create seams and use dependency.

There was a course on Microsoft Virtual Academy (mva) on TDD by Sachi Williamson and one her colleague but it's no longer available where I learn some basics idea of TDD.

I also read another book Growing Object Oriented Guided by Test
This book made me realize how unit / testing and TDD is a tool but we need to get walking skeleton 1st. I did one component using TDD and it was very nice (once you go TDD route you will find your self creating many small classes) but it was pain in neck to integrate with another module. That's where the walking skeleton comes in the mind.

I would say check out Pluralsight TDD/Unit Test courses to get started.
Also, my idea has been learn some apply some. That way you don't get bored. It's going to be hard in the beginning but it gets started.

I would also suggest you to check out Working With Legacy Code & Refactoring by Sandro Mancuso https://www.youtube.com/watch?v=_NnElPO5BU0. It's a about and hour video but I learn from this video how to use TDD with existing legacy code.

For CD/CI, I am trying to learn Team Foundation Server (TFS) and learn it. So I can make commit and TFS can take care of building and releasing of the software.

But at the same time I want to switch so spending time doing LeetCode style problems.

u/JochenKlump · 1 pointr/PHP

Growing Object-Oriented Software, Guided by Tests - very practical description with a lot of code examples on how to implement tdd

u/tabularassa · 1 pointr/vzla

Bien. le voy a echar ojo.

Yo ahorita estaba estudiando lo mismo pero leyendo Growing Object-Oriented Software, Guided by Tests. Esta bien bueno tambien ese libro. Lo vi recomendado por el tipo que creó Angular.js en este GoogleTechTalk: How to Write Clean, Testable Code. Tambien recomiendo ese talk

u/balefrost · 1 pointr/AskProgramming

> How the heck am I supposed to learn STL, when and how to use it?

Books are good! They can cover the material more efficiently than video can, and it's easy to adapt if the material is being covered too quickly or too slowly. I don't have a personal recommendation, but a quick Amazon search came up with The C++ Standard Library: A Tutorial and Reference (2nd Edition) which seems to be well-regarded. Too expensive? A used copy of the 1st edition is only a few bucks.

u/septemfoliate · 1 pointr/cpp_questions

Consider Josuttis' book for coverage of the Standard Library. I was pleased with the first edition, and I would think that the second edition is just as good.

u/aaronclong · 1 pointr/cpp

I am a little offended by your comment. It is very elitist and an attitude that is contributing to the slow and painful death of this language.

>If your into templates , and you can't find anything challenging, its time to start saving up those pennies and buy The C++ Standard Library , else your going to learn crap. Most folks buy it as a reference. I don't get contracts and you won't catch me without it. No money , no honey - and no jobs

u/ruskeeblue · 1 pointr/cpp

If your into templates , and you can't find anything challenging, its time to start saving up those pennies and buy The C++ Standard Library , else your going to learn crap. Most folks buy it as a reference. I don't get contracts and you won't catch me without it. No money , no honey - and no jobs

u/this_is_a_reference · 1 pointr/cscareerquestions
u/AlphaDonkey1 · 1 pointr/iOSProgramming

Use these ebooks. They're brilliant:

First: Learn some Objective-C
Second: Start with iOS

It's very important that you don't give up when learning to write software. Keep chiseling at it and you will be able to create amazing apps.

u/boom_shaka_lakaa · 1 pointr/AskReddit

I really wish I had started programming earlier. It's something that you easily have the capacity to learn at the age of 15 and you can teach yourself outside of school. I'd recommend getting some books from amazon. If you have a mac, learning iOS app development can be an awesome way to get started. You could get these 2 books (this and this) and be well on your way to developing iphone and ipad apps by the end of this school year.

u/rby90 · 1 pointr/learnprogramming

There's is no 6th edition of C++ Primer, only a 5th. I think you might be mixing up with C++ Primer Plus, which I don't think is recommended.

Edit: The review I linked for C++ Primer Plus was for 4th edition not 6th.

u/dd_microbaum · 1 pointr/ProgrammerHumor

You should have a look at the following book:

https://www.amazon.de/C-Primer-Stanley-B-Lippman/dp/0321714113/ref=sr_1_1?ie=UTF8&qid=1467206437&sr=8-1&keywords=c%2B%2B+primer

From what I've heard it seems to be the book for C++ beginners.

u/DrunkWhenSober · 1 pointr/learnprogramming

Believe it or not, reading textbooks is quite helpful. I purchased [Primer's C++ 11] (https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113). I didn't do all of the practice problems (that would take me forever), but I picked up a lot of really helpful syntax for writing cleaner and more efficient code. They also go over C++'s basic components. Some of it might be a refresher for you, but Primer has a lot of insight into the language.

u/dipanzan · 1 pointr/learngamedev

Check this link, I had it saved: https://old.reddit.com/r/gamedev/comments/6pakgb/c_game_development_books/

If you wanted to learn about C++, this book is often recommended: https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113

u/grout_nasa · 1 pointr/cpp

C++ Primer 5th edition is C++11, and uses it idiomatically throughout. Recommended. http://www.amazon.com/Primer-5th-Edition-Stanley-Lippman/dp/0321714113

u/sotopheavy · 1 pointr/webdev

I have the first of these and plan to get the second two soon as they have come highly recommended by /r/programming at one time or another.

u/N8Programs · 1 pointr/learnjavascript

Things have changed a lot! A good summary would be:

Front-End Frameworks: Robust libraries that make developing good-looking UIs easier and make your code more scalable. (ex: Vue, React)

No More Frames: Only the <iframe> tag remains. The use of frames is discouraged, and CSS flexbox (a responsive style that makes your site work for desktop and mobile if used correctly) is used.

Fancy New Paradigms: It is no longer encouraged to program javascript in traditional OOP styles with classes + inheritance. Instead, a paradigm called Functional Programming is encouraged. Functional Programming drifts away from classes and inheritance, and towards functions, and specifically, higher order functions. In addition, creating mutable variables in excess has fallen out of favor.

So, while a lot has changed, if you know Java 8, are familiar with Lambda Expressions + Closure, and ready to devote some time to JavaScript and the frontend, you'll be making near-professional to professional looking websites in around 6 months (at least, that is my experience). And even if you aren't, JavaScript isn't hard to learn. I would recommend the following books + websites:

MDN - Good JavaScript Resource + Tons of documentation. https://developer.mozilla.org/en-US/

Javascript: The Good Parts - https://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742 (Bit outdated)

How Javascript Works - https://howjavascriptworks.com/ (Recent)

Javascript: The Definitive Guide - https://www.amazon.com/JavaScript-Definitive-Guide-Activate-Guides/dp/0596805527 (Bit outdated)

u/Neres28 · 1 pointr/Codecademy

They are essentially identical.

function functName(...)

is referred to as a function statement whereas

var varName = function(...)

is called a function literal. You can also name the function in a function literal:

var varName = function functName(...) // useful for recursive functions.

Function literals are used (for example) when passing a function to another function.

Functions are covered in length in Chapter 8 of this book; my recommended resource for anyone serious about learning JavaScript.

u/pierotofy · 1 pointr/gis

To start, this line:

if radioanswer == qanswer{

Is not valid JS. You need to put parenthesis:

if (radioanswer == qanswer){

Then radioanswer should be assigned within the function block, not outside of it. Otherwise it will always have the same value.

Please, please do not try to improvise Javascript (even if you are not a developer by profession). You will fall into the many confusing pitfalls of the language. Find some time to read (at a minimum) https://www.amazon.com/JavaScript-Definitive-Guide-Activate-Guides/dp/0596805527/ref=pd_bxgy_14_img_2?_encoding=UTF8&pd_rd_i=0596805527&pd_rd_r=5DC6HMEAZ6MCTJY2YYQQ&pd_rd_w=JasEw&pd_rd_wg=wBgln&psc=1&refRID=5DC6HMEAZ6MCTJY2YYQQ and https://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1?ie=UTF8&qid=1525662051&sr=8-1&keywords=javascript+the+good+parts

It will save you countless hours of troubleshooting.

u/Narvikz · 1 pointr/portugal

O C Primer Plus é um bom livro. Pega no Jetbrains CLion através do Student Pack deles e num compilador genérico tipo gcc (não precisas de mais para aprender) e diverte-te.

Mais tarde podes pegar em C++ e começar a usar Visual Studio e MSVC.

u/Bubbleeh · 1 pointr/learnprogramming

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

u/nna12 · 1 pointr/learnprogramming

As /u/mr_stark said you have the interest and love for it which is a big plus. Don't get discouraged, programming is not just about the language or the language. It is about problem solving, collaboration and design.

I always recommend stepping back from the code when you first approach a problem. How would you solve the problem if someone asked you to do it using regular English sentences.

For example "tell me the length of a string"
*Go through each character and add 1 while I have not reached the end

  • return the end result

    Learn your data structures. Arrays,Lists, Hash Tables, Dictionaries they all typed of problems they are good for and types of problem they are horrible for. Learn the difference, and when to use which.

    Once you have these two down, you are now ready for the different algorithms. This is where the design comes in. This book is very good at helping with this. It's old but a very good book.

    Note that as you are learning this you should choose a language and code up the different data structures and do small programs to learn the ideas. This will also teach you the language as you go along. www.coursera.com is great for free courses and resources.

    Once you have the basic ideas you can start getting more in depth courses for the languages you want to learn. For C# I recommend CLR via C# for example for C#.

    Lastly as with most things the only way you will get better is practice practice practice. Start creating apps to help yourself out and automate daily things you do. Start exploring and creating different applications.

    Hope this helps!
    Good luck!
u/fokov · 1 pointr/dotnet

If you are interested, CLR via C# will provide one with a metric fuck-ton of trivia on how it really works. I read the 2nd edition about 7+ years ago, but most of the really trivial stuff fell out of my head. However, a lot of that knowledge isn't needed to actually build a working product.

One reason I like out params is the patterns similiar to bool TryParse(string text, out T value). This way a single if statement can shorten code up considerably if I need to write other conditions limiting the value to perform default or special case logic. The more I can reduce boilerplate/noisy code the better IMO.

u/pngs · 1 pointr/csharp
u/Mr_Ected · 1 pointr/learnprogramming

If you really want to dig into the trenches and learn the ins and outs of C# from a more bottom-up approach, then I can't think of a better book to use than CLR via C# (Richter).

Don't let the table of contents fool you, this is definitely a more advanced text.

If you can work through the whole book and understand it, as well as C# In Depth, then you will definitely have an advanced knowledge of the language.

u/programmingwithwill · 1 pointr/csharp

I will agree that it isn't cheap but if you're serious about your professional development, it is well worth it. If you want to just try it out, they have a 10 day free trial.

To be honest, though, I'm not sure what you mean by "advanced topics and concepts." There are plenty of courses on PluralSight that I would consider advanced but it sounds like there is only one on there that interests you.

Regardless, if you are looking for something more intermediate, PluralSight has you covered. If you're looking for something more advanced than PluralSight can offer, maybe you should look into https://www.amazon.com/CLR-via-4th-Developer-Reference/dp/0735667454

Edit: I'd like to add that http://bafflednerd.com/learn-csharp-online/ was on this subreddit the other day and seems like a pretty thorough list. Free courses and never as good as paid ones, though (in my experience).

u/volandkit · 1 pointr/cscareerquestions

Read some easy beginner's book like Head First C# to get initial grasp of a language and after you finished with it read C# in Depth. If you really want to understand what is happening pick up CLR via C#.
Also always follow Code complete religiously and you will be better than most.

u/kasano · 1 pointr/funny

CLR via C# by Jeffrey Richter, my favorite C# book.

u/kidmenot · 1 pointr/learnprogramming

> I just think that it would be good to know the language better in case I get a job were I need to make desktop apps.

Then I will go with the obvious and suggest Jon Skeet's C# in Depth, I really like the way he explains things. But it's so well-known that odds are very good you will already have checked it out.

Jeffrey Richter's CLR via C# is also a very good resource if you are into lower-level CLR details, which is always good stuff to know.

u/JunoJunoJunoJuno · 1 pointr/learnprogramming

If you have some experience with other languages already, especially if it's C++ or Java, then I'd recommend the "C# in a Nutshell" books. The first couple of chapters will cover most of the content of the language. http://www.amazon.com/C-5-0-Nutshell-Definitive-Reference/dp/1449320104

u/Xavierxf · 1 pointr/learnprogramming

/r/csharp recommends C# in a Nutshell.

Another vote for the Yellow Book because it's a great introduction to programming in general, along with C#.

u/JacksUnkemptColon · 1 pointr/dotnet

Perhaps not what you're looking for as this isn't an internet source, but I found the sections in C# 5.0 in a Nutshell on concurrent programming were especially good at explaining this stuff to a non-genius like myself.

u/pauloortins · 1 pointr/csharp

There are several books, blogs and videos that you can use.

These books are good choices:

C# 5.0 in a Nutshell and
Pro C# 5.0 and the .NET 4.5 Framework

I also wrote a blog post about it.

Resources to become a Ninja: C#

u/delirial · 1 pointr/learnprogramming

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

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

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

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

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

u/daegontaven · 1 pointr/Python

Head First Python
Personally I found this book very easy. It has pictures and Stuff and does not make things boring like the other books. It helps non-programmers ease into programming. I should because i started from this when i was 17 :)

u/GreyHatSalafi · 1 pointr/learnpython

Seems like the Head First Python book is designed for you. I've been reading it and I could see how it would benefit you. Check it out!

http://www.amazon.com/Head-First-Python-Paul-Barry/dp/1449382673/ref=sr_1_1?ie=UTF8&qid=1303646786&sr=8-1

u/sandrine999 · 1 pointr/learnprogramming

For python, I used Head First Python:
http://www.amazon.com/Head-First-Python-Paul-Barry/dp/1449382673

and I also did a lot of lessons on Code Academy:
http://www.codecademy.com/tracks/python

u/Treesawyer5 · 1 pointr/learnpython

The Head First series is amazing! The books use pictures, jokes, and short snippets of code to deep important concepts. Great read.

https://www.amazon.com/Head-First-Python-Brain-Friendly-Guide/dp/1449382673

u/TheMadFratter · 1 pointr/AskReddit

I had to learn for a class not but 4 months ago. Here are a few resources that helped me along the way.


Dive into Python is a free book, available in HTML and pdf formats. It can be found here: http://diveintopython.org/

If you don't mind spending some money, Head First Python is a new book in the Head First line, one of my personal favorites for learning a new language. Since it's new, I haven't been able to look at this one in particular, but if it's like their old stuff, it should be great: http://www.amazon.com/Head-First-Python-Paul-Barry/dp/1449382673/ref=sr_1_1?ie=UTF8&qid=1293597744&sr=8-1


For everything else, google is your friend.

u/mr_pleco · 1 pointr/learnprogramming

I started at 23, and I can tell you that people who start out younger are usually considerably sloppier and much more clueless about what their code is doing than people who start older.

This started me:

http://www.amazon.com/Head-First-C-Andrew-Stellman/dp/0596514824

http://www.amazon.com/Head-First-Python-Paul-Barry/dp/1449382673

u/InkyPinkie · 1 pointr/learnpython

If you don't mind answering, can you tell me whether this book is a good way to learn OOP in Python? Or is a whole book dedicating to OOP an overkill?

u/uncoil · 1 pointr/learnprogramming

Check out this book, I think it's a good "next step" kind of book now that you know some Python, and it has a lot of good example code imo.

u/jpmmcb · 1 pointr/FreeCodeCamp

For one of my projects, I decided to just use vanilla JavaScript AJAX and for the rest, I ended up using jQuery. I felt this gave me a better handle of what was going on behind the scenes.

For vanilla JavaScript resources, the MDN documentation was helpful to get going. Using vanilla JavaScript was hard and it isn't super intuitive. This is why I think most people just end up using a library to call out to APIs. There's also a good Lynda course that's called "AJAX and JavaScript." It's pretty fast paced, and the course assumes you already know basic JavaScript, but I found it helpful with learning vanilla js ajax.

As far as jQuery goes, this video was also really helpful. Again, fairly fast pace but overall, good info. Once again, using the jQuery documentation is ESSENTIAL. I've found that in general, if I am stuck, asking myself the right questions, going to the documentation, and finding the answers is usually best.

I also read through the book Secerts of the JavaScript Ninja which had a few things to say about asynchronous code. Hope this helps!

u/whoisjuan · 1 pointr/dailyprogrammer

I would add Secrets of a JavaScript Ninja, written by John Resig (the creator of jQuery). An amazing resource with a nice philosophical approach about JS.

u/MaybiusStrip · 1 pointr/web_design

HTML and CSS are easy enough to pick up from tutorials and on an "as you go" basis.

Javascript is a difficult and intricate language. If you don't have a programming background, it is not a great one to start with. You will more or less be doomed to be mediocre at it (which might be fine for adding minor interactions, importing plugins, etc...). Functions as first class objects, closures, prototypal inheritance, and other concepts that are used frequently in Javascript can be tricky to grok.

I highly recommend Secrets of the Javascript Ninja. Javascript: The Good Parts is a great resource too but it goes over things to quickly for them to really stick and requires a couple readings.

u/eddyvanhelgen · 1 pointr/javascript

Books that helped me to get the hang of JS

John Resig's Secrets of the JavaScript Ninja and Douglas Crockford's JavaScript: The Good Parts are pretty much the only ones worth reading in my opinion.

Projects

The best thing would be to build something you want to use yourself. Maybe you try cordova and build a small app with the browser platform so that you can create a simple App that you can bring to your Smartphone.

More advise

Read a lot of code: TODO MVC is a good place to start, people try to write good code for this one because they want you to use their framework :-). The problem with the source code of many projects is that the JS ecosystem is in a constant flux and ES6 modules are skyrocketing right now. You may want to check out the jQuery source code - you can pretty much watch the evolution by looking at older versions of the source code and how it evolved.

If you feel really adventurous the NodeJS source code is a fun read - although it's a very big project that also got some C/C++ code sprinkled in - but that shouldn't be a problem for you :-).

I would advise you not to bother reading the Angular1 code for the time being, Angular2 maybe interesting but its written in Microsoft's TypeScript - which is a nice language on top of JS that is worth learning about.

u/sharkmandan · 1 pointr/javascript

For more advanced topics, "Secrets of the JavaScript Ninja" covers many of the advanced techniques popular libraries use (including prototype and jQuery), written by the jQuery creator.

It assumes you have an understanding of the fundamentals so it gets into the advanced topics pretty quickly.

http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X

u/alexlafroscia · 1 pointr/javascript

I really enjoyed Secrets of a JavaScript Ninja by John Resig, the main person by jQuery. I found it to be really helpful as someone that was comfortable with JS and wanted to know more, but if I remember right the beginning of the book went over some more of the fundamentals.

u/serentilla · 0 pointsr/nottheonion

This is why in bookshops you see The Bible, The Definitive Guide and The Bible, the good parts

u/rogue780 · 0 pointsr/learnprogramming

C primer plus

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

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

u/Xen0m0rph · 0 pointsr/Romania

.NET, cool.

Nu subestima niciodata importanta dezvoltarii cunostintelor tehnice. Sunt considerabil mai importante decat acele "soft/social skills" in domeniul asta, mai ales daca vrei sa ajungi departe in directia asta (senior dev, arhitect, CTO etc.). Cu astea incepi intai - daca vrei sa treci spre management in schimb (care deviaza deja de la software design & development cu mult, e practic alta meserie si s-ar putea sa nu-ti placa) atunci poti lucra puternic si la social skills.

Gandeste-te in urmatoarele 6-12 luni cam pe ce ti-ar placea cel mai mult sa te axezi: front-end, back-end, mobile, devops... In functie de alegerea asta stabileste-ti un subset de framework-uri (EF, Web API, MVC, etc.) pe care sa devii foarte versat, sa fii pe ele in cei top 25% (sau chiar 5%!) din compania ta, asa cum zici ca erai si in facultate. O sa dureze, dar merita efortul. Si nu-i lasa pe altii sa aleaga pentru tine pe cat posibil.

Si neaparat, citeste constant carti in domeniu. Nu te limita doar la blog-uri si articole pe net, alea nu mi se par ca sedimenteaza cunostintele asa cum o fac cartile. Citeste cat de des poti carti de inginerie software in general si .NET in particular. Cateva recomandari:

Pro C# 2010 and the .NET 4 Platform

CLR via C#

C# in Depth

Dependency Injection in .NET

Clean Code: A Handbook of Agile Software Craftsmanship

Astea sunt doar cateva, n-are rost sa mai extind lista, sigur vei gasi trimiteri catre alte carti de referinta citindu-le pe cele enumerate mai sus sau din discutii cu colegii.

u/alexako · 0 pointsr/learnprogramming

Completely agree. I'm currently trying to get through C++ Primer myself. I tried to find a "Learn C++ the Hard Way" tutorial, but turns out, that's the only way.

EDIT: Woops, you guys are right. Link fixed.

u/cybereality · 0 pointsr/compsci

I found the books C++ Primer ( https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113/ ) and C++ Primer Plus ( https://www.amazon.com/Primer-Plus-6th-Developers-Library/dp/0321776402/ ), no relation, to be great resources for learning C++. They are a little older now, so covering C++11, but if you are just starting out that is fine, since most of the core concepts have not changed in the last few years (and most of the new features are more advanced anyway).

u/RollingGoron · 0 pointsr/learnprogramming

A couple of questions:

  1. What Phone do you use?
  2. What computer OS do you use?


    If you have a PC, you can only develop for Android.
    If you have a Mac, you can developer for iOS or Android.

    I highly recommend a book over a website. They are much more comprehensive and go into greater detail.

    Mac/iOS uses Objective-C.
    http://www.amazon.com/Objective-C-Programming-Ranch-Guide-Guides/dp/032194206X/ref=sr_1_1?ie=UTF8&qid=1419300572&sr=8-1&keywords=big+nerd+ranch+objective+c

    http://www.amazon.com/iOS-Programming-Ranch-Guide-Guides/dp/0321942051/ref=sr_1_1?ie=UTF8&qid=1419300564&sr=8-1&keywords=Big+Nerd+ranch+ios

    Android

    http://www.amazon.com/Android-Programming-Ranch-Guide-Guides/dp/0321804333/ref=sr_1_1?ie=UTF8&qid=1419300685&sr=8-1&keywords=Big+Nerd+ranch+android

    Big Nerd Ranch books are awesome.
u/blazingrooster · 0 pointsr/learnprogramming

Not really a tutorial, but I found The Ruby Programming Language by Flanagan and Matz to be a really fantastic introduction to Ruby for experienced programmers.

u/daminshi · 0 pointsr/learnprogramming

C++ Without Fear: A Beginner's Guide That Makes You Feel Smart (2nd Edition)

http://www.amazon.com/Without-Fear-Beginners-Guide-Makes/dp/0132673266/ref=sr_1_1?s=books&ie=UTF8&qid=1395309620&sr=1-1

Been using this one for a while and it's pretty good. It goes over all the concepts and many parts of the language without getting insanely technical out of the gate.

u/mariox19 · 0 pointsr/programming

Minus 6?! I'll write the author.

u/Mathestuss · 0 pointsr/csharp

I think the two best things any developer can learn are:

  1. the SOLID principles described in Robert C. Martins books "Agile Software Development"/"Clean code"
  2. the Gang of Four Design Patterns

    These principles can be applied to any object oriented language. Learn them well enough that you can explain to someone else what they are and when to apply them.

    ​

    Other areas of knowledge that can be applied broadly are

  3. Source Control
  4. Dependency Injection
  5. TDD
  6. Code smells (There is an expanded list in Marin Fowler's Refactoring book)
  7. Algorithmic Complexity


    After these things you are probably going to need an area of focus to drill down on.


    Also, if you can't already, learn to touch type. I always wish I could type faster.
u/div · 0 pointsr/programming

If this reminds anyone else of the very first example in this book , then the previous blog entry might shed some light:

> A few of my colleagues and I have decided to write, with Martin's permission, a Ruby version of Refactoring. To begin with this will be a port of the existing Refactoring text. After we finish the port, we are going to look at Ruby specific refactorings. As I go through porting the text I'm going to post what I work on to my blog.

edit: I'll probably read other people's comments before posting next time ;p

u/TyphonRT · 0 pointsr/java

You can't go wrong with these two books:
http://www.amazon.com/Java-Puzzlers-Traps-Pitfalls-Corner/dp/032133678X/

http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683

Joshua Bloch is a good author and was involved in implementing the Java API (collections API, etc.) early on...

You can also find several talks he's done online for Java puzzlers.

Some good presentations online (including some puzzler ones):
https://www.youtube.com/results?search_query=joshua+bloch

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/nat_pryce · 0 pointsr/programming

I haven't seen this suggested, but it is a good book on exactly that topic.

Clean Code by Robert Martin.

and I have to mention...

Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Yours Truly, which frequently touches on that topic

u/letslearnmath · -1 pointsr/learnprogramming

For a book I suggest C Primer Plus, definitely avoid the for dummies series. Also if you are new to programming I would suggest starting with python as zabzonk suggested. It is a very fun language and you can quickly start making neat things while learning basic programming concepts that will carry over to other languages. Once you have some experience with logic/program structure/problem solving you can move on to C. Starting off with C is an easy way to make yourself hate programming.

u/lemma_pumper · -1 pointsr/C_Programming

I'd recommend C Primer Plus, though to be honest it would be a much better investment to study C++ with C++ Primer Plus from the same author.

Do you have to go with C? C++ is better for beginners while still maintaining all the C things. If you absolutely have to go with C (which I'm assuming you are studying for coding systems - most likely embedded, or to maintain legacy code), the book I pointed out should start you out nicely.

If it is programming you want to learn, I'd recommend trying your hands at Java or Python or any interpreted OOP-focused language first. Java has very nice IDEs (Eclipse, NetBeans, etc.); it has its roots in C/C++ so it should help making the transition back and forth. C/C++ can be a mess to get the build environment set up correctly if you are not using an IDE like Visual Studio.

If you are in college, a lot of these technical books are free through your online library.

u/Bretonator · -2 pointsr/gamedev

I'm getting a lot of mileage out of C++ Primer Plus for re-learning C++ coding.
Math and Coding for Game Designers are two series of youtube videos. They have a ton of applications of the basic principles: https://www.youtube.com/user/BSVino

u/StoneCypher · -2 pointsr/javascript

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

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

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

The standard:

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

Good reference on browser differences:

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

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

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

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

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

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

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

I'd throw in a rickroll if I could.

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

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

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

Happy hunting.

u/rodion_89 · -5 pointsr/javascript

Don't listen to jakelear, w3schools is an excellent resource for beginners.

That said, once you are on your feet and getting deeper into JavaScript check out these books. They are wonderfully useful and informative.

http://www.amazon.com/gp/product/0596517742
http://www.amazon.com/gp/product/0596805527
http://www.amazon.com/gp/product/193398869X

u/pacman1176 · -15 pointsr/compsci

I have found that once you get into the workforce, the need for writing the most efficient algorithms and the overall value that I have gotten from such courses rarely comes up in every day application development. What they really should be teaching you are best practices and programming patterns. Here's a great book on that. It's titled Java, but much carries over to other languages as general practice.

http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683