(Part 2) Reddit mentions: The best software design & engeneering books

We found 4,058 Reddit comments discussing the best software design & engeneering books. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 766 products and ranked them based on the amount of positive reactions they received. Here are the products ranked 21-40. You can also go back to the previous section.

21. C# 5.0 in a Nutshell: The Definitive Reference

Used Book in Good Condition
C# 5.0 in a Nutshell: The Definitive Reference
Specs:
Height9 Inches
Length6 Inches
Number of items1
Weight2.9 pounds
Width2.4 Inches
▼ Read Reddit mentions

22. Agile Software Development, Principles, Patterns, and Practices

Agile Software Development, Principles, Patterns, and Practices
Specs:
Height10.1 Inches
Length7.9 Inches
Number of items1
Weight2.5573622392 Pounds
Width1 Inches
▼ Read Reddit mentions

23. Discovering Statistics Using R

    Features:
  • Sage Publications (CA)
Discovering Statistics Using R
Specs:
Height10 Inches
Length7.5 Inches
Number of items1
Weight5.2 Pounds
Width1.5 Inches
▼ Read Reddit mentions

25. Objective-C Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)

    Features:
  • Princeton University Press
Objective-C Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)
Specs:
Height10 Inches
Length6 Inches
Number of items1
Weight1.33600130772 Pounds
Width0.75 Inches
▼ Read Reddit mentions

27. Python Cookbook, Third Edition

O Reilly Media
Python Cookbook, Third Edition
Specs:
Height9.19 Inches
Length7 Inches
Number of items1
Weight2.50004205108 Pounds
Width1.41 Inches
▼ Read Reddit mentions

28. Pro ASP.NET MVC 5 (Expert's Voice in ASP.Net)

    Features:
  • Apress
Pro ASP.NET MVC 5 (Expert's Voice in ASP.Net)
Specs:
Height9.25 Inches
Length7.5 Inches
Number of items1
Weight33.50144533352 Pounds
Width1.65 Inches
▼ Read Reddit mentions

30. C Interfaces and Implementations: Techniques for Creating Reusable Software

C Interfaces and Implementations: Techniques for Creating Reusable Software
Specs:
Height1.11 Inches
Length9.26 Inches
Number of items1
Weight2.0282528104 Pounds
Width7.41 Inches
▼ Read Reddit mentions

31. Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) (Big Nerd Ranch Guides)

Used Book in Good Condition
Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) (Big Nerd Ranch Guides)
Specs:
Height9.9 Inches
Length6.9 Inches
Number of items1
Weight1.70417328526 Pounds
Width0.9 Inches
▼ Read Reddit mentions

32. Programming in Scala: A Comprehensive Step-by-Step Guide, 2nd Edition

Used Book in Good Condition
Programming in Scala: A Comprehensive Step-by-Step Guide, 2nd Edition
Specs:
Height9.25 Inches
Length7.25 Inches
Number of items1
Weight2.6 Pounds
Width1.25 Inches
▼ Read Reddit mentions

33. Programming in Objective-c: Updated for IOS 5 and Automatic Reference Counting (Arc) (Developer's Library)

Used Book in Good Condition
Programming in Objective-c: Updated for IOS 5 and Automatic Reference Counting (Arc) (Developer's Library)
Specs:
Height9.25 Inches
Length7 Inches
Number of items1
Weight1.92684016988 Pounds
Width1.25 Inches
▼ Read Reddit mentions

35. Making Software: What Really Works, and Why We Believe It

    Features:
  • O Reilly Media
Making Software: What Really Works, and Why We Believe It
Specs:
Height9.19 Inches
Length7 Inches
Number of items1
Weight2.2 Pounds
Width1.3 Inches
▼ Read Reddit mentions

36. Head First Python: A Brain-Friendly Guide

Used Book in Good Condition
Head First Python: A Brain-Friendly Guide
Specs:
Height9.25 Inches
Length8 Inches
Number of items1
Weight2.05 Pounds
Width1.1 Inches
▼ Read Reddit mentions

37. C Primer Plus (5th Edition)

C Primer Plus (5th Edition)
Specs:
Height9.25 Inches
Length7.5 Inches
Number of items1
Weight3.54062392772 Pounds
Width2.25 Inches
▼ Read Reddit mentions

38. The IDA Pro Book, 2nd Edition: The Unofficial Guide to the World's Most Popular Disassembler

    Features:
  • Used Book in Good Condition
The IDA Pro Book, 2nd Edition: The Unofficial Guide to the World's Most Popular Disassembler
Specs:
ColorMulticolor
Height9.27 Inches
Length7.06 Inches
Number of items1
Release dateJuly 2011
Weight2.4 Pounds
Width1.58 Inches
▼ Read Reddit mentions

39. Pro C# 2010 and the .NET 4 Platform (Expert's Voice in .NET)

    Features:
  • Apress
Pro C# 2010 and the .NET 4 Platform (Expert's Voice in .NET)
Specs:
Height9.5 Inches
Length7.75 Inches
Number of items1
Weight6.35 Pounds
Width2.5 Inches
▼ Read Reddit mentions

40. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition)

    Features:
  • Prentice Hall PTR
Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition)
Specs:
Height10.25 Inches
Length8.5 Inches
Number of items1
Weight3.76108618972 Pounds
Width2.15 Inches
▼ Read Reddit mentions

🎓 Reddit experts on software design & engeneering books

The comments and opinions expressed on this page are written exclusively by redditors. To provide you with the most relevant data, we sourced opinions from the most knowledgeable Reddit users based the total number of upvotes and downvotes received across comments on subreddits where software design & engeneering books are discussed. For your reference and for the sake of transparency, here are the specialists whose opinions mattered the most in our ranking.
Total score: 2,081
Number of comments: 15
Relevant subreddits: 1
Total score: 455
Number of comments: 43
Relevant subreddits: 2
Total score: 184
Number of comments: 83
Relevant subreddits: 2
Total score: 136
Number of comments: 17
Relevant subreddits: 2
Total score: 48
Number of comments: 15
Relevant subreddits: 4
Total score: 42
Number of comments: 15
Relevant subreddits: 3
Total score: 38
Number of comments: 30
Relevant subreddits: 4
Total score: 32
Number of comments: 17
Relevant subreddits: 1
Total score: 25
Number of comments: 14
Relevant subreddits: 2
Total score: 21
Number of comments: 15
Relevant subreddits: 1

idea-bulb Interested in what Redditors like? Check out our Shuffle feature

Shuffle: random products popular on Reddit

Top Reddit comments about Software Design, Testing & Engineering:

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/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/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/psychfi · 3 pointsr/AcademicPsychology

Lots of great suggestions here. My grad program used SPSS but it annoyed me that someone had to pay for it, so I learned R. Like others mention, if you learn R it can be easier to go back to SPSS. Also, others who use SPSS might think you have some kind of superpower.

Like u/bobbyfiend says, the best is to do use it on some projects. This forces you to learn something that is important and you have interest in solving. The internet is amazing, and most answers in some form or another can be found on Stack Overflow (make sure to ask the questions in the proper format and search first), /r/rstats (a bit more friendly than stack overflow), or on some of the email lists.

In general, I would say there are a couple of resources that most people could benefit from as they start to learn:

-Andy Field's Discovering Statistics with R - It does have some irreverent humor, but is a good read

-Hadley Wickham's R for Data Science - this resource is free online but can also be bought through Amazon. Hadley is a R celebrity responsible for creating the 'tidyverse' series of packages - packages which make R more beginner friendly imo.

You will definitely want to look at your subspecialty and see if there are any people working in R there. They may have some other resources. Again, you can read books and watch courses all you want, but it is critical to practice (and practice using something you are interested in can help exceptionally). Ultimately, I used my dissertation as an excuse to dive into R - there was pain, and I probably could have done it quicker if I stayed in SPSS - but I learned a lot and now use R and Rmarkdown - and really do not think I plan on going back. Another user mentions looking at others' code, and this has also helped me to make my code more efficient and reproducible - a big strength of R (love that you can use Git).

