(Part 2) Best software design & engeneering books according to redditors
We found 4,058 Reddit comments discussing the best software design & engeneering books. We ranked the 766 resulting products by number of redditors who mentioned them. Here are the products ranked 21-40. You can also go back to the previous section.
Literally dozens of studies. Source: Rapid Development: Taming Wild Software Schedules. I don't have the book on hand anymore, but I only read half of it, and there are endless studies over decades sources and analyzed. The science universally shows that crunch is counter to productivity.
A shorter (and better) version of the talk is online at http://software-carpentry.org/4_0/softeng/ebse/. If you want to keep up with the latest in empirical studies of programming, check out http://www.neverworkintheory.org/ (where we're blogging once or twice a week about recent findings), or have a look at our book "Making Software" (http://www.amazon.com/Making-Software-Really-Works-Believe/dp/0596808321) which collects the most important findings, and the evidence behind them.
On mobile but this is copied and pasted from a comment I made awhile back.
Most of my personal R code for spatial analysis is largely uncommented but I will share some resources I base a lot it off of.
Books:
Websites:
Rpubs:
Python:
Edit: I used to work in public health academia so the links are geared towards that field.
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.
Yep. It's been a while, but I think the process you're talking about is all documented in Rapid Development from when McConnell was at Microsoft. I think it was called "Spiral"?
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!
For a stats program, I recommend learning R. It's free and powerful. No need to worry or wonder whether your university will have a license, as you would for SPSS, SAS, STATA, etc.
If you really have no stats background, you might find Andy Field's popular book series Discovering Statistics to be a good place to start. He's re-written this for several stats programs, but you'd want the one called Discovering Statistics Using R. That should be plenty to keep you busy. If not, then go a bit more into factor analysis, structural equation modeling, and Bayesian statistics.
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:
Good luck in your new position!
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!
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. :)
> I know programming
I have a checklist I usually bring out at this point :) You should know:
If you confident you have all this you'll probably want to start learning about design patterns and decoupling techniques. This free online book is amazing, and I would recommend it to everyone:).
Other books like Clean Code and The Art of Unit Testing have helped me a lot too.
With coding, it because more about creating code that is easy to change. I would also recommend using StrangIoc along with MVC to achieve decoupled, clean code:)
Can't speak for the whole subreddit, but my personal hatred towards him comes from Martin being a snake-oil salesman.
Take his 3 "laws of TDD". Advertised as a practice equivalent to doctors washing their hands, results in horrible and unmaintainable test suites (I've seen plenty of tests whose idiocy couldn't be explained other way than those rules)
Take his "architecture" lectures. Advocating programming in ruby on rails while abstracting away everything about rails or the web or the database, or anything you didn't define yourself. In principle to enable testing and be able to run the code outside the web. In practice: https://youtu.be/tg5RFeSfBM4?t=299 The lecturer says that the architecture in practice is "horribly complicated" and that Bob had only a single implementation of the architecture, which he couldn't share. That didn't stop him from continuing with his lectures.
Take his blogposts (an example: http://blog.cleancoder.com/uncle-bob/2017/03/03/TDD-Harms-Architecture.html) Awful strawmans (this terrible architecture i drew is what you propose), cringeworthy writing style (lengthy discussions with made up opposition instead of real one). Unfalsifiable theories: "Is is only programmers, not TDD, that can do harm to designs and architectures.". That sentence is always true, either you succeeded and therfore TDD works, or you failed and TDD had nothing to do with it. No data to backup his claims "TDD works." - well there are plenty of publications that disagree (see chapter 12. of https://www.amazon.com/Making-Software-Really-Works-Believe/dp/0596808321)
Take his SOLID principles. While some of them are well defined and can be applied meaningfully (Liskov substitution principle), the Single Responsibility Principle has definition so weak and useless it's ridiculous.
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
In addition to Effective Modern C++ I'm also going to recommend The C++ Standard Library: A Tutorial and Reference and C++ Concurrency in Action: Practical Multithreading.
I would suggest starting with C++ since it has classes and beginners seem to grasp classes pretty easily.
a. Download Visual Studio Express if you're on Windows, CodeBlocks if you're on Linux, or Xcode if you're on Mac.
C Interfaces and Implementations has some decent advice for designing C programs. This is also a skill which you 'll develop with time (e.g. over your entire career) so don't worry too much about figuring it out immediately; it requires experience. As you work on various projects you'll get a sense for what works and what doesn't so that over time you'll have developed strategies for solving particular types of problems.
OOP concepts are still valid even though C may not have ways to necessarily implement them within the language proper. Object-Oriented Software Construction is a fantastic book for learning OOP concepts. As your C experience grows, you'll begin to see ways of implementing some of those design strategies with C, even though it's not an OO language.
Knowing when to use what type of data structure can also aid in simplifying your code base. The standard book for this is CLRS, but for C specific implementations and advice, see Algorithms in C.
Meta-analysis of over thirty studies found no consistent effect from TDD. One clear finding was that the better the study, the weaker the signal.
Greg Wilson's lecture: http://vimeo.com/9270320
and book http://www.amazon.com/Making-Software-Really-Works-Believe/dp/0596808321
Wilson's post about the subject: http://www.neverworkintheory.org/?p=139
>I’m still not sure what to think about test-driven development. On the one hand, I feel that it helps me program better—and feel that strongly enough that I teach TDD in courses. On the other hand, studies like this one, and the other summarized in Erdogmus et al’s chapter in Making Software, seem to show that the benefits are illusory. That might mean that we’re measuring the wrong thing, but I’m still waiting for one of TDD’s advocates to say how we’d measure the right thing.
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
You've already done the first step: admitting that college can only teach the fundamentals while the rest of the things you need to know, you will learn while working.
With that out of the way, here's the next step: apply the Joel Test to your new employer.
If it gets an 11 or 12, you'll be fine. Find a senior developer there to mentor you and you'll be a decent software engineer in 1 - 2 years.
Otherwise, while you might learn a lot of new stuff in your first job, they might be inadequate, outdated, or outright incorrect. In this case, plan an exit strategy ASAP so that you can leave to another company that has a much higher score in the Joel Test. In this fast paced software industry, it makes no sense to spend 5 years in a company where you'd only get to grow the same amount as another guy who just spent 6 months in a better company.
Next step: read. No, not those "Teach yourself [insert language that will be deprecated in 2 years] in 24 hours" books - find the books that teach software engineering, lessons that don't get outdated. Here's the usual suggestions:
Finally, if you have free time, find a local user group or open source community and join them. Not only will you learn fundamentals like version control and automated testing, you'll also be up to date to the latest trends in the industry. Because of this, high school/college students who are active in these communities have a great advantage over their purely academic classmates, not to mention the connections they get in the industry allow them to be employed faster.
For reverse engineering:
For malware analysis and malware techniques
For programming
This should be enough for you to get started.
The Art of Unit Testing: with examples in C#
(Copy pasting from other thread).
I stand by this JS roadmap, especially because I tested so many different free courses online (and subsequently wasted a bunch of time).
Rithm (https://www.rithmschool.com/courses)
Eloquent JS (http://eloquentjavascript.net/)
Secrets of a JS Ninja (https://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X)
Finally, if you supplement all this with Codewars (https://www.codewars.com/ , allows you a bunch of puzzles/katas to check your level as you progress; great because you can go back and see how your skills have actually improved, you'll definitely cringe at some of your old code, ha), it's a pretty fucking awesome roadmap to get you from 0 to advanced, though like most things it'll take a lot of work.
I've also heard good things about Free Code Camp, though I've only checked it out briefly so I can't give in-depth comments on it.
Hit me up if you have questions, always down to help others get started.
Pro ASP.NET MVC 5 (https://www.amazon.com/gp/aw/d/1430265299) is an excellent book for getting started with the web side of .NET.
For C#, it depends: do you have any experience with other languages?
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.
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
You must learn an application heavy book in 2018. Preferably in R unless you can program, in that case maybe Python.
I will link you two perfect books with very little math that people from any discipline can understand and are very well written. Both heavy on application in R with accompanying websites with all the code. (dont worry, R code is easy and the vast majority of R users are not programmers in the traditional sense). The first book I link does go into some more advanced topics, but everything is explained in a very common language. Its accompanying website also has lecture videos from the prof who wrote it.
https://www.amazon.com/Discovering-Statistics-Using-Andy-Field/dp/1446200469
^^ I emailed andy some time ago and he wants to release edition 2 next year probably
https://www.amazon.com/Understanding-Applying-Basic-Statistical-Methods/dp/1119061393
Trust me, these two books are what you want to look into.
NOTE some idiot is going to try to suggest to you a book called "Introduction to statistical learning" (mainly a supervised machine-learning book which is stats-focused) by the standford stats team. Do not start with this book if you want to learn traditional stats (like you point out in your post). No one who recommends you this book has considered your needs. I see this recommended every single day for all the wrong reasons. It actually makes me frustrated. It's a great book but has confused many people because of its name. Is it a stats book? Yeah. Is it an ML book, yeah? Is it a traditional stats book? Nope. Anything that says "_____ learning" is probably a machine learning book. Sorry for the rant.
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...
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.
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
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.1. r/dailyprogrammer (easy, intermediate and advanced challenges) (an easy challenge example)
6.2. mega project list
From NAND to tetris ( build a general-purpose computer system from the ground up) (part1 and part2 on coursera)
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.
Yea, I actually recommended one in the post above. Here's a direct link though
I'm recommending this only because it's the one book on the topic that I've read and it was really good. There's others too, like this one, but I haven't read them so I can't comment.
Any book about reverse engineering can only teach you the most basic things. But it teaches you enough that once you're on your own, you aren't lost. If you want to develop the skills further, just start disassembling OS functions and figuring out how they work.
Another book that's tangentially related is this one. It isn't about reverse engineering specifically, but rather about debugging (usually without source code), which is obviously a critical skill.
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:
Hands On:
Courses:
Tons of courses on youtube. I learn well from visual, so I recommend these youtube videos:
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.
I found this book to be incredibly helpful: https://www.amazon.com/Art-Unit-Testing-examples/dp/1617290890/ref=sr_1_1?ie=UTF8&qid=1500721325&sr=8-1
It's not so much about Test Driven Development, but focuses more about how to organize and write unit tests and fakes. Has a lot of discussions pro and con regarding things you may run into. It also compares unit testing frameworks. Keep in mind that the book is over three years old now, so those comparisons may or may not hold up as well anymore. Doesn't detract from the rest of the book though.
Here is my list if you need to become a good programmer with Python as your language of choice.
Follow this order for rigorous course on learning Python thoroughly.
By the end, you will be famished but you will have a very solid base to understand and design code for complex systems. To get more hands on experience, start with any popular open source project and delve into the source code. Don't start with the master branch of the codebase, start the version 1 tag of the codebase and progress through the next version tags and check for changelog and move on.
E.g mitsuhiko/flask
Finally you will have a solid understanding of Python as well as how objects communicate behaviors.
C++ is the language used! It's not too hard of a class if you have any programming experience. And even if you don't it's not bad, it's meant to teach you the basics. I went through some of this book he summer before and learned almost everything we did in that class ahead of time and it made it a breeze! Good luck!
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.
Here are a few of my favorites:
Design patterns:
The JavaScript language:
And as a general language reference, MDN is the best: https://developer.mozilla.org/en-US/
Hope that helps!
Steps to build your own engine from scratch with no knowledge:
Note: Most people who decide to put together a voxel engine take about 2 years from inception. At the end of the two years, they will have a library they could use to create a game. They've also already made it through the first 4 steps when they start.
Without a degree program to solidify the concepts, I suspect that the first 4 steps will take at least 2-3 years: about 10-20 hours per week each week.
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.
It's very difficult to answer your question in a single post. You should know the basics of Java of course but what you will be able to do will be limited by what you know. I suggest picking up a book and using online resources and just jump in, get started! You'll learn along the way.
Book that helped me a lot:
http://www.amazon.com/Professional-Android-4-Application-Development/dp/1118102274/ref=sr_1_1?ie=UTF8&qid=1409582592&sr=8-1&keywords=professional+android+development
and Android development ground zero:
http://developer.android.com/index.html
I'm a big fan of JavaScript: The Good Parts. I'm not sure if it is quite intermediate, but it is a terrific (and short) read.
Secrets of the JavaScript Ninja is a bit more advanced. It's written by the guy who created jQuery. I found some of the coding style to be sort of strange, but it does have a lot of great information.
Some resources which will indirectly help you for GREM
https://amzn.com/1593272901
https://amzn.com/1118787315
https://amzn.com/1593272898
Um... that's what the 2012 book Secrets of the JavaScript Ninja is all about. It chronicles Intel's development of the Core 2 architecture, their first to have JS inside, which enabled them to give AMD a trashing they have still not recovered from.
Advanced
Medium
Old, but probably still relevant
Yet to be released, but you can get the in progress pdf from the publisher
Docs
The one that everybody recommends
HTML5 spec
HTML5Rocks
Latest Webkit News
Other than that build build build. Make demos and play. Ask questions here or on stackoverflow and read other people's code. Also, lots of great old JSConf videos out there.
Fui monitor de web na facul. hoje trabalho mais com backend em nodejs. Javascript é a base e sempre vale a pena ter os fundamentos bem sólidos. Gosto deste livro, baixe aqui.
Com githubpages você consegue ir longe e de graça, meio que já é o padrão do desenvolvedor ter o seu portfólio ai. Você faz seu site estático e hospeda nesse lugar. Github é um site que fornece serviço de git, que é tipo um dropbox pra código. Vale muito a pena, dai tu compra um domínio por 40 reais e bota um email nele de graça.
Pra ajudar no básico o w3schools é bom, mas o MDN é melhor. Acho que depois de html e antes de um framework como react, seria legal alguma coisa de css, como bootstrap ou bulma. Eles te ajudam com componentes e estruturas visuais pro site.
O quanto você sabe de photoshop/ilustrator? Se você tem um bom senso estético talvez valha a pena ficar na parte de design, requisitos de usuário, prototipagem. Se gostar de animação e svg estas bibliotecas vão acabar te ensinando muito sobre frontend:
A parte de SEO e adsense também seria outro caminho interessante pra seguir. Talvez por ter formação com produção audiovisual você saia na vantagem. Mas eu não entendo muito, nem tenho links...
​
Minha sugestão mais prática, abre um github e faça umas página estática utilizando o bulma. Aprenda grid/layout e inputs/form, tente clonar uma calculadora. Depois mire em algum framework maior, como angular, react ou vue.
The Big Nerd Ranch book on Objective-C and then iOS Programming enabled me of the past couple months to become a very adept and capable iOS Programmer. I highly recommend them:
http://www.amazon.com/Objective-C-Programming-Ranch-Edition-Guides/dp/032194206X/ref=sr_1_2?ie=UTF8&qid=1406161255&sr=8-2&keywords=big+nerd+ranch
http://www.amazon.com/iOS-Programming-Ranch-Edition-Guides/dp/0321942051/ref=sr_1_1?ie=UTF8&qid=1406161268&sr=8-1&keywords=big+nerd+ranch
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:
> there are real studies
have you read http://www.amazon.com/Making-Software-Really-Works-Believe/dp/0596808321 ? It's really interesting.
I personally thought Pro C# and the .NET 4 Platform was pretty good, but most people would turn you to C# In-Depth simply because it's by Jon Skeet, which is sound reasoning in and of itself.
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.
I have an excellent statistics text book that I am using to learn stats: Discovering Statistics Using R by Andy Field. My approach is to do the exercise in R first, then try to reproduce the same result in Python. It's slow going, but it's a real learning experience.
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).
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
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).
You absolutely should make it modular, it just takes some different techniques to do it. C Interfaces and Implementations covers that topic in some depth.
> 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:
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.
My recommendations for intermediate js devs:
>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.
"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.
10000 limit again. Reserving this comment for the Programming section:
PROGRAMMING
Gray Hat Python: Python Programming for Hackers and Reverse Engineers
Beginning Python
The Python Standard Library by Example (Developer's Library)
Shell Scripting
Shell Scripting Recipes: A Problem-Solution Approach
Linux Command Line and Shell Scripting Bible, Second Edition
Wicked Cool Shell Scripts
sed & awk (2nd Edition)
The Ruby Programming Language
Beginning Ruby: From Novice to Professional
Ruby on Rails 3 Tutorial: Learn Rails by Example
Agile Web Development with Rails
Automating Microsoft Windows Server 2008 R2 with Windows PowerShell 2.0
Pragmatic Guide to Subversion
Programming Perl
C++ Primer Plus
The AWK Programming Language thanks sjhill
Modern Perl thanks three18ti
High-Order Perl thanks three18ti
The Art of Scalability thanks mr_chip
Scalability Rules thanks mr_chip
Continuous Delivery thanks mr_chip
The Varnish Book thanks mr_chip
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
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.
I think maybe The Ruby Programming Language would be as close to K&R for ruby that you could get. Unless someone has something better.
As others had said, talk to another developer to see if it is even possible to make another Facebook app.
Other than that, if you have absolutely NO programming experience, learn the basics of Java first. I didn't have too much experience in Java, per se, but I was well versed in Python and Perl so picking up another language wasn't difficult.
Once you have Java down, you could do a few things. First and foremost, definitely go here and follow the steps to download everything you'll need, as well as the beginners guide to making your first app which will explain the basics of how android works. The videos from The New Boston didn't help me all that much, but if you want to take a look it wouldn't hurt. If you want a book, I would definitely get this one. It's written by Googles tech lead for android developer relations, and it will explain everything android to you.
Other than that, just think of basic applications, such as a calculator, photo viewer, stopwatch, etc, and just make them with the help of stack overflow and googles documentation on android.
Good luck!
I thought Pro C# 2010 and the .NET 4 Framework was really good.
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.
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.
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.
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.
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!
I've posted this before but I'll repost it here:
Now in terms of the question that you ask in the title - this is what I recommend:
Job Interview Prep
Junior Software Engineer Reading List
Read This First
Fundementals
Understanding Professional Software Environments
Mentality
History
Mid Level Software Engineer Reading List
Read This First
Fundementals
Software Design
Software Engineering Skill Sets
Databases
User Experience
Mentality
History
Specialist Skills
In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.
chrome runs at user app level. it's not running in kernal space with rootkit-like functionality.
Google going out of there way to try and illegally spy on you is crazy. simply because any interested party can go and grab a copy of IDA pro and slap it onto chrome right now and do live disassemble the code base as it's running. Watch the stack calls, view library calls, and view network traffic.
But if the overly paranode type. Then go an investigate for yourself you have access to the tools and the books to self-learn the skills need to do so. Here a good jumping off point
http://out7.hex-rays.com/demo/request < request a trail evulation of ida pro
read this
https://www.amazon.ca/Reversing-Secrets-Engineering-Eldad-Eilam/dp/0764574817
this
https://www.amazon.ca/IDA-Pro-Book-Unofficial-Disassembler/dp/1593272898
and finally this
https://www.apress.com/gp/book/9781484200650
https://www.amazon.com/Art-Unit-Testing-examples/dp/1617290890
Here are my top three:
http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742
http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X
http://www.amazon.com/Eloquent-JavaScript-Modern-Introduction-Programming/dp/1593272820
Formatted version: (with a few edits)
>I am pretty new to this sub so excuse me if I go against the rules or formatting in any way.
>I am currently at a community college in NYC, majoring in Computer Science. Since I was a kid I was always fascinated by computers, how they worked and functioned. I always would tinker with the hardware or software. I even ran my own private server for WOW at the time (a big deal to me at that age).
>I entered college knowing I wanted to do computer science and I knew it dealt with a lot [of topics], not just coding or programming. When I got the prerequisites out of the way I was able to finally take a class that dealt with programming--intro to computer science--which aimed to ease you into coding through basic C++. My first week I was really happy and into it because I understood what was going on. I was ecstatic that I was actually doing some form of coding, basic or not.
>As the course progressed, I started to get lost and not understand anything. At that point I had no idea what was going on and before I knew it I had an F in the class. I talked to many people who had taken my professor before and not a single person said he's a good teacher. I have only heard negatives things about him, which is not an excuse for me to get an F in the class, but I told myself that I will retake the class and do my best next semester. (Btw if you are wondering all we did in that class was program the nim game and perfect it over and over.)
>Fast forward to next semester and I feel lost again although this time I put a lot of effort into the class and spent countless hours reading the book on my own and trying to teach myself. I even asked for help on /r/learnprograming and while I got lots of help there, I still could not understand many things. My main problem was that [even though] I could read the code and understand it, but I had a very tough time trying to write code for a specific problem, which seems to be a very common problem for many beginners. I messed up a lot in the class but at the end I received a B-, which is ok but I feel like I came out of the class without having learned anything.
>To make matters worse I start the advanced C++ course this fall and I'm terrified. To give more insight about my other teacher, he's very good at the lecture portion of the class but when it came to lab (where we actually did coding) he would give us a problem and just sit there at his desk. There were a lot of people who had problems with the class and a handful who knew what they were doing. Toward the end of the semester he told us that the college's program was very underfunded and that the photography major had more funding. He also told us that he disliked coding but was teaching it to us anyway.
>Sorry if this is dragging on or I'm not getting to my point quick enough but I wanted to give context to my current situation. So far from my experience with those two courses I feel very discouraged and scared. I have had the thought of switching majors countless times but I don't want to give up on CS. I am contemplating computer engineering because it combines computer science with electrical engineering. I will not only be coding, but working on hardware as well, which sounds like the best of both worlds to me. Then I think, if I can barely even make it in CS what makes me think I'll be able to do something harder?
>I am very scared for my future and just feel lost. I have contemplated switching to music production or audio engineering but those are only hobbies that I practice in my free time and I don't see much money there. I feel very scared as well that even if I manage to get a bachelors that I will just be sitting in a desk all day long killing myself and not having some sort of fun with my career, afraid that it will be a burnout job which a lot of people told me. Although I do understand that this all depends on the job you work in and the type of programs you write, as well as how much you even like programming to begin with.
>I apologize for this very long post but I guess I needed to vent and seek advice, also sorry if this is also poorly written as I am writing this in a rush because I need to go somewhere. To give further information I was using this book.
(I'm just watching an old episode of Mad Men with friends so I figured formatting this would be semi-productive.)
I used the first edition of this book years ago, the summer before university, and it helped me learn a lot of the basics.
I think Uncle Bob's PPP Book is the original book from 2002. May be more options by now though.
Right. But don't be so quick to judge. =)
The issue is that there isn't anything much better out there. A lot of the issues with teaching C is C itself.
C it a very simple language, maybe too simple. A lot of the safety in C is difficult because C doesn't give you anything to get that right. The solution to this is being very good at it, know what you're doing and avoid the problems. Modularity barely is possible in C (it is only through simple means). Dynamicity is a pain. All of these things that other languages simply support out of the box, you have to go through major hops in C so you get them.
From what I understand, most uses of C today only exist when nothing else is applicable. That is, when they really need the sort of benefits you get from using C, because the language itself isn't that great.
You could write whole books on getting modularity right in C, on getting dynamicity right in C, on getting security right in C, and so forth. And in fact there are:
It goes on and on and on. The C standard library is extremely thin (in comparison to everything out there). How can K&R2 teach you how to write highly sophisticated programs if the most advanced stuff in the standard library is sorting? I'm being a bit simplistic in this argument, but it's not so much distant from the truth.
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.
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&amp;qid=1484332390&amp;sr=8-25&amp;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.
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.
I was impressed with the author of Effective Javascript (link) when I heard him on the js jabber podcast.
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
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.
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.
I've never read the book you mentioned, but for me getting started with Android was a combination of The Commonsware Series, Reto Meier's book, and Lynda's Java Beginners series.
However, I did have a little more than a basic understanding of Java.
If you are proficient with another programming language (or programming in general) i really recommend Andrew Troelsen's Pro C# 2010 and the .NET 4 Platform.
It's really big but I think it is worth every penny.
Two books that I thought were good:
Pro ASP.NET MVC
Professional ASP.NET
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
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.
field's "introduction to statistics using R" is the best book for my money.
EDIT: sorry I got the title wrong:
https://www.amazon.com/Discovering-Statistics-Using-Andy-Field/dp/1446200469
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.
Head First C# is a great book. That, and C# in a Nutshell taught me everything I needed to know.
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").
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!
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.
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&amp;qid=1451828712&amp;sr=8-1&amp;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.
Kilo, A Text Editor
Build your own Lisp introduction to C
Architecture of Open Source Applications Not sure which are in C
Lion's Commentary on Unix pre-K&R C
Compiler Design in C some low-level stuff
C Interfaces and Implementations (amazon link)
I haven't read any of these, but they're highly recommended.
Do you mean "C Interfaces and Implementations: Techniques for Creating Reusable Software by David R. Hanson"?
Or perhaps "C Programming: A Modern Approach, 2nd Edition by K. N. King"?
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:
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.
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.
I personally prefer his The C++ Programming Language over this book as a reference for C++ and The C++ Standard Library: A Tutorial and Reference as a reference to STL. This one feels to me a bit more of a beginner book, still a very good read though!
http://www.amazon.com/Programming-Objective-C-4th-Developers-Library/dp/0321811909
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.
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.
Crockford, then Effective Javascript, then the Resig above, then you branch out into your interests.
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
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.
If you're looking for a straight reference book on Ruby and you know how to program, I find that "The Ruby Programming Language" is better than the pickaxe, but it all comes down to personal preference. Both are excellent books.
http://www.amazon.com/Ruby-Programming-Language-David-Flanagan/dp/0596516177/ref=sr_1_1?ie=UTF8&amp;qid=1289253722&amp;sr=8-1
The book that he takes about that was about to be published is here:
http://www.amazon.com/Making-Software-Really-Works-Believe/dp/0596808321
Yeah and let's be honest; how many books are irrelevant as quickly as they are published (especially for fast-moving topics like Android and iOS). Often the book is dated before it even hits the shelves for these types of topics. To be clear, I'm not saying there isn't any value in books (I often recommend Professional Android 4). Just that often other resources are often better suited for rapidly changing topics.
http://www.amazon.com/Professional-Android-Application-Development-Guides/dp/1118102274/ref=sr_1_1?ie=UTF8&amp;qid=1347571912&amp;sr=8-1&amp;keywords=professional+android
That would be my suggestion, used it myself learned a lot as well.
Start here: http://appinventor.mit.edu/
Then, move to here: http://www.amazon.com/Professional-Android-Application-Development-Guides/dp/1118102274/
Then, get help here:
Pro Asp.Net MVC is a decent book that will walk you through building a functioning site from scratch.
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
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).
Second Tabachnik & Fiddle along with Hunter & Schmidt
Rogelberg's IO Handbook
Brannick & Levine's JA text
HLM - Raudennbush & Bryk
Ployhart et al's Staffing Organizations
I have lots of other O-oriented things, but those will depend on your specific area.
Edit: This!
> 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.
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.
I found Andy Field's Discovering Statistics Using R to be quite helpful.
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
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.
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.
> https://www.amazon.com/Python-Cookbook-Third-David-Beazley/dp/1449340377
> Also start watching every video David Beazley has on YouTube. You won’t regret it.
Got it!
https://www.amazon.com/Python-Cookbook-Third-David-Beazley/dp/1449340377
Also start watching every video David Beazley has on YouTube. You won’t regret it.
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.
here you go
For game DESIGN, I personally like A Book of Lenses and Rules of Play. I didn't get much out of Theory of Fun, and the internet seems to like Level Up! but I haven't read it.
And none of those teach you really about game DEVELOPMENT -- the process, gameplay architecture philosophies, the pipelines, the team structures, the milestones, the industry jargon. The closest I've seen to that is having a games producer de-code chapters of Rapid Development for how it relates to games, back before I joined the industry and had my trial by fire. :)
Do you know what kind/platform/genre of game you're making, and what size the team is?
In case you're talking about reverse engineering, malware analysis etc.:
The only book I could really recommend for learning TDD is The Art of Unit Testing: with examples in C#, 2nd Edition
Personally, I've found this book to be pretty good. It assumes knowledge of Python but does not assume knowledge of OOP.
Samurai, apparently.
Personally I wouldn't mind if == never did implicit casting and acted like === (in fact I wish it did), but the rules don't seem that bad to me.
The example I gave was very contrived, and solution was naive, the best way to compare two arrays to each other would be to loop through them, like this. What I was doing was showing you how you'd take advantage of the implicit casting.
I think it was in John Resigs book where I read the best advice I have seen for JavaScript and it went something like "Treat everything as if it was an object and use === unless you need to use ==".
Also never use the wrapper objects if you can help it. Let the interpreter use them in auto-boxing and leave them alone. Because you are 100% right, things can get a bit weird then.
If you are new to programming it is better to take another approach. You should choose your specialization first (game development, web, data mining or something else). Second try to solve problems in that area and use C# for this. For example if your choice is game development then search for books “how to make games with C#”.
If you cannot decide where to go with c# I recommend book: http://www.nakov.com/blog/2014/01/13/free-programming-book-csharp-fundamentals-nakov-presentations-slides-videos-lessons-exercises-tutorial/
It has lots of exercises and will teach you not only C# syntax but also basic programming techniques like OOP principles, algorithms and data structures.
If you already know any programming language then any C# reference book will be sufficient. For example http://www.amazon.com/C-5-0-Nutshell-Definitive-Reference/dp/1449320104/ref=asap_bc?ie=UTF8
I like Effective C#. Also worth taking a look at are C# 5.0 in a Nutshell and Beginning C# Object-Oriented Programming.
C# 5.0 in a Nutshell might be what you are looking for. It's more of a reference than a tutorial, and if you don't know Java I'm not sure how hard picking up C# syntax will be (disclaimer: I don't program in C# and haven't coded a single line of Java since it was required in a High School class).
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.
> 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.
EDIT: I added Programming Interviews Exposed because it's a good reference for data structures, algorithms, and interview questions
I agree. 50 dollars can get you a 2000 page reference book. Hell 30 dollars can get you a nutshell book http://www.amazon.com/5-0-Nutshell-The-Definitive-Reference/dp/1449320104/ref=pd_sim_b_1
But with StackOverflow & great MSDN documentation is there a real need for books that gather dust?
Oh, definitely learn the correct Python 3 idioms. You might want to augment your learning resources with the latest edition of The Python Cookbook which has been updated to Python 3. It's not free but well worth the price!
If anyone's interested, Dave Beazley's Python Cookbook (Amazon Link ) has a recipe on implementing multiple dispatch via decorators. This is really just an example to illustrate complex decorator use, so I wouldn't recommend it. But it's possible (and clever)
I've read about this practice in Rapid Development, used as a motivator. I have no firsthand experience with the practice as it's described in RD but it I expect that it's not as awful as all that.
As described in RD, the manager offers the project to the engineers from the standpoint of a challenge: "here's this thing we want to build, it has [x] requirements, we need it done, who is in?" The manager then must leave it up to the engineers as to whether or not they wish to participate. It stands to reason that this procedure can't be used in all contexts, for example, successful implementation usually results in a loss of management control and progress visibility. The takeaway is offering people a chance to be a part of something interesting is a powerful motivator.
Note: I just reviewed the chapter in RD and it uses The Soul of a New Machine as a reference.
I was in a very similar situation, and read many of the books poeir wrote up. However, the one I found the most helpful was Steve McConnell's Rapid Development.
At least make sure you borrow it from your library and read the part about classic mistakes.
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:
Forensics:
Reverse Engineering (Dynamic and Static):
I know there’s not a lot of certs here, and unfortunately, that’s how it is across the blue team. Certs here are usually very vendor-specific, and not applicable to defense as a whole. Those certifications exist, but I’m not listing them here.
If people are interested, I can also do a similar write-up on Mobile Forensics and Cloud Forensics (which is my direct background).
Lastly, here are some of my favorite news sources across the InfoSec community -
News Sources
Interesting!
Looks to me that you can "feel" what good code looks like but you're not able to rationalise it enough for you to write it on your own.
Couple of suggestions:
When you see elegant code, ask yourself: why is it elegant? Is it because is simple? Easy to understand? Try to recognise the desired attributes so you can try to reproduce on your code.
Try to write really short classes/methods that have only one responsibility. For more about this, search for Single Responsibility Principle.
How familiar are you with unit testing and TDD? It should help you a lot to write better designed code.
Some other resources:
I'd recommend the basics from searching around, maybe checking out a video on youtube. Figure out how to setup a project using MSTest and one using NUnit (maybe XUnit as well). Do a basic TDD Kata (fizz buzz, etc).
Learn about using fakes/mocks/stubs (NSubstitute is good).
C# Specific book, new version out in November:
The Art of Unit Testing: With Examples in .NET
Get the pre-release here if you want:
The Art of Unit Testing: With Examples in .NET
Can absolutely recommend the The Art of Unit Testing!
I would look into IPython. Not that it's a book, but that's what most (all - hopefully) scientists use. And that's what you sound like you'll be using Python for.
As far as a book that focuses on Objected Oriented theory and applications? Not a clue. Maybe this? http://www.amazon.com/Python-3-Object-Oriented-Programming/dp/1849511268
I would suggest looking for an open source project and studying its design.
related question- I inherited a couple books, I could use some advice.
I'm about 2/3 through Think Python, I am working through the University of Michigan Programming for Everybody course (and the book: Python for Informatics) and the Rice University An Introduction to Interactive Programming in Python Part 2 (both on Coursera)
I inherited Introducing Python, Fluent Python, Python 3 Object Oriented Programming, and Effective Python
Which one should I jump into after I finish Think Python?
Not a tutorial: Python 3 Object-oriented Programming
O'Reilly texts generally have a good reputation. If you want to learn bash scripting it's probably a good place to get started. I personally have never read a BASH scripting book so I cannot comment.
Once you have gained some basic scripting skills and knowledge of some of the LINUX/UNIX power tools (sed, awk, grep, flow control, etc), I would suggest taking a look at the following wiki pages:
The wiki pages I listed are very good but they lack information regarding common commands (sed, awk, grep, cat, echo, printf, join, paste, etc)
For python depending on how far ahead you are, I would suggest Automate the Boring Stuff with Python and/or Python Crash Course. Skimming through them, Automate the Boring Stuff with Python is a quick introduction to some things you can do. Python Crash Course is a more complete/learn the language type book.
If you feel you are becoming more advanced in Python, I would suggest picking up a copy of:
The above book was recommended to me by a developer and I feel I learned a lot from it when I was trying to take my python skills to the next level (especially coming from a background in functional programming).
Secrets of the Javascript Ninja
I would check out Secrets of the JavaScript Ninja
It's a great book if you are coming from a different programming language to JavaScript. The syntax of JavaScript may feel familiar but don't be fooled. Javascript has many different quirks, that you should wrap your head around in order to write "good" JavaScript.
If you want a great beginner book on C++ I recommend "C++ Without Fear"
http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445
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.
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
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
It will get tougher just stick with it. I just pulled my copy out to figure about where you were. Another book I recommend owning is this one:
http://www.amazon.com/The-Standard-Library-Tutorial-Reference/dp/0321623215/ref=dp_ob_title_bk
Actually if you PM me, I'll give you my email or skype so you can ask questions.
> 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.
One possibility (available on the 9th): http://www.amazon.com/The-Standard-Library-Tutorial-Reference/dp/0321623215/ref=dp_ob_title_bk
The only potential problem is that the author had an interview recently that put serious question on the quality of the work done. So I would wait and see. The present book is really good though.
If you are asking about the C++ Standard Library, the answer is "read a book" (or several books), such as this excellent one.
Two book suggestions:
I'd strongly recommend getting at least the first book.
Since you're moving off MMF2, you might also want to have a look at Game Engine Architecture for something game-development specific. You'd eventually want to pick a game engine to use or write your own.
Programming in Objective-C by Stephen Kochan
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.
I would get a good reference book on objective-c like: http://www.amazon.co.uk/Programming-Objective-C-Automatic-Reference-Developers/dp/0321811909/ref=sr_1_5?s=books&amp;ie=UTF8&amp;qid=1367517200&amp;sr=1-5&amp;keywords=ios+programming
Maybe try some Cocos-2d game development (features on Ray's site)?
Also, maybe try creating some utility apps such as the standard shopping / things to do list app to get a good foundation in table views and storing data.
stackoverflow.com is a good FAQ type site with lots of questions on which you may find useful while you are developing.
icodeblog has some good info on, although it's not updated as much as it used to be - http://www.icodeblog.com/category/tutorials/
I've just come across this site (parse) which seems to have some good tutorials with downloadable code https://www.parse.com/tutorials which you might want to look at.
Also tuts+ http://mobile.tutsplus.com/category/tutorials/iphone/
maniacdev http://maniacdev.com/category/ios-developer-tutorial
may be of some use? http://docs.xamarin.com/guides/ios
edumobile http://www.edumobile.org/iphone/
ioscreator http://ioscreator.com
I've been learning ObjC on own for a bit now. I took a two-pron approach. I am reading this book which covers ObjC basics and I am watching the Fall 2012 Stanford iOS courses on iTunes U. It's really got me going thus far. It also breaks the monotony of just reading a book, it feels like you are really in the class room.
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.
I found Effecive JavaScipt [1] to be the better and more up to date resource when I had to dive into javascript about 2 or 3 weeks ago.
[1] http://www.amazon.com/Effective-JavaScript-Specific-Software-Development/dp/0321812182
My coworkers and I have been slowly going through this book for a while now and we've all learned a lot.
Big Nerd Ranch Book for a student! Have a great weekend!
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. :)
In this order:
Codecademy: http://codecademy.com. Learn basics of programming.
Big Nerd Ranch Beginning Objective C Programming Guide
Big Nerd Ranch iOS Programming Guide
Treehouse: http://teamtreehouse.com.
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:
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.
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!
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.
These two are the most recommend for beginners
The Ruby Programming Language
Agile Web Development with Rails
More advanced topics:
Metaprogramming Ruby
The Rspec Book
Yeah so more of the kind of work this guy is doing:
https://www.youtube.com/watch?v=uEFrE6cgVNY
and greg wilson has a book that reviews this idea:
http://www.amazon.com/Making-Software-Really-Works-Believe/dp/0596808321
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"
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.
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.
"Pro C# 2010 And The .NET 4.0 Platform" by Troelsen.
£27.23 on amazon.
http://www.amazon.co.uk/Pro-2010-NET-4-0-Platform/dp/1430225491
Very thorough, in-depth, aimed at experienced programmers.
Covers C# and .NET, including CLI, CLR, and an overview of .NET libraries.
You need to pick up Pro C# 2010 And The .NET 4 Platform. Not only does it tell you how to use a database, it shows you the 3 options that are available (options as in methods).
i learned C# in 2008 by starting with 2008 version of this book.
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.
The ASP.NET website has quite a bit of materials.
For books, I'm a fan of this one
There are two good texts that I'd recommend, each have their own bright spots. Pro MVC 5 and Professional Asp.net MVC 5.
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?
There's tutorials and getting started links on the side bar. Start there. Then check out pluralsight. The following books are good. Consider getting Microsoft Certified at some point if you really want to.
http://smile.amazon.com/C-6-0-Nutshell-Definitive-Reference/dp/1491927062/ref=sr_1_2?ie=UTF8&amp;qid=1451614908&amp;sr=8-2&amp;keywords=C%23
http://smile.amazon.com/Pro-NET-Framework-Experts-Voice/dp/1430242337/ref=sr_1_1?ie=UTF8&amp;qid=1451614991&amp;sr=8-1&amp;keywords=pro+C%23
http://smile.amazon.com/Pro-ASP-NET-Experts-Voice-ASP-Net/dp/1430265299/ref=sr_1_4?ie=UTF8&amp;qid=1451614991&amp;sr=8-4&amp;keywords=pro+C%23
http://smile.amazon.com/C-6-0-NET-4-6-Framework/dp/1484213335/ref=sr_1_1?ie=UTF8&amp;qid=1451615074&amp;sr=8-1&amp;keywords=pro+C%23+6
There are a lot of brilliant .NET tutorials on PluralSight including it's own Track of 11 videos and more speciality sources (using .net mvc with angular and web api). It's expensive though.
When I started I found that this book really helped a lot.
https://www.amazon.co.uk/Pro-ASP-Net-MVC-Experts-Voice/dp/1430265299/ref=sr_1_1?ie=UTF8&amp;qid=1478025780&amp;sr=8-1&amp;keywords=asp.net+mvc
Seconding the Andy Field comment. http://www.amazon.com/Discovering-Statistics-Using-Andy-Field/dp/1446200469
I would second The Elements of Statistical Learning is a great text but it is not an entry level stats book. Maybe try Discovering Statistics Using R?
This is my favorite book. Easy to understand but deep http://www.amazon.com/5-0-Nutshell-The-Definitive-Reference/dp/1449320104
I used this book, C++ without fear, when learning C++ at school
https://www.amazon.com/Without-Fear-Beginners-Guide-Makes/dp/0132673266
its a good book for learning C++, its a bit dated but its good for starters. After that you should get something better, like C++ prime as recommended by /u/EraZ3712
Is there a reason you don't want to do CS/CE? It will pay off in the long run if you get one of those degrees instead. I have written a blog post that will help you out here.
Also I am pretty sure you will be learning C/C++ in your beginning programming class. You can check out this book C++ Without Fear.
I am also creating an interactive way to learn C at CodeStart
A little more background on my path, I've been primarily a designer working professionally since 2002, but I'm finding that in order to avoid being promoted into obsolescence, learning to program seems like it would be a worthwhile endeavor.
I started out learning Python using code academy, which was pretty good for the basis, but when trying to take that knowledge and follow a tutorial I found for making a space invaders game with Python, it was still over my head. So I continued my training with the book Hello Python. I chose that book because it looked like the examples it had were the closest to being game related and still approached coding from a beginners perspective.
Midway through the book, I shifted over to C++ at the advice of another programmer colleague, and I'm working my way through the book C++ Without Fear (it looks like there's a new edition available now). I chose this book for similar reasons to the Python book. I'm not over whelmed with this book as it tends to be pretty basic in some parts and then glosses over concepts that are a bit trickier. So I've enlisted the aid of another programmer friend and have been meeting semi-regularly with him to go over the parts I struggled with in the book. He's been fantastic.
My UE4 progress has been pretty separate from my C++ training so far. I was already pretty familiar with previous versions of the unreal editor from having been responsible for maintaining the content section of UDN back in the days of UE2 and UE3, so I've just been watching the tutorial videos while I work out to learn about what's new and where to locate everything now. I really should play around with just building a few simple things with EU4. The blueprint system looks like a big improvement over kismet, which was already pretty awesome.
I hope that helps. Good luck to us both!
Hi OP. I tried learning programming, but found most beginners books to be absolute shit and aimed at already proficient programmers. It's hard to find a book that targets absolute beginners. So far this is a very good book I've found:
C++ without fear.
It teaches C++ for absolute beginners. C++ is probably the most important programming language out there, though not necessarily the easiest. You can find a download link to the pdf here.
You will need to download and install visual studio of course. As for the internet connection problem.. yeah maybe you can ask for access to the internet by explaining to prison officials your intentions.
The original edition of this book got me started in programming. I have a strong bias toward encouraging new, serious programmers to start with a natively compiled language and move from there. If you're looking for a leg up, I think this would be a great book for you to work though.
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.
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/
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.
>[1] http://www.amazon.com/dp/0135974445/
Det där var ju en ganska tvivelaktig källa. Eller så missade jag en ganska stor bit av agil utveckling på högskolan.
You don't need a school for this.
Low Level Programming Languages
For some Assembly
Software Reverse Engineering
Nostarch press/Wiley has books on this, plenty of defcon lectures. Watch 'Trolling with Math' as a way to defend against reverse engineering.
Operating System Theory
Also look up MIT classes 6.004 and 6.033 they cover all this in detail. Can find vids online of record lectures, open courseware assignments and lecture notes, ect.
Networking
Cellular and Mobile Communications
Discrete Math
Overview of Cyber Defense
Security Fundamental Principles (i.e., “First Principles”)
Above material covers this
Vulnerabilities
Legal
No idea
Besides what has been mentioned, these two are also good:
: teaches good design practices in C.
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);
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...
> 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.
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.
I am a little offended by your comment. It is very elitist and an attitude that is contributing to the slow and painful death of this language.
>If your into templates , and you can't find anything challenging, its time to start saving up those pennies and buy The C++ Standard Library , else your going to learn crap. Most folks buy it as a reference. I don't get contracts and you won't catch me without it. No money , no honey - and no jobs
If your into templates , and you can't find anything challenging, its time to start saving up those pennies and buy The C++ Standard Library , else your going to learn crap. Most folks buy it as a reference. I don't get contracts and you won't catch me without it. No money , no honey - and no jobs
I've seen the following recommended, I've not read them myself yet, so can't comment on how good they are or not:
Objective-C Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)
Programming in Objective-C (4th Edition) (Developer's Library)
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.
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!
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!
On this front... do everything you can on node school and on a somewhat unrelated note buy/download this book
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&amp;qid=1414608930&amp;sr=8-1&amp;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.
Make sure you read: http://www.amazon.com/Effective-JavaScript-Specific-Software-Development/dp/0321812182/ref=sr_1_1?ie=UTF8&amp;qid=1427605593&amp;sr=8-1&amp;keywords=effective+javascript
Also for a quick start have a look at Code School: https://www.codeschool.com/paths/javascript
Books I like the most in no particular order.
http://www.amazon.com/gp/aw/d/1617290548
http://www.amazon.com/gp/aw/d/0321812182
http://www.amazon.com/gp/aw/d/193398869X
The Big Nerd Ranch Guides for Objective C and iOS Programming are just about the best books for absolute beginners, I've found. I had programming experience in Java and Android apps prior to working on iOS, but read the two books anyway (online tutorials are the faster way to go) just to see if I could pick up something in-depth, and I did.
http://www.amazon.com/Objective-C-Programming-Ranch-Edition-Guides/dp/032194206X/ref=sr_sp-atf_title_1_3?ie=UTF8&amp;qid=1408323435&amp;sr=8-3&amp;keywords=big+nerd+ranch+ios
http://www.amazon.com/iOS-Programming-Ranch-Edition-Guides/dp/0321942051/ref=sr_sp-atf_title_1_1?ie=UTF8&amp;qid=1408323435&amp;sr=8-1&amp;keywords=big+nerd+ranch+ios
As the Big Nerd Ranch Objective-C Programming book so eloquently put it:
> The life of a programmer is mostly a never-ending struggle. Solving problems in an always-changing technical landscape means that programmers are always learning new things. In this case, “learning new things” is a euphemism for “battling against our own ignorance.” Even if a programmer is working with a familiar technology, sometimes the software we create is so complex that simply understanding what’s going wrong can often take an entire day.
>If you write code, you will struggle. Most professional programmers learn to struggle hour after hour, day after day, without getting (too) frustrated. This is another skill that will serve you well.
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.
If you're just starting, I'd suggest Big Nerd Ranch's Objective-C Programming. http://www.amazon.com/gp/product/032194206X?ie=UTF8&amp;at=&amp;force-full-site=1&amp;ref_=aw_bottom_links
> 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.
http://www.amazon.com/Ruby-Programming-Language-David-Flanagan/dp/0596516177
this book is coauthored by the Matz - the creator of Ruby. its a really top notch book.
I initially learned Rails back in the day through a previous edition of this book, and found it a decent introduction. If you're already fluent in web programming and backend it may be a bit simplistic for your tastes, but it's a good introduction to "the Rails way" of doing things.
If you really want a deep dive on the Ruby language itself, far beyond what you'll need to get started on Rails apps, but what every mature developer should take the time to learn, David Flanagan's The Ruby Programming Language is a must-read.
By the way: don't knock the book until you try it. I think we've all had a bad experience with crappy, overpriced college textbooks, but professional reference books are a completely different story. It'll take less time than you think to make it cover-to-cover, and the organized, thorough presentation of a decent book ensures you'll come away with a complete understanding of the language that may even impress an interviewer when you're trying to get a job.
Check out Making Software: What Really Works, and Why We Believe It. Haven’t read it myself.
http://www.amazon.com/Making-Software-Really-Works-Believe/dp/0596808321/ref=ntt_at_ep_dpt_2
Bok skriven av samma person.
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
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)
Good talk and I'm left wondering what's the book's name.
Edit: Found it.. http://www.amazon.com/Making-Software-Really-Works-Believe/dp/0596808321/ref=la_B001H6PNGM_1_2?s=books&amp;ie=UTF8&amp;qid=1453037170&amp;sr=1-2&amp;refinements=p_82%3AB001H6PNGM
Try not to just accept the bits you don't understand. If you have code in your app that you don't understand you will run into problems debugging it eventually, and that process could be very painful. One tried and true method for understanding difficult code is to modify small pieces of it and see what the result is. Another good technique is to add lots of log statements so you can trace the code as it executes. Be sure to write descriptive log messages so you can tell what's going on.
I've been learning Android recently and understand how difficult it is getting started. Android programming is totally different to normal programming and it really helps to understand a bit about the Android system, it's APIs and the design philosophy that underpins it all. I would definetly recommend reading a book or two to help get your head around it. Two books I found useful are: The Busy Coders Guide to Android Development and Professional Android 4 Application Development.
And the most importat thing of all is persistance, stick with it!
Lots of good advice here. For a book, I recommend the books by Reto Meier, Professional Android 4 Application Development. Google thought he was good enough to teach their Udacity course, so that's good enough for me. Plus, they're good books anyway.
Speaking of Udacity, you can watch all the lectures for free, which includes a demanding, but ultimately thorough Android development course.
Buy and read this book. When you've finished reading it, read it again.
http://www.amazon.com/Professional-Android-Application-Development-Guides/dp/1118102274/
Sorry for the slow answer, I've been busy.
It is very hard to give a specific answer, it is a very vague question and a very large topic.
A couple of things come to mind though :
-First a rant, sorry but it is necessary. You will (or have) read everywhere that fragmentation makes developing for Android a nightmare. Total bullshit and the landmark of shitty fanboys that declare themselves journalists. You will have to decide for a lower version for your app. If your are only doing it for fun, 4.0 is more than enough. If not 2.2 allows you to score all the market. Target the last version & do your homework, all the tools are here to deliver a good experience to all these versions while using the last improvements (official compatibility library, actionbar sherlock, ...).
-Please don't buy a dozen of books. That's just a waste of money. If you have enough OOP knowledge, you don't even need one. If not, Reto Meier wrote one (http://www.amazon.com/books/dp/1118102274). It is recent enough (it is in the 4+ world) and since he is a developer advocate for Android at Google, you will find way less mistakes than from a random author.
-While we are on the topic, stackoverflow can be helpful BUT 90% of the answers are just plain terrible. If you use this website, always keep this in mind and try to be critical of the answers.
-developer.android.com should always be your first stop. There are introduction classes, and documentation for almost all Android related topics.
-If you want to keep informed about what is happening in the Android dev community (libraries, tools, apps, ...), http://www.youtube.com/user/androiddevelopers has an official youtube page and they even have a weekly video with the news. If you want more, circling the Googlers that work on Android + the biggest members of the open source community might be a good idea.
-Even if you suck at or don't care about design, you should still read the guidelines on the android dev website at least once. Keeping these in mind is really helpful when working on UI related problems.
I'm studying up on how to create Android apps at the moment. Would you be more inclined to learning how to develop Android applications or iOS applications? If you're interested in learning to program Android apps, the Android application framework includes native Java libraries and thus conventions so you would be required to get comfortable with the Java programming language. The book I'm currently reading is a Wrox publication titled [Professional Android 4 Application Development](http://www.amazon.com/Professional-Android-4-Application-Development/dp/1118102274/ref=sr_1_1?ie=UTF8&amp;qid=1380856547&amp;sr=8-1&amp;keywords=professional+android+4+application+development
).
As far as iOS applications go, I know that the programming language required is Objective C and I'm certain you would need a Mac to develop it on; although you CAN develop using a Mac virtual operating system, the performance is a huge drag. Good luck!
I'd pick up a copy of Learn Java for Android Development. It's great for any level of programming knowledge, and it's specifically focused on Android development. However, this won't make you a great Android developer. After this book, I'd recommend getting Professional Android 4 Application Development. It's written by Reto Meier, the tech lead for the Android Developer Relations team at Google, and is pretty detailed without being overwhelming.
http://www.amazon.com/Professional-Android-Application-Development-Guides/dp/1118102274
pick it up for 30 bucks, read it, do the stuff. It'll get you where you need to be for most of the things you'd want to do on android.
I recommend Professional Android 4 Development. But why ask a non-dev sub a dev question? You would definitely get a better answer there.
Oh and since the move to Android Studio - you want to follow Google guides on setting up your environment, since the change happened recently and all books are outdated in this respect. So set up a basic environment and start coding - the book is relevant from that point on.
Really gives a great description of how all the different components of the system fit in together - the kernel, drivers, APIs, runtime/VM, etc.
The developer docs are a great place to learn the 'basic stuff' and terms like 'Bundle'.
I can recommend you this book: http://www.amazon.com/gp/aw/d/1118102274/ref=mp_s_a_1_1?qid=1370377881&amp;sr=8-1&amp;pi=SL75
Written by Reto Meier, a Google Android Advocate in the Android Relationship Team.
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.
Three things:
I learned most of what I know today by writing VB apps and having the IDE convert them to C# (I stared with SharpDevelop)
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.
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:
The non-RESTful (RESTless?) url would look something like:
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:
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.
https://www.amazon.ca/Pro-ASP-NET-Core-MVC-2/dp/148423149X
https://www.amazon.ca/Pro-ASP-NET-MVC-Adam-Freeman/dp/1430265299
Just about to pull the trigger one of these.
I'm not going going be applying for jobs for a couple of years because of college. Should i bother with MVC 5 or try to jump straight into core.
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?
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&amp;qid=1538060236&amp;sr=8-1&amp;keywords=discovering+statistics+using+r -- and datacamp.com are both handy resources.
https://www.amazon.com/Discovering-Statistics-Using-Andy-Field/dp/1446200469
If you have some experience with other languages already, especially if it's C++ or Java, then I'd recommend the "C# in a Nutshell" books. The first couple of chapters will cover most of the content of the language. http://www.amazon.com/C-5-0-Nutshell-Definitive-Reference/dp/1449320104
/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#.
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.
There are several books, blogs and videos that you can use.
These books are good choices:
C# 5.0 in a Nutshell and
Pro C# 5.0 and the .NET 4.5 Framework
I also wrote a blog post about it.
Resources to become a Ninja: C#
I think these books are good, anyway they are in my Amazon history
http://www.amazon.co.uk/gp/product/1449337163?psc=1&amp;redirect=true&amp;ref_=oh_aui_search_detailpage
http://www.amazon.co.uk/gp/product/1449320104?psc=1&amp;redirect=true&amp;ref_=oh_aui_search_detailpage
I think there is a c# 6 version now though
http://www.amazon.co.uk/gp/product/161729134X?psc=1&amp;redirect=true&amp;ref_=oh_aui_search_detailpage
:D
> Is there any systematic book or tutorial that explains why you do every single thing it has you do?
I recommend the Python Cookbook. The recipes are fine, but really its the combination of code and explanation that's invaluable. So, read the whole book; don't skip the recipes that don't interest you.
I am Python beginner too and I would say Python Cookbook is a very nice book. You should try it.
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.
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.
Have a look at Python Cookbook, it might just right for you.
Code every day. Work on as many little interesting projects as you can. If you don't know any languages I'd suggest starting with Python, there are a million different tutorials and resources online, so getting started shouldn't be a problem.
Add to that, read some books to learn about how software development projects work, different techniques, best practices, pitfalls, etc. Here are my recommendations on books: The Pragmatic Programmer, Refactoring, Code Complete (a bit dated, but still solid), Rapid Development (slightly mis-titled, it's a good overview of different development practices), The Architecture of Open Source Applications, and Design Patterns. Code as much as you can, be ambitious, be analytical and introspective about the problems you run into, and read and understand those books too. There's a lot more you'll need to learn to become a good developer, but what I've described will give you a very strong base to build on.
Oh, and if you don't already know discrete mathematics you'll need to pick that up. I'd recommend this book.
Thanks for the recommendation!
What do you think about his books on Rapid Development and Software Estimation?
This article is a ripoff of a couple of chapters from Steve McConnell's 1996 book, Rapid Development.
He could have at least given credit to that book for all of the point mentioned. Its not quite word for word, but there are too many similarities to be co-incidental.
He wrote a book as well, highly recommended: http://smile.amazon.com/dp/1593272898 - one of the only definitive sources for IDA Pro information that isn't scattered about all over the Intardnets.
My recommendations then for self study:
Read all those and you will be in good shape ;)
EDIT: I hate trying to get reddit to do what I want.
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?)
Dependency injection and interfaces are mostly more advanced concepts. You can code most things without doing them properly. It comes into the design of your software and testability. It's not something I'd recommend learning first. When it's time, I highly recommend reading The Art of Unit Testing by Roy Osherove: https://www.amazon.co.uk/Art-Unit-Testing-examples/dp/1617290890/ref=sr_1_1?ie=UTF8&amp;qid=1511991453&amp;sr=8-1&amp;keywords=roy+osherove
Until then, you're better off learning how to actually code in C#, and learning important C# features such as the differences between reference and value types, LINQ, asynchronous programming, threading, and more. You can learn all of this with Venkat's C# for beginners series: https://www.youtube.com/playlist?list=PLAC325451207E3105
To develop a web project, you could then move onto Venkat's MVC tutorial series, however if you're planning to store data, I recommend first watching his Entity Framework and SQL Server series.
I recommend focusing on the theory and patterns more than any toolkit or framework. Theory stays with you forever while frameworks come and go and are often language specific.
This book got me started. The examples are all in C#, but the theory applies to any object oriented language.
I've read that $30 book far more than any of the $200 textbooks from university, and it improved the quality of my work dramatically.
I'd add the following two books to the list to cover TDD and the Software Design phase:
Disclaimer: I haven't read the latter but am familiar with the contents from courses I've attended with Mr. Gilb. Won't help you how to code but what to code when doing it on a contract.
There is a 2nd edition version of Art of Unit Testing which came out at the end of 2013 (Original is from 2009) with the examples focusing on C# which may/may not be more useful for people interested:
UK Amazon Link
US Amazon Link
If you don't mind answering, can you tell me whether this book is a good way to learn OOP in Python? Or is a whole book dedicating to OOP an overkill?
Check out this book, I think it's a good "next step" kind of book now that you know some Python, and it has a lot of good example code imo.
Best intro to OOP I saw is actually in a Python book https://www.amazon.ca/Python-3-Object-Oriented-Programming/dp/1849511268
You can also take a look http://www.oodesign.com/ for design patterns
Basically you have an example that is pretty good for procedural programming, an input with an output. Not everything is like that. OOP is exactly that, object oriented. Why do you use objects? To model something. And then you can add behaviors and properties to that model. For example, a car can drive (a behavior), it is red (a property) and there are many different kinds of cars (inheritance).
So basically, an object (class) is like a blueprint for a species (instances) and that object can have children (inheritance) that share the same traits and be treated the same as the parent (polymorphism). That last bit is the part to wrap your head around; once you see that, then you see the point.
So unless you need to model a physical or abstract process, OOP is not really necessary.
For one of my projects, I decided to just use vanilla JavaScript AJAX and for the rest, I ended up using jQuery. I felt this gave me a better handle of what was going on behind the scenes.
For vanilla JavaScript resources, the MDN documentation was helpful to get going. Using vanilla JavaScript was hard and it isn't super intuitive. This is why I think most people just end up using a library to call out to APIs. There's also a good Lynda course that's called "AJAX and JavaScript." It's pretty fast paced, and the course assumes you already know basic JavaScript, but I found it helpful with learning vanilla js ajax.
As far as jQuery goes, this video was also really helpful. Again, fairly fast pace but overall, good info. Once again, using the jQuery documentation is ESSENTIAL. I've found that in general, if I am stuck, asking myself the right questions, going to the documentation, and finding the answers is usually best.
I also read through the book Secerts of the JavaScript Ninja which had a few things to say about asynchronous code. Hope this helps!
I would add Secrets of a JavaScript Ninja, written by John Resig (the creator of jQuery). An amazing resource with a nice philosophical approach about JS.
HTML and CSS are easy enough to pick up from tutorials and on an "as you go" basis.
Javascript is a difficult and intricate language. If you don't have a programming background, it is not a great one to start with. You will more or less be doomed to be mediocre at it (which might be fine for adding minor interactions, importing plugins, etc...). Functions as first class objects, closures, prototypal inheritance, and other concepts that are used frequently in Javascript can be tricky to grok.
I highly recommend Secrets of the Javascript Ninja. Javascript: The Good Parts is a great resource too but it goes over things to quickly for them to really stick and requires a couple readings.
Books that helped me to get the hang of JS
John Resig's Secrets of the JavaScript Ninja and Douglas Crockford's JavaScript: The Good Parts are pretty much the only ones worth reading in my opinion.
Projects
The best thing would be to build something you want to use yourself. Maybe you try cordova and build a small app with the browser platform so that you can create a simple App that you can bring to your Smartphone.
More advise
Read a lot of code: TODO MVC is a good place to start, people try to write good code for this one because they want you to use their framework :-). The problem with the source code of many projects is that the JS ecosystem is in a constant flux and ES6 modules are skyrocketing right now. You may want to check out the jQuery source code - you can pretty much watch the evolution by looking at older versions of the source code and how it evolved.
If you feel really adventurous the NodeJS source code is a fun read - although it's a very big project that also got some C/C++ code sprinkled in - but that shouldn't be a problem for you :-).
I would advise you not to bother reading the Angular1 code for the time being, Angular2 maybe interesting but its written in Microsoft's TypeScript - which is a nice language on top of JS that is worth learning about.
For more advanced topics, "Secrets of the JavaScript Ninja" covers many of the advanced techniques popular libraries use (including prototype and jQuery), written by the jQuery creator.
It assumes you have an understanding of the fundamentals so it gets into the advanced topics pretty quickly.
http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X
I really enjoyed Secrets of a JavaScript Ninja by John Resig, the main person by jQuery. I found it to be really helpful as someone that was comfortable with JS and wanted to know more, but if I remember right the beginning of the book went over some more of the fundamentals.
C++ Without Fear: A Beginner's Guide That Makes You Feel Smart (2nd Edition)
http://www.amazon.com/Without-Fear-Beginners-Guide-Makes/dp/0132673266/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1395309620&amp;sr=1-1
Been using this one for a while and it's pretty good. It goes over all the concepts and many parts of the language without getting insanely technical out of the gate.
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.
http://www.amazon.com/Standard-Library-Tutorial-Reference-2nd/dp/0321623215
Dude, read a good JS book, learn the basics of the framework you wanna use, bookmark the API reference page and start cranking.
If you need tutorials to understand coding principles you're not ready to make a game. Tutorials are for understanding certain un-obvious aspects of game dev or framework's way of doing things.
They're NOT solid foundations for learning game dev, just crutches.
A couple of questions:
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&amp;qid=1419300572&amp;sr=8-1&amp;keywords=big+nerd+ranch+objective+c
http://www.amazon.com/iOS-Programming-Ranch-Guide-Guides/dp/0321942051/ref=sr_1_1?ie=UTF8&amp;qid=1419300564&amp;sr=8-1&amp;keywords=Big+Nerd+ranch+ios
Android
http://www.amazon.com/Android-Programming-Ranch-Guide-Guides/dp/0321804333/ref=sr_1_1?ie=UTF8&amp;qid=1419300685&amp;sr=8-1&amp;keywords=Big+Nerd+ranch+android
Big Nerd Ranch books are awesome.
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.
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
Don't listen to jakelear, w3schools is an excellent resource for beginners.
That said, once you are on your feet and getting deeper into JavaScript check out these books. They are wonderfully useful and informative.
http://www.amazon.com/gp/product/0596517742
http://www.amazon.com/gp/product/0596805527
http://www.amazon.com/gp/product/193398869X