u/baultista · 2 pointsr/learnprogramming

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

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

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

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

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

u/phao · 3 pointsr/learnprogramming

((EDIT)) I was assuming, for some reason (don't ask me why), that you couldn't do what /u/kulseran told you to do (i.e. having a function in the other file, and calling that function passing stuf as a parameter), but if you can stick to what he said, do it. It's the simpler/better/... solution. It often won't be able possible however. ((/EDIT))

Sorry the long post.

It is right: if you had another module that needed the contents of stuff, then you'd need something more sophisticated. Some options in C would be through the use of ADTs and mutable modules. In C++ you have way more options. I'm going to assume C though.

You can look at your code and find out which problem is the use of stuff solving. Factor that solution into a coherent (possibly mutable) module and hide stuff in there by making it a file scope static variable. Access to stuff is now done through its module's public interface. If access to it includes mutable operations, then you can control that mutation because it only happens through the module's public interface (only functions defined in that same file/module can access stuff). Ideally, this removes its globalness.

Of course that if this module provide functions like setStuff, getStuff, getPointerToStuff and/or related operations, the module separation is as good as nothing. The idea is to create an useful boundary that allows you good enough control over how stuff is used while providing a useful and encapsulating set of operations that users of your module can use. If those includes getState, then fine, but if it starts including all that other stuff, then you're effectively back to globals.

And just to be clear, the term "mutable module" is something I just came up with. It just means a module whose state can change.

The ADT approach is pretty common. Maybe there is a type struggling to come out of your use of stuff. Analyze your program and find out. Check which set of operations people are interested in doing to stuff. Voilá, there is your ADT. Now implement it. Hide it's internal state and have it be controlled through the ADT's operations.

There is a book on this. For all I know, it's good but it has been a while since I've looked at it => http://www.amazon.com/Interfaces-Implementations-Techniques-Creating-Reusable/dp/0201498413.

I think it's good to notice that the solutions C easily supports don't seem very good to me. You surely can solve the problem, but it won't be that convenient. There will be workarounds. C isn't particularly known for its ability to create great abstractions.

The overall notion is that state itself is not your enemy. However, it's often that we use mutable state. That is SOMETHING is in a state and the state of SOMETHING can change and become another one. Besides, often we'd like to share SOMETHING. That is, several modules in your program want to use SOMETHING. These two needs are in conflict with each other. That's where lies the evil because it's too error prone to share mutable state. If it's mutable, avoid sharing. If it's shared, avoid mutable.

That's the advantage of placing something inside a module, hiding it behind an ADT's implementation and so forth. Because it minimizes the sharing of that state. Now only a handful of functions share that state, which means that errors due to sharing [the module's particular internal] mutable state are limited to that particular piece of code.

As for the java code...

Notice how you use public static final variables. These have state and are shared, but aren't mutable. So they just don't have all the usual pain of globals (although they're not the ultimate perfect feature). The private state of an object is mutable, but sharing is contained to the object, and thus they also don't have all the pain of globals. You can control this private state through the object's public interface, much like you can do through the stateful object and the ADT implementation.

I'm sorry but I just scanned through the beginning of your java code. I didn't look much into it.

u/Newt_Hoenikker · 3 pointsr/C_Programming

I have a several friends who find Test-driven Development to be really helpful for shaping their ideas into code. In general you'll need to break down the problem into smaller pieces, and TDD can help not only in realizing what those pieces need to be, but it also provides a method of ensuring that your code has accomplished what you want.

One of my favorite lessons from this sub is that complexity should stem from the coupling of simple parts. This isn't always straightforward. Many times it's easy to create a monolithic myProject.c, a single struct, or only a handful of functions to get the result you want. This isn't, strictly speaking, wrong but it is generally seen as bad practice. This is because when you have to maintain long term projects you want to have changes to one portion affect the others as little as possible; you should never have to rewrite the whole program in order to accommodate a change to a single part.

There aren't exactly hard and fast rules to determine the best process for modular design, but practicing on smaller projects is a good start. If you're looking for more specific "best practices" I've found C Interfaces and Implementations by David Hanson to be a really nice guide for some particularly common problems.

As for your specific project I think it would help you to consider the mechanics of TicTacToe as a game, and how you can change them while still keeping it familiar. For instance, my first thoughts are:

  • grid size: 3x3 is standard, but a larger grid could change how the game plays out without changing win conditions.

  • player number: 1v1 is standard, but having 3+ player free-for-all matches or teams could make it completely different.

    Now what I'm getting at here is that for the purposes of learning best practice it could help to design the program to allow for different rules, changing individual parts without it requiring a complete overhaul. If you can build it to change these things without recompilation so much the better. In general I look at this method as an analogous measure of scalability; can the program handle an increased load, how much of one, and how readily will it handle it. In allowing for modular rule changes you'll build a modular project.

    As a final note, bear in mind that there is a limit to modularity. Eventually trying to make a program handle every eventuality can be paralyzing. Learning where the limit is and what you feel you can handle is almost purely a matter of experience, but I think the most important thing is to never let the scale of your project deter you from completing it. You control how the program is designed so ultimately it's your decision, and if that means just sitting down and writing out something that works so be it. The perfect is the enemy of the good.

    I hope that helps.
u/emtuls · 9 pointsr/netsec

Hey /u/Xerack! I'm the original author of the post linked here.

Appreciate the feedback! If you think I could clarify anything better, please let me know.

As far as resources for Reverse Engineering, I can provide you with a baseline that I would recommend starting with.

x86 Assembly:


If you don't know assembly language at all, this list of videos was where I picked up a decent amount of x86 assembly language.


A few good books would be:


  • Hacking: The Art of Exploitation I am a huge advocate for this book. I learned a lot from this and have read it multiple times. It is written very well and teaches someone with no experience how to do C programming and assembly. This is mainly a book for learning exploitation/vulnerability research, but that can play hand and hand with Reverse Engineering. It will show you the assembly language break down of basic exploits and this can help you with RE.

  • Practical Reverse Engineering I read through the beginning of this book and it gave me some good foundations of understanding memory and computer architecture for RE along with assembly of course

  • Secrets of Reverse Engineering This book is a bit in depth, but the beginning gives another good foundation for Comp Architecture and assembly stuff.

  • The IDA Pro Book Haven't personally read this book yet, but I have been told it is the defacto standard for learning IDA Pro, and it has examples you can learn from.

    Hands On:


  • Legend of Random Very useful hands on with tutorials. Mainly based on cracking, but that requires reverse engineering. Highly recommend this!

  • Lenas Tutorials Again, another awesome hands on tutorial, mostly based on cracking as well.

  • Crackmes These are more of challenges once you start to have a little understanding down

    Courses:

    Tons of courses on youtube. I learn well from visual, so I recommend these youtube videos:


  • Basic Dynamic Analysis
  • Real World Decompilation There are a few videos to this series and he disassembles a game, definitely nice to learn from.


    Beyond that, Google will always be your friend, and /r/reverseengineering. I also have a bunch of material for Malware RE, but that's a bit different than Software RE, though it is relatable.
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/CodeTamarin · 2 pointsr/computerscience

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

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

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

    ​

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

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

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

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

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

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

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

    FINAL NOTE: Read the soft skills books first.

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

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

If you want a serious book recommendation: Learning Python 5th Edition by Mark Lutz. It's a monster at 1600 pages but to say it's thorough is an understatement. I got the ebook so I can quickly search through it on my phone. Even though I wouldn't consider myself a beginner anymore, I find between this book and the Python Cookbook I find answers to most of my problems (unless they're related to a library).

You can also read Learn Python the Hard Way (my introduction to Python 2). Which is free but not anywhere near the scale of Learning Python. As a warning, there's some coarse language used in it.

If you don't know any Python -- and this will probably stir the pot a little -- learn Python 3. BUT learn how to make it Python 2 compatible. Sure, you'll give up things like advanced tuple unpacking and yield from (to name two off the top of my head) and you'll probably have to use six but when the day comes that you can fully move your library to just Python 3, you'll be thankful.

If you feel comfortable enough with Python to begin approaching a web framework, I would personally recommend Flask. I'm sure quite a few people would disagree and they probably make valid points. But Flask is easy to start with:

from flask import Flask

app = Flask(name)

@app.route('/')
def index():
return "Hello World"

if name == 'main':
app.run()

Miguel Grinberg (you'll see him float around /r/Flask and some of the other Python subs occasionally) has both a great blog series and a great book on building Flask projects. It's not the end all be all of Flask knowledge and honestly, I'd like see more written on working with bigger projects, but given Flask is only 4 years old I'm not surprised.

For Django, I've heard lots of good things about Two Scoops of Django but I've not read it (though, I need to at some point).

I'm unsure about other frameworks like Pyramid or TurboGears or WebPy.

You'll also want to have working knowledge of HTML (not hard), CSS and Javascript (much harder). And getting chummy with libraries like Bootstrap and JQuery/Angular/whatever is probably a good idea, too.

There's also specific concepts you'll want to be familiar with depending on where and what you work on: things like REST, JSON, Ajax, CSRF, etc.

u/mr0860 · 2 pointsr/AskStatistics

I'm from a social science background and, like you, I often find myself hopelessly lost when it comes to what feels like very basic concepts in statistics. I think that's partly due to how statistics is taught in all non-mathematics disciplines - in theory we're taught how to use and evaluate quite complex statistical procedures, but with only 1-2 hours per week teaching, it's impossible for our lecturers to cover the fundamental building blocks that help us to understand what's actually going on.

Because of this, I've recently started a few MOOCs on Coursera, and I've found these massively helpful for covering research methods and statistics in far more depth than my undergraduate and postgraduate lecturers ever had time to delve into. In particular, a couple of courses I'd recommend are:

  • Methods and Statistics in Social Sciences - This is particularly focused on quantitative methods in the social sciences (including quite a bit on behavioural and self-report research) so I'm not sure if it will be directly relevant with respect to neuroimaging and cognitive neuroscience, but this gives a great introduction to research methods in general. I've actually only done the first course in this series (Quantitative Research Methods), but they're very comprehensive and well made, so I'm confident that the whole series will be useful for any researcher.
  • Probability and statistics: To p or not to p? - This one is a little bit more maths-heavy so might be a bit intimidating if you don't find that sort of material easy, but it's a good introduction to some of the core concepts in quantitative research, including some you mentioned (e.g. probability distributions). You don't really have to fully engage with or grasp the maths for it to be useful either.

    In terms of textbooks, I personally use Andy Field's Discovering Statistics Using R, and find that very helpful. Field is a psychologist who is very open about his difficulties with learning statistics, and I've found it quite useful and re-assuring to learn from someone with that mindset. He's also tried writing a statistics textbook in the form of a graphic novel, An Adventure in Statistics: The Reality Enigma, so if that sounds like something that might help you, check it out.

    I think a few people from a 'purer' statistics background are a bit more critical about Field's books because they're not as comprehensive as a book written by, for example, a statistics professor - and there might be some advice in there that's a little bit out-of-date or not quite correct. He also has a very hit-and-miss cheesy sense of humour, which you'll either love or find very annoying. But I think he takes the right sort of approach for helping people who aren't necessarily mathematically-inclined to dip their toes into the world of statistics.
u/nekochanwork · 1 pointr/learnprogramming

For some definitions:

REST

For a beginner like yourself, you can think of REST as meaning "pretty urls". It means much more than this, in the sense that RESTful urls encodes application state and interactions into the URL, but for your purposes, it is helpful to simplify REST down to "pretty urls". Reddit uses RESTful urls:

  • https://www.reddit.com/r/learnprogramming/comments/4l0qch/super_confused_on_how_to_start_learning_web/

    The non-RESTful (RESTless?) url would look something like:

  • https://www.reddit.com/comments.html?subreddit=learnprogramming&threadId=4l0qch&title=super+confused+on+how+to+start+learning+web

    MVC

    MVC means "model-view-controller", which refers to a specific way in which your application is organized in order to separate your domain layer (model), presentation layer (view), and business logic layer (controller). For a concrete example:

    Model: represents the data elements that you want to show to the user. A model is most often just a vanilla class with get/set properties. Let's imagine I'm building a blog from scratch and I want to show the user a page containing my post: my model logically includes my post (content, date, authors), comments (content, date, authors), etc. My model might look something like this:

    public class BlogPostModel
    {
    public Author[] Authors { get; set; }
    public DateTime CreatedOn { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
    public string[] Tags { get; set; }
    public Comment[] Comments { get; set; }
    }

    View: a view transforms the model into something your users can see and understand. In web development, a "view" is nearly always the HTML:

    <html>
    <head><title>@(Model.Title)</title></head>
    <body>
    <h1>@(Model.Title)</title>
    <div>By @(Model.Authors) on @(Model.CreatedOn.ToString("YYYY-mm-dd"))
    <div>
    @foreach(var tag in Model.Tags)
    {
    <a href="blog/tags/@(tag)">@(tag)</a>
    }
    </div>
    <div>@Model.Content</title>
    <h2>Comments</h2>
    @foreach(var comment in Model.Comments)
    {
    <div>. . .</div>
    }
    </body>
    </html>

    Controller: a controller contains your business logic. Typically, this includes logging users in, reading/writing to the database, validating user input on the server side. In ASP.NET MVC, your controller is a class which inherits from System.Web.Mvc.Controller. The controller class can exposes "actions", which are simply methods that return a type of ActionResult. ASP.NET will expose each "action" through a RESTful url called a "route". A simple controller looks like this:

    public class BlogController : Controller
    {
    // url: ~/blog/Article/{articleId}
    public ActionResult Article(int articleId)
    {
    // ...
    }

    // url: ~/blog/AddComment/{articleId}
    public ActionResult AddComment(int articleId, CommentModel model)
    {
    // ...
    }
    }

    ASP.NET

    ASP.NET is a set of classes and libraries built on top of the .NET Framework which helps you build web application. ASP.NET comes in two flavors:

  • ASP.NET WebForms. You can simply ignore this. No one uses WebForms anymore.
  • ASP.NET MVC. Learn this. This is a framework which makes it easy to write RESTful applications in the traditional model-view-controller fashion.

    WebAPI

    WebAPI allows you build RESTful web services that do not have a front-end (that is, calling methods on your API does not return any HTML). This can be occasionally useful.

    .NET

    The .NET framework is a set of libraries developed by Microsoft which helps developers build applications that execute in the Microsoft Common Language Runtime. If use C# on Windows, you already use .NET.

    Mono is alternative, open-source implementation of the .NET framework which runs on Linux.

    jQuery

    jQuery is a Javascript framework which is tailored to selecting and manipulating the DOM on the client side. (The "DOM" refers to the browsers representation of HTML elements on screen; changing an element on the DOM usually has a visible effect to the user in the browser.) It also has some useful utility methods for sending AJAX requests, animating elements on screen, etc.

    Although jQuery is omnipresent in web development, it's not a prerequisite for a beginner to learn. You can pick it up over time as you develop your skills.

    > I understand HTML, CSS, JavaScript, SQL, C# basics. What is the next step?

    Pick up a copy of Pro ASP.NET MVC 5 and start learning.
u/GekkePop · 2 pointsr/learnjavascript

Here's a short list of what I used:

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

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

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

    Some things I like about my current project:

  • Doesn't need a huge investment besides my time;
  • Achievable by a small number of people or even just myself;
  • Can make a simple version first, but also have lots of opportunity to expand on this version;
  • Doesn't need huge amount of support.
u/YuleTideCamel · 1 pointr/webdev

Geez, man. Thanks for making me feel old! :P

This subredding is actually a good resource to keep up on what's new. Twitter is another one if you follow the right people. Paul Irish, Addy Osmani, John Resig and a few others.

In terms of training, pluralsight is a GREAT resource. It's not free, but you can get an introductory offer and the low end monthly plan is $30 which isn't too bad. They have courses on web dev and programming by some of the best people in the industry. It's a great way to learn. http://pluralsight.com/training

Online learning:

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/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/teknocide · 10 pointsr/scala

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

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

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

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


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

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


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

Finally a few tips:

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

    Sorry for the rant!

    addendum: Yes! I feel I am more productive in Scala compared to both Java and C#, even for bigger projects. The ability to try ideas and flesh out code is much faster once you get used to how the type inference works (and doesn't work in some instances)
u/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/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/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/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/paultypes · 5 pointsr/programming

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

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

Let me sketch a few example scenarios:

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

    All of these scenarios are, in my opinion, completely reasonable, even if I got a little tongue-in-cheek on the last one. :-)
u/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/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/Monory · 10 pointsr/GradSchool

I've really enjoyed Discovering Statistics using R by Andy Field. The book is written more like prose than a textbook, and is rarely dry. It requires you to learn how to use the R programming language as well, but I think it is very worth it. Everything he teaches, he teaches it at the conceptual level first and then shows you how to perform the tests using R. A great bonus is that R is great for data visualization, and being able to visualize large data sets quickly really helps get a better understanding of the data you are working with, which helps learn the theory.

u/DutchPhenom · 6 pointsr/AskEconomics

Now this is an interesting and difficult question, which depends on many things. For starters, if you find this process frustrating that is unfortunate, because learning how to code is usually a trail and error + revise your work process. In other words, its supposed to be both frustrating and rewarding, like a hard (text-based) video game. For me its half of the fun.

What you want to learn really depends on the context. If you are really diving into econ, Stata is still very common. More stats-heavy, new, or interdisciplinary fields tend to use R. If you work with big, live datasets, or work with computer scientists, learning Python is always a plus. But obviously start with one.

I am proficient in stata simply because I had classes in it, it is difficult for me to advice how to self study. I learned most of the basics through An Introduction to Modern Econometrics Using Stata, and later on most of my R through R for Stata Users (Statistics and Computing) . I also learned some R through Discovering Statistics Using R, but I find Field obnoxiously failing to be funny, so I wouldn't reccomend it.

I'm now in the process of learning more Python, to do some more programming work on the side. As a start I used Learn Python 3 the Hard Way recommended to me by a very proficient friend of mine. This however does not give you much of an intro to stats in python, only the very very simple basics you can use as a vantage point for further work.

If you have learned the basics, tbe hest way to learn more is just to fool around. What is your field of interest? I like a lot of macro, so I used to just go to Quandl, pick some free databases, import them, and run some fun stuff. This is the best way to learn, especially if you for example try to merge free World bank databases with a different database from Quandl, as it will give you a lot of errors whilst merging and conversion problems later on.

If you are a bit more proficient you can start using websites like upwork to get some assignments. Usually it doesn't earn you much at the start, but the experience of actual assignments is the best way to self-teach. A different manner I like to do (if you are still studying) is offering your services (for free) to a professor. Ask him/her if there are still projects they are working on for which they need some to look at. Usually you will be treated solely as someone for the code, but it generally gives you a lot of experience and the right contacts.

These are just some of my thoughts. If you could provide some more context of where exactly you want to go, I could go into more detail.

Edit: What I forgot to say is that if it is not possible to study a course, I would recommend doing at least one MOOC to get you at a basic level.

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/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/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/phpdevster · 87 pointsr/webdev

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

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

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

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

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

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

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

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

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

u/dysfunctionaltrav · 1 pointr/cscareerquestions

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

 

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

Scala website

The book I read

A good book on functional programming

 

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

*Edited my formatting

u/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/webdevrr · 6 pointsr/javascript

First, make sure that you've built some complex apps in vanilla JS, and have faced some sort of issue of scale (ie. problems that came up because your app has a lot of code). Maybe your code is really long and difficult to organize. Maybe you end up repeating the same code in a lot of places. Etc.

That way when you try a framework, you'll have some idea why it does what it does, and what problem it's trying to solve.

As far as specific libraries, I'd try these in this order:

u/[deleted] · 1 pointr/programming

No, that book will teach you ruby, but not rails. Also, for learning Ruby the language, there are better choices. I highly recommend "The Well Grounded Rubyist" for any skill level that includes being able to find progit. ;-)
The Ruby Programming Language is also highly regarded, but more terse. If you know other dynamic langues already and prefer a quicker read, this might be a good choice also.

As for learning Rails, I have heard good things about this book/tutorial, available for free:

http://railstutorial.org/ruby-on-rails-tutorial-book

There are also accompanying screencasts and pdfs for pay, which have gotten good reviews. Also available on dead tree soon: http://www.amazon.com/Ruby-Rails-Tutorial-Addison-Wesley-Professional/dp/0321743121

If you do decide you want the Pragmatic Programmers Rails book, you'd probably be better served by waiting for the 4th edition to print or buying the pre-press ebook. http://pragprog.com/titles/rails4/agile-web-development-with-rails It's not a bad book for rails, but the 3rd edition is fairly outdated at this point.

u/c3261d3b8d1565dda639 · 7 pointsr/programming

I think posting material like this with no context is silly, but I upvoted this anyway because I recommend these books often. The Introduction is very short and explains better than I could here why the books were written. The quality of the chapters vary, but they are mostly all worth reading. I'm excited for the upcoming The Performance of Open Source Applications, although I haven't heard any news about its progress in a long while.

One of the editors, Greg Wilson, did some research into how we can be effective programmers. Basically, continuing the research that books like Code Complete were based on. He wrote an excellent book Making Software: What Really Works, and Why We Believe It. He is also involved with the community blog It Will Never Work in Theory, which is tag-lined as software development research that is relevant in practice.

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/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/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/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/thecoffman · 1 pointr/ruby

I would strongly recommend The Ruby Programming Language over the pickaxe book at this stage. For a long time the pickaxe was the definitive book on Ruby so people tend to suggest it out of habit - but in the past year or so this book came out and in my opinion its substantially better. Check out the Amazon reviews if you have any doubts.

Additionally, if you want a fun intro to programming that's short, informative and funny, you can't go wrong with _why's poignant guide to ruby (give it a few pages, but trust me, its awesome.

u/milkeater · 1 pointr/ReverseEngineering

I think most is kind of a rough statement. Granted there were some truly gifted people in the 70's that rocked our world.

I think we have a LOT of research papers that we sift through and the legacy papers tend to stay highlighted in time. I can imagine if you sifted through everything that existed back then, you may be saying something similar.

I've found a few great ones and if you are heavy into software engineering, you may share the enthusiasm towards a book that came out several years ago: Greg Wilson - Making Software: What Works and Why we Believe it

He also has a talk where he references some of those papers: Greg Wilson talk

He comes off strong, but he backs it with research which I appreciate. It's more about bringing data to the table if you have something you'd like to discuss. Somewhat heavy handed, but there are good papers that I've read referenced there.

The continual evaluation of Conways law and it's research still holding true today is something that I continually enjoy (Although originating from a 1967 study reinforcing your point of seminal papers from that era)

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/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/CSMastermind · 2 pointsr/AskComputerScience

Senior Level Software Engineer Reading List


Read This First


  1. Mastery: The Keys to Success and Long-Term Fulfillment

    Fundamentals


  2. Patterns of Enterprise Application Architecture
  3. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
  4. Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML
  5. Systemantics: How Systems Work and Especially How They Fail
  6. Rework
  7. Writing Secure Code
  8. Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries

    Development Theory


  9. Growing Object-Oriented Software, Guided by Tests
  10. Object-Oriented Analysis and Design with Applications
  11. Introduction to Functional Programming
  12. Design Concepts in Programming Languages
  13. Code Reading: The Open Source Perspective
  14. Modern Operating Systems
  15. Extreme Programming Explained: Embrace Change
  16. The Elements of Computing Systems: Building a Modern Computer from First Principles
  17. Code: The Hidden Language of Computer Hardware and Software

    Philosophy of Programming


  18. Making Software: What Really Works, and Why We Believe It
  19. Beautiful Code: Leading Programmers Explain How They Think
  20. The Elements of Programming Style
  21. A Discipline of Programming
  22. The Practice of Programming
  23. Computer Systems: A Programmer's Perspective
  24. Object Thinking
  25. How to Solve It by Computer
  26. 97 Things Every Programmer Should Know: Collective Wisdom from the Experts

    Mentality


  27. Hackers and Painters: Big Ideas from the Computer Age
  28. The Intentional Stance
  29. Things That Make Us Smart: Defending Human Attributes In The Age Of The Machine
  30. The Back of the Napkin: Solving Problems and Selling Ideas with Pictures
  31. The Timeless Way of Building
  32. The Soul Of A New Machine
  33. WIZARDRY COMPILED
  34. YOUTH
  35. Understanding Comics: The Invisible Art

    Software Engineering Skill Sets


  36. Software Tools
  37. UML Distilled: A Brief Guide to the Standard Object Modeling Language
  38. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development
  39. Practical Parallel Programming
  40. Past, Present, Parallel: A Survey of Available Parallel Computer Systems
  41. Mastering Regular Expressions
  42. Compilers: Principles, Techniques, and Tools
  43. Computer Graphics: Principles and Practice in C
  44. Michael Abrash's Graphics Programming Black Book
  45. The Art of Deception: Controlling the Human Element of Security
  46. SOA in Practice: The Art of Distributed System Design
  47. Data Mining: Practical Machine Learning Tools and Techniques
  48. Data Crunching: Solve Everyday Problems Using Java, Python, and more.

    Design


  49. The Psychology Of Everyday Things
  50. About Face 3: The Essentials of Interaction Design
  51. Design for Hackers: Reverse Engineering Beauty
  52. The Non-Designer's Design Book

    History


  53. Micro-ISV: From Vision to Reality
  54. Death March
  55. Showstopper! the Breakneck Race to Create Windows NT and the Next Generation at Microsoft
  56. The PayPal Wars: Battles with eBay, the Media, the Mafia, and the Rest of Planet Earth
  57. The Business of Software: What Every Manager, Programmer, and Entrepreneur Must Know to Thrive and Survive in Good Times and Bad
  58. In the Beginning...was the Command Line

    Specialist Skills


  59. The Art of UNIX Programming
  60. Advanced Programming in the UNIX Environment
  61. Programming Windows
  62. Cocoa Programming for Mac OS X
  63. Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals
  64. lex & yacc
  65. The TCP/IP Guide: A Comprehensive, Illustrated Internet Protocols Reference
  66. C Programming Language
  67. No Bugs!: Delivering Error Free Code in C and C++
  68. Modern C++ Design: Generic Programming and Design Patterns Applied
  69. Agile Principles, Patterns, and Practices in C#
  70. Pragmatic Unit Testing in C# with NUnit

    DevOps Reading List


  71. Time Management for System Administrators: Stop Working Late and Start Working Smart
  72. The Practice of Cloud System Administration: DevOps and SRE Practices for Web Services
  73. The Practice of System and Network Administration: DevOps and other Best Practices for Enterprise IT
  74. Effective DevOps: Building a Culture of Collaboration, Affinity, and Tooling at Scale
  75. DevOps: A Software Architect's Perspective
  76. The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
  77. Site Reliability Engineering: How Google Runs Production Systems
  78. Cloud Native Java: Designing Resilient Systems with Spring Boot, Spring Cloud, and Cloud Foundry
  79. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
  80. Migrating Large-Scale Services to the Cloud
u/noman_land · 2 pointsr/javascript

Take a look at the book Effective Javascript. It's a really excellent book that deep dives into specific examples and what to look out for.

Secondly, check out some of the tutorials on nodeschool.io. They get into some really neat and important Javascript things.

Thirdly, write some backend Javascript code in nodejs so you can use the skills you already have but apply them to backend concepts. Heroku has some really nice tutorials that will get you writing server code in just a few minutes. https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction.

Fourthly, use one or more of the popular frontend frameworks to build a simple Todo app. In fact, if you have the time, build the same Todo app in a few different frameworks, so you get an idea of how they work.

Also, when interviewing, just be honest. Tell them you have a number of years of experience but that you've worked for organizations that preferred quick and dirty over perfect. You can parlay that into a positive by showing how learned to get stuff done quickly without spending too much time on small details.

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

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

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

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

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

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

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

Plus there are LOADS of good tutorials online.

u/KennedyRichard · 1 pointr/learnpython

Python Cookbook 3rd ed., by David Beazley and Brian K. Jones, has a dedicated chapter about metaprogramming. The book is so good the other stuff may also give some insight on metaprogramming or alternatives. I already read it and it gave me insight on my code about metaprogramming and other topics, so it is pretty useful. You can also find a lecture from Beazley about the topic with a quick google search with his name and the "metaprogramming" word.

There's also Fluent Python by Luciano Ramalho, which has three dedicated chapters about metaprogramming. Didn't read the chapters myself but I'm half way into the book and it is awesome, so I'm having great expectations about those chapters.

Don't mind the metaprogramming "chapter count", it is just a piece of information. Quality is what you should be looking for. And I believe those books have it. Even though I admit an entire book about metaprogramming would be neat.

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/akevinclark · 9 pointsr/AskProgramming

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

Refactoring by Martin Fowler

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

The Pragmatic Programmer by Dave Thomas and Andy Hunt

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

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

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

u/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/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/enkideridu · 5 pointsr/web_design

>How do you get clients?

80% of my clients I've met via reddit (/r/forhire, /r/torontojobs , most often from people responding to my posts, sometimes months after I post them). A few others were met through friends who worked at the company

> do you charge for the price of a domain an hosting or do you expect the client to take care of it

Depends on the client. Ask them if they want you to take care of it for them.

> I won't want to sound super shady to anyone who might be interested in getting a webpage built by me.

Have a list of prior work, social media presence helps (twitter, linkedin, github). Your portfolio doesn't have to be a website. I send a bulleted list

Having your own domain name for emails should also help. Google Apps is just $50/year.


>I have experience in HTML and CSS

Learn Javascript. At least a little bit. I'd recommend reading this book cover to cover : Effective Javascript by David Herman, a chapter a day, it'll take you 2 weeks, maybe 3.

u/Kalanthroxic · 3 pointsr/AskProgramming

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

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

u/WellThenScrewIt · 9 pointsr/ReverseEngineering

Learn to write simple C programs. Then debug your own C programs, preferably in OS X or Linux using gcc/gdb. Then disassemble your own C code (learn how to disable optimization in the compiler; try it with no optimizaiton and then with increasing levels). Then look at C++ and (gasp) Visual BASIC and such. Turns out a ton of malware is written in these languages, and the snarl of garbage that you'll uncover that is just part of the auto-generated message handling stuff for VB will astound you, so don't start there...but it's important to understand those structures when you see them.

Then follow tutorials about reversing other programs. There are great books on this.

It helps a lot to know assembly language, but you'll tend to pick it up as you go.

You'll want better tools than just command-line disassemblers. I prefer IDA Pro.

There's a great book that uses IDA Pro with many examples to address precisely your questions.

Here's another great book on malware analysis that covers all kinds of tricks you might bump into when working on real targets.

I see all this as a long-term iterative exercise. It's fascinating.


u/woodforbrains · 9 pointsr/AcademicPsychology

An EXCELLENT response. I'm a research psychologist and I think that is an absolutely fair summary of what to expect if you go the grad school route.

As far as "what you're expected to know", this will vary by which of the four options you choose; the best RAs i've mentored are always interested in two things: stats and current literature. Google Scholar your favorite topic in psychology and the backwards/forwards links will connect you to a wealth of ideas. As for stats, they get a bad rap, but i can suggest a few books that might turn around anyone with stats-loathing:

-Andy Field's SPSS/R how-to books. Honestly, the man has probably done more for beginning psychologists than Starbucks. Very readable, even good for more developed psychologists to get ideas for new analyses.
http://www.amazon.com/Discovering-Statistics-Using-Andy-Field/dp/1446200469/ref=sr_1_2?s=books&ie=UTF8&qid=1419965487&sr=1-2.

-Mac & Creel: Bible for signal detection theory, a cool way of thinking about perception as a process of separating signal from noise.
http://www.amazon.com/Detection-Theory-A-Users-Guide/dp/0805842314

u/RICHUNCLEPENNYBAGS · 5 pointsr/learnprogramming

Web Forms is, in my opinion, a big mess. However, I think MVC is pretty good and I don't think it's hard to learn. I read the last version of this book and it was enough for me to start creating an MVC app on a two-man team (with me doing more than half the work) and have it ready to launch V1 in two months: http://www.amazon.com/Pro-ASP-NET-MVC-Adam-Freeman/dp/1430265299/

Anyway, relational databases are likely to be with us for some time (NoSQL is still pretty much a niche in my opinion) and "cloud" programming isn't really that different, other than that you can't really count on machine state. All that means is you have to write to a database or a separate file store.

edit: Another thought is that honestly the kind of practices you have to do for cloud Web programming are good ones anyway... even if you're hosting it yourself, not counting on machine state means you can have as many instances as you want, which makes it easy to scale. If you're relying on the machine state you have a much longer road to scaling as you have to figure out how to keep those in sync or else factor out all the code using it.

u/Gankbanger · 1 pointr/learnprogramming

Coding:

  • Code Complete 2. It is language agnostic BTW, most recommendations and guidelines apply to several languages, if not all. I would definitively start by this one if you are a beginner. The lessons from this book will help you for the rest of your career.

    Object Oriented Programming (OOP):

  • Applying UML and Patterns. In my opinion the best book on UML in the market. Excellent illustration of step by step process to getting an idea from concept to code while thinking Object-Oriented. Just keep in mind the book has some embedded propaganda for IBM's Rational Unified Process(RUP). OOP works just as well outside the RUP; i.e.: using agile methodologies.

  • Design Patterns If you are only starting now, save this book for later. It covers more advanced design subjects. Read this one when you are already VERY comfortable with OOP.

    EDIT: People who are downvoting this are doing you a disservice out of ignorance. You must read Code Complete 2.
u/eagle2120 · 2 pointsr/ITCareerQuestions

There are a ton of different things you can do on the defensive side. The path here is a bit less defined because you can specialize in each of these areas with out ever really touching the other ones. But I think these are the most important skills as a defender, so I’ll break it up into three smaller chunks. For the most part, defender/Blue-team concepts draw from these skills, I’ve setup the courses in order, as some of these skills may feed into other areas.


IR:

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/Aeyoun · 3 pointsr/Astroneer

System Era Softworks are looking for C++ developers, so your information seems accurate.

I’d recommend you start out [playing around(https://www.amazon.com/Python-Cookbook/dp/1449340377) with Python before committing to C++. It’s much easier to achieve to some tangible goals. Maybe start out scripting some simple tasks. E.g. create ten files that each contain their own creation date and file path. Then progress through making some short text-based multi-choice adventure game (Gender-Neutral-Internet-Person and the Quest for the Reddit Upvotes). Start out simple and see if you enjoy the challenge before committing to learning C++ through game development.

P.S.: System Era lists familiarity with Python as a desired skill. It’s still relevant for automating tasks and getting stuff done even when you learn more complex languages.

P.P.S.: Python 3 is the right choice. 2.7 is an outdated dialect. You’ll know what this means soon enough.

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/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/rtz90 · 1 pointr/embedded

So I found the book C Interfaces and Implementations, which looks pretty good. Do you have any other recommendations for design pattern books?

I have been following the Linux kernel style guide for a while and I am pretty happy with it. I have skimmed some random kernel code a few times but always felt actually diving in and seriously reading it would require a big time commitment, maybe better to start with something smaller first like Contiki...

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/dtizzlenizzle · 2 pointsr/Python

For you, I would recommend going with python cookbook. It’s organized by type of thing you need to do, and has really rich and useful examples. Also watch any David Beazley videos you can find. You’ll pick up on basic Python syntax really quickly so having a book like this will be a great reference when you need to do something specific.

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/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/eric_weinstein · 5 pointsr/ruby

> Failing that, are there any good cheatsheets/references for JS "gotchas" and unusual features that devs from other languages might not be familiar with?


There are entire books dedicated to this! (Also some entertaining talks.)


Here are some good JS books not aimed at total beginners:


  • JavaScript: The Good Parts
  • Professional JavaScript for Web Developers
  • Effective JavaScript


    Bonus (to give you a sense of the kinds of "gotchas" you'll find in JS):


    // Even though you pass in numbers, JS sorts them lexicographically
    > [5, 1, 10].sort();
    [ 1, 10, 5 ]

    // You "fix" this by passing in a custom comparator
    > [5, 1, 10].sort(function(a, b) { return a - b; });
    [ 1, 5, 10 ]

    // This probably makes sense to someone, somewhere
    > Math.min();
    Infinity

    > Math.max();
    -Infinity

    // Some things are best left unknown
    > {} + {};
    NaN

    > var wat = {} + {}; wat;
    '[object Object][object Object]'

    Here are a bunch more in quiz form.
u/ben9801 · 29 pointsr/todayilearned

So make a project, that's how I learned ios dev. Think of a project you want to do and work on it bit by bit, learning along the way.

Also cookbooks are great for exactly this; they outline a project and post the complete code along with a bit of instructions as to what is being done and why.


Here is a textbook that can really help, you can find it for free 'online':
http://www.amazon.ca/Python-Cookbook-David-Beazley/dp/1449340377

Also the 'learn python the hard way' text is only something like 300 pages and gets pretty extensive with the projects towards the end.

u/Bubbleeh · -1 pointsr/learnprogramming

I'm about 4 months into learning C as my first language, and I'm still having a blast. The resources I've been using:

-C Primer Plus - Fantastic book that feels very thorough.
-www.cprogramming.com - very helpful website/forum with people very knowledgeable about C.

So yeah, I'd definitely recommend C. I can't say how challenging it is compared to other languages because it's all I know, but I've been able to steadily watch myself improve (solving problems faster, using more advanced programming concepts, etc...), and it's very rewarding.

u/objectified · 3 pointsr/Python

If you're just starting out, you will want to read Learn Python the Hard Way

If you want to learn to do thing the "pythonic" way, I've found that Idiomatic Python is a very good book.

If you already know Python and you want to learn about a wide area of subjects that can be dealt with in Python, I recommend the Python Cookbook. While some cookbooks are somewhat shallow, this book is very different. It provides extensive and very practical information even on complex topics such as multithreading (locking mechanisms, event handling, and so on). It's really worth it.

Also, don't forget to simply read and embrace the pep8 guidelines. They really help you produce good, maintainable Python code.

u/ThomasPtacek · 4 pointsr/programming

If you're a Python programmer and you want to learn C, the best way to get started is by writing C extensions for Python. Find a C library that looks interesting and wire it up to CPython.

A baby step towards doing this is to use an FFI, like Python ctypes or Ruby/DL. You'll be working with raw memory and C function calls, but you'll be writing Python. Try to port your FFI-driven extension to native C.

I don't recommend just grabbing K&R and plowing through it. It's a great book but you're not going to retain anything by reading and then trying to write out the example programs. C didn't click for me until I had real projects to work on.

My recommended book is C Interfaces and Implementations (CII). What you're going to miss in C, right away, is the lack of a "list" or "array" type like you get in Python. CII will give you the list and the dict back, and, more importantly, show you how to structure your C code professionally and idiomatically.

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

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

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

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

u/emcoffey3 · 1 pointr/csharp

Check out this, this, and this.

There's tons of books on C#. I personally like Introducing Visual C# 2010 from Apress and C# 4.0 in a Nutshell from O'Reilly. The former does a nice job covering both the C# language and the most important parts of the .NET framework, then gives a brief intro on the different UI options available. The latter skips the UI stuff, but covers some advanced topics a bit more in-depth. A lot of people seem to like Apress's Pro C#, but I didn't care for it. Also, check out the tutorials on BlackWasp.

After covering all of that stuff, figure out what you want to do and go from there. For Windows development, learn Win Forms and WPF. For web development, look into Web Forms, MVC, and Silverlight. For web services, learn WCF. Then take on a project or two, read articles, etc.

u/tidier · 2 pointsr/Python
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/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/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/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/rcinsf · 2 pointsr/programming

I agree somewhat but for a true noob, a good starter reference/book is a good thing. K&R is short too. Look at this for comparison.

If you don't have a base for programming it's hard sometimes to know what options are even available to you.

I'm an intermediate programmer and it's likely the best I'll ever be. I work hard as hell keeping up with technology. People keep moving my damn cheese!

My first C book was Teach Yourself C in 21 days. Some ancient version from like 1993-4. It was a good starting point. The key is to just start.

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/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/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/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/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/cfors · 22 pointsr/datascience

Designing Data Intensive Applications is your ticket here. It takes you through a lot of the algorithms and architecture present in the distributed technologies out there.

In a data engineering role you will probably just be munging data through a pipeline making it useful for the analysts/scientists to use, so a book recommendation for that depends on the technology you will be using. Here are some of my favorite resources for the various tools I used in my experience as a Data Engineer:

u/MrDominus7 · 3 pointsr/GradSchool

Discovering Statistics Using R by Andy Field is probably your best bet. It's pretty comprehensive in terms of what it covers and is easy (and enjoyable) to follow along with and understand.

u/kqr · 4 pointsr/learnprogramming

I really like Making Software: What Really Works, and Why We Believe It. It can be a little heavy at times but it's worth the read. If you want a light introduction to it, there's an extremely good talk that sort of introduces it as a side effect, What We Actually Know About Software Development, and Why We Believe It's True. Even if you don't plan to read the book, I recommend watching the talk. It literally changed the way I live, and I now live in less of a hand-wavey world and more of a firm, fact-based world.

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/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/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/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/lampyridae · 1 pointr/javascript

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

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

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

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

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

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

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

u/sh0rug0ru · 0 pointsr/java

My favorite book is Growing Object Oriented Software Guided By Tests.

I also enjoyed Agile Software Development, Principles, Patterns, and Practices. The older version of the book is in Java, the newer version in C#. But, it's more about the OO principles than the specifics of the language, so I'd recommend the C# version. Here's a really good chapter from the book, containing a good study of both bad OO and better OO.

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/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/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/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/_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/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/benjade · 1 pointr/C_Programming

Besides what has been mentioned, these two are also good:

u/jtbrown · 2 pointsr/ObjectiveC

The Stanford course is a great way to learn if you're into lectures.

If you prefer workshops and have the time and money to invest, you should go to the Big Nerd Ranch Beginning iOS Bootcamp. (Here's my extended writeup about it - in summary, it's a great way to learn since you get live instruction.)

Or if you like books, you can try Objective-C Programming, and follow that up with iOS Programming: The Big Nerd Ranch Guide.

Decide which learning style you prefer, then jump in. :)

u/maze-le · 1 pointr/softwaredevelopment

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

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

There are also very good books on that issue:

u/SQLSavant · 2 pointsr/learnprogramming

Some of these are directly related to programming and some are not but are additional reading that touch on skills that most every programmer should have some concept or idea of.

I've read all of these at some point throughout my career and can attest to their usefulness. Here's my personal list:

u/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/silverforest · 1 pointr/IWantToLearn

Since you're on a Mac, if you're looking at OS X and iOS development, I'd recommend Objective-C.

As for books on the subject, I would recommend Objective-C Programming: The Big Nerd Ranch Guide and for you to also read the free online tutorial BecomeAnXcoder.

You might also want to look into getting Cocoa Programming for Mac OS X and iOS Programming: The Big Nerd Ranch Guide should you want to further your Cocoa and iOS knowledge respectively.

---

As for Mac IDEs, for Objective-C or C++, look at XCode (take a look in the Mac App Store).

For Java, I think Eclipse is pretty much the only option?

u/automathematics · 1 pointr/javascript

Highly agree. Buy a kindle and read anything people you trust recommend.

I would recommend one javascript specific book, actually: http://www.amazon.com/Effective-JavaScript-Specific-Software-Development/dp/0321812182/ref=sr_1_1?ie=UTF8&qid=1414608930&sr=8-1&keywords=Effective+JavaScript%3A+68+Specific+Ways+to+Harness+the+Power..

I've been doing this a long time and there's still some stuff in there for me to learn every time I flip through it.

u/Joha_Mraadu · 2 pointsr/javahelp

I learned Python at CodeAcademy:
https://www.codecademy.com/learn/python

These books are generally good, but I cannot comment on quality of this one:
Head First - Python by Paul Barry
http://www.amazon.co.uk/Head-First-Python-Paul-Barry-y/dp/1449382673/ref=sr_1_1?ie=UTF8&qid=1451758567&sr=8-1&keywords=head+first+python

You better head to /r/LearnPython and /r/Python though :)

u/danimoth2 · 2 pointsr/learnprogramming

Thanks for the quick and concise reply. Yup honestly I'm not that impressed with my teachers and I always come on to r/learnprogramming to really learn programming. I've really learned a ton here. As much as I would prefer to just study at home instead of going to school in my country a degree is a must if you want to land a good programming job here or abroad.

If it's not too much do you have any recommended books? I'm looking at this one.

u/GrowthMindset88 · 4 pointsr/learnprogramming

http://www.theodinproject.com/ was a great resource for learning web development. I really liked this book by David Herman for more advanced JS techniques: http://www.amazon.com/Effective-JavaScript-Specific-Software-Development/dp/0321812182. Also if your looking into Algorithms, this is probably THE book your looking for http://www.amazon.com/Introduction-Algorithms-Edition-Thomas-Cormen/dp/0262033844

u/Truth_Be_Told · 1 pointr/C_Programming

First note that Career/Job/Market is quite different from Knowledge/Intellectual satisfaction. So you have to keep "earning money" separate from "gaining knowledge" but do both parallely. If you are one of the lucky few who has both aligned in a particular job, you have got it made. Mostly that is never the case and hence you have to work on your Motivation/Enthusiasm and keep hammering away at the difficult subjects. There are no shortcuts :-)

I prefer Books to the Internet for study since they are more coherent and less distracting, allowing you to focus better on a subject. Unless newer editions are reqd. buy used/older editions to save money and build a large library. So here is a selection from my library (in no particular order);

u/Jake_JAM · 6 pointsr/statistics

I like Discovering Statistics using R . Great book for learning the basics of hypothesis testing, a little bit of math, and you learn how to do it in R; not to mention there are a few bits you’ll chuckle at. There are also other books for other programs in this series (SPSS, SAS).



u/last_alchemyst · 5 pointsr/rstats

I would recommend Discovering Statistics Using R. It goes through the math of the stats in a pretty solid way with example experiments and available data files if you want to work along with it. I have used the SPSS version with my intro and intermediate stats classes, so using it with R would be great. Plus, Fields is funny as hell.

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

If you are happy to fork out the cash then this is a good read

http://www.amazon.com/2010-NET-Platform-Andrew-Troelsen/dp/1430225491

Has a great range of topics from C# to WPF to ASP.NET.

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/amazedballer · 2 pointsr/scala

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

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

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

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

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

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

u/swhite1987 · 4 pointsr/dotnet

I just picked up Pro ASP.NET MVC 5 by Adam Freeman. I'm a chapter or two in, so far so good. It's the currently the best selling ASP.NET book on Amazon.

http://www.amazon.com/Pro-ASP-NET-Experts-Voice-ASP-Net/dp/1430265299

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/rferranti · 2 pointsr/programming

Not an opposite view, but IMHO definitely worth quoting on this matter:

> If more than 20-25% of a component has to be revised, it's better to rewrite it from scratch. (Thomas et al, 1997)

It's Greg Wilson, author of "Making Software: What Really Works, and Why We Believe It"

u/delphi_edict · 2 pointsr/csharp

There are two good texts that I'd recommend, each have their own bright spots. Pro MVC 5 and Professional Asp.net MVC 5.

u/geek_on_two_wheels · 5 pointsr/csharp

Pro ASP.NET MVC 5 https://www.amazon.ca/dp/1430265299

I'm working through that one right now and so far it's great.

(Not to be confused with Professional ASP.NET MVC, which may also be great. I haven't tried it)

u/MPIS · 1 pointr/compsci

Some great text resources on the subject:

u/intangiblemango · 1 pointr/AcademicPsychology

My program requires a number of stats classes and my advisor requires a number more than that. My program also offers a few data science-related specializations, which are, of course, optional, but great.

For some independent learning, Andy Field's Discovering Statistics Using R -- https://www.amazon.com/Discovering-Statistics-Using-Andy-Field/dp/1446200469/ref=sr_1_1?ie=UTF8&qid=1538060236&sr=8-1&keywords=discovering+statistics+using+r -- and datacamp.com are both handy resources.

u/NudeRanch · 6 pointsr/AskStatistics

This book is a amazing:
Discovering Statistics Using R
by Andy Field


If you are doing self-study, it is easy to lose momentum. This book is hilarious, personal, and transcends the textbook genre.

Amazon Link

u/messycan · 2 pointsr/programming

Pro C# 2010 and the .NET 4 Platform, Fifth Edition

e: I would also like to say that MSDN is a great place to look: MSDN.

u/tulip_bro · 13 pointsr/C_Programming

Chris Wellons blog series is good for minimalist C library design, and he has excellent examples on his Github too: https://nullprogram.com/blog/2018/06/10/

For a more opaque approach, check out: https://www.amazon.com/Interfaces-Implementations-Techniques-Creating-Reusable/dp/0201498413

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/sethgecko · -2 pointsr/AskReddit

Not online, not for beginners, but if ever you are in a situation where you will have to maintain the code you wrote... this is something you will wish you read as early in your adventure into coding as possible:

Agile Principle Patterns Practices in C#

Agile Principle Patterns Practices in Java

u/Bjarkwelle69 · 3 pointsr/badeconomics

> Maybe pick up a book and try to learn a little bit of R this summer?

Coursera has online courses if you want learn R and how to do statistics using R.

If you prefer a book, try "Discovering Statistics Using R" by Andy Field. I'm using it to self-study right now and I highly recommend it. It really explains statistical concepts well and it's very easy to read. Although it does sacrifice a lot of mathematics, you could compensate for it when you take up your statistics subject.

I do have to say that I've already taken up Econ Statistics and Econometrics (I had a horrible time however). Also, I've taken up the R course in Coursera so I'm not sure if my experience with the book is the same as yours. Read a couple of chapters and see if it is to your liking.

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/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/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/brotherwayne · 4 pointsr/node

I was impressed with the author of Effective Javascript (link) when I heard him on the js jabber podcast.

u/jms_nh · 1 pointr/programming

Article doesn't tell you how, it's more like a handful of thoughts on how to do so, without any real data (as the author admits)

>But I think you should take more away than a handful of application-wide metrics. You should take away a preference for statistical and empirical consideration. Figure out how to quantify trends you observe and form hypotheses about how they impact code quality. Then do your best to measure them in terms of outcomes with the application. We lack a laboratory and we lack non-proprietary data, but that doesn’t stop us from taking the lessons of the scientific method and applying them as best we can.

Someone has already done this. Read chapters 8, 9, and 23 of Oram and Wilson's Making Software

u/HumanSuitcase · 1 pointr/learnprogramming

Don't, learn c. The C++ syntax was a little much for me as a novice programmer and some of the concepts available to C++ programmers overwhelmed me. I found K&R's "The C Programming Language" and had a much easier time. Of course this is my personal preference. The same author I linked to also has a C++ book. Regardless of the language, I feel he is very good at teaching languages in general.

u/roastymctoasty · 1 pointr/learnprogramming

Cool thanks, I'll try those then.

I thought it also might be worth working through this book: http://www.amazon.com/Pro-ASP-NET-Experts-Voice-ASP-Net/dp/1430265299

Have you heard much about it?

u/PatsysStone · 4 pointsr/statistics

Andy Field also has a book for learning statistics using R: https://www.amazon.com/Discovering-Statistics-Using-Andy-Field/dp/1446200469

I also recommend his book, it is quite a fun read.

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/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/CodeShaman · 1 pointr/java

I'm in the same position as you and I've taken up learning Ruby. I'm also really interested in Scala (this book is coming next week), but Ruby is an "easy to learn, and learn it right now" kind of language. Scala will take a bit of studying to get the hang of, even though I already have many projects in mind.

The appeal of Ruby comes from having to slog through Java all day and jump from this big multi-module mess of Java code from work in a big, ugly, slow, eclipse environment that's stuffed with plugins...

into this clean little SublimeText window with clean, small, easy-to-read Ruby code. It might not be offering me any technical solutions, but it's theraputic.

There's also Groovy, which is a JVM language that's sort of in-between Java and Scala. It's like poor-man's Scala and a lot of Java code translates into Groovy 1:1 and vice-versa. They're very similar.

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

If it is your first programming language then use:
http://www.introprogramming.info/english-intro-csharp-book/
book is free and will teach you basic programming technics, data structures and algorithms.

if you are not novice in programming and just need to get familiar with C# syntax then get any reference book like this one:
http://www.amazon.com/C-5-0-Nutshell-Definitive-Reference/dp/1449320104/ref=sr_1_1?s=books&ie=UTF8&qid=1421633975&sr=1-1

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

This is a good book. You will obviously need to have some understanding of assembly language for whatever platform you are interested in targeting (I am guessing x86?)

u/gospelwut · 0 pointsr/learnprogramming

If you're looking for a book, I was a pretty big fan of the Pro C# 2010 link, Pro ASP.NET 4 link, etc.

u/ehochx · 2 pointsr/cscareerquestions

I know at least one university that offers IT-security, but it's in Germany and the curriculum is in German. I'd say a CS degree with a strong foundation in C and Operating Systems can be enough to get your foot into the door. Personally, I'm mostly self-taught (lena151, the books listed below, reversing applications for the sake of learning) and plan on applying for related positions next year after graduation. Most employers will probably give you some on-site training anyways since there are hundreds of tools and techniques.

Reposting myself:

In case you're talking about reverse engineering, malware analysis etc.:

u/mlin6436 · 2 pointsr/scala

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

u/Insomn · 2 pointsr/dotnet

Think I solved this one on my own (well, actually started using Pro ASP MVC 5 that I bought last week), but wouldn't mind if someone feels like chiming in just to make sure my thinking's right.

The stock OOBE for MVC5, scaffolding controllers w/ EF bindings, is for when you want to get an MVP out ASAP, right? It'll work as is, but there's hella tight coupling between the MVC and EF, very opinionated, and for enterprise-level apps is generally regarded as a terrible idea.

If you want a loose coupling, and just throw everything off to Ninject to resolve you do have to implement the Repository Pattern yourself from the ground up?

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

For a complete beginner I would recommend Murach's C# 2010. It's not as well known as some other books, but I really like their format. The book uses this paired-page concept where the code, diagrams, pictures, etc. are in the right page and the explanation is on the left. Not to mention that they show you how to use the IDE, and give you a brief intro into GUI and DB programming.

For a more complete reference check Pro C# 2010.

u/lanedraex · 5 pointsr/csharp

If you are familiar with javascript and java, you probably should just go straight into a web framework book(assuming you want to do C# web development).

Grab a book on ASP.NET MVC 5 or ASP.NET Core MVC.

If you have trouble understanding the language basics on these books, then go back and watch the MVA series and skip the things that you already know.

You can probably find some good resources on Pluralsight as well, if you want video stuff.

Searching the internet you will find many Microsoft code samples, so if you are familiar with web frameworks in general, maybe you can just dive into these samples.

u/CaptainBlood · 3 pointsr/dotnet

The default recommendation seems to be Adam Freeman's Pro ASP.NET MVC books from APress. It's what I chose and I think it does a great job.

http://www.amazon.com/Pro-ASP-NET-Experts-Voice-ASP-Net/dp/1430265299

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/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/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/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/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