Best computer software books according to redditors
We found 1,200 Reddit comments discussing the best computer software books. We ranked the 268 resulting products by number of redditors who mentioned them. Here are the top 20.
We found 1,200 Reddit comments discussing the best computer software books. We ranked the 268 resulting products by number of redditors who mentioned them. Here are the top 20.
I'd start with Harvard's CS50 on edx, it's the best course you'll find anywhere bar none. The instructor, Dave Malan is world class. Check out CS50, and the sub r/cs50 has a lot of like minded people like you. (Note: this course is free)
Stackoverflow is your friend where you can ask any question you have or bounce ideas off of others.
Learn Java OOP (here is an excellent course): Java MOOC
Free Code Camp for web development
Build your own operating system: NAND2TETRIS
Cave of Programming : All kinds of programming
Open Source Society University: This is a solid path for those of you who want to complete a Computer Science course on your own time, for free, with courses from the best universities in the World.
r/arduino for some embedded programming fun!
.....and of course for anything under the sun: https://www.edx.org/ & https://www.coursera.org/
For BSD: https://www.freebsd.org/
For Linux: https://www.archlinux.org/
For x86 assembly: http://opensecuritytraining.info/IntroX86.html [How far down the rabbit hole do you want to go?]
***
Edit: Wow, my first Reddit Gold!! Thank-you so much kind people!!
Edit2: Colt Steele has a good web dev course and is highly recommended to do in parallel with freecodecamp
Edit3: The MIT Challenge
is Scott Young's blog on how he completed the entire 4 year MIT Computer Science curriculum in 12 months
Edit 4: The Rails Tutorial by Michael Hartl is the Bible for learning Ruby on Rails
Edit 5: For deeper knowledge of OOP check out Sandi Metz’s POODR
Edit 4: The Bible for C Programming: K&R
Here's my list of the classics:
General Computing
Computer Science
Software Development
Case Studies
Employment
Language-Specific
C
Python
C#
C++
Java
Linux Shell Scripts
Web Development
Ruby and Rails
Assembly
You don't need school to learn how to do that. It's true for most things in life but it is even easier with computer science.
Want to learn C ? No school will ever teach it better than the book The C Programming Language (also called K&R) by Brian Kernighan and Dennis Ritchie.
Want to learn C++ ? You should start with C or C# or Java and then go for Programming: Principles and Practice Using C++ by Bjarne Stroustrup.
Want to learn Python ? Go to python.org and pick a tutorial.
Want to learn Javascript ? Eloquent JavaScript by Marijn Haverbeke.
Want to learn HTML5 ? Maybe have a look at diveintohtml5.info or W3Schools
Want to learn Java ? The Java Programming Language by Ken Arnold or Head First Java by Kathy Sierra.
You need two things, time and will. You'd be surprise how easy it is to learn all those things if you like it and if you have a dream project.
edit: Woh, thanks for the gold. :D
Ditto - I have a Eastern Economy Edition of K&R when I took up learning C as a hobby. When I looked up the price for the same on the US version of Amazon, the price comparison was startling.
[Here's the US paperback version, priced at about 53 USD according to Amazon, i.e. 3,554 Indian Rupees. Of course, the cheapest one you can still get new is about USD 15 or so dollars. ] (https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628/ref=sr_1_1?s=books&ie=UTF8&qid=1474085789&sr=1-1&keywords=kernigan+and+richie)
Here's the Indian "Eastern Economy Edition", paperback, of the same book, identical in every single respect, priced at a whopping 194 rupees, or about 3 dollars.
For the money you'd be shelling out, it'd be cheaper for you to buy a brand new copy of the book from an Indian bookstore and have it shipped out to you (possibly even through an express courier like DHL or FedEx) in the US than just buy the book in the US outright.
The C Programming Language (commonly known as K&R) remains the best resource for learning C.
the bookstores of American universities are independently owned/operated to the university, and in fact just license or are a reseller of materials from the university itself when it comes to branded gear.
They're known to overcharge for a lot of books. Consider that The C Programming Language costs $30 new for a copy. My university wants $50 for a used copy of an out of date printing that was based on a draft.
The professor of this class actively says "DO NOT BUY THE BOOK. I WILL PROVIDE YOU A PDF." Despite this, people still buy the book.
This semester, I bought a book for one of my classes on amazon because the bookstore was like "LOL IT'S OUT OF PRINT WE DON'T HAVE IT." This was inverse of the email (that was later claimed as "forged") from the instructor, forwarded from the bookstore, saying it was in stock. On top of that, they wanted $350 for a book that's $40 new.
C Programming: A Modern Approach by K N King is a great book and is recommended in the C FAQ.
To get a feel for low-level computing you should learn C. All modern operating systems and low level utilities are written in C (or C++, which is C with objects). It is as close to the metal as you can get while still being useful. Maybe you could fiddle around with some assembly afterwards.
Now, as for understanding how an operating system form top to bottom works, Windows is a pretty shit place to start for the following reasons:
Instead, you should learn Linux, and learn how Linux works. Installing it in a VM is fine. If you're looking to learn, I suggest you start with Debian, and, after you get comfortable with the command line, move to Arch. Arch is great for learning, if not much else, because it makes you do most things manually, and has a pretty extensive wiki for everything you may need to know.
Resources:
A Linux tutorial for beginners: https://linuxjourney.com
A pretty decent online C tutorial (note, you should compile the programs on your own system, instead of doing their online exercises): http://www.learn-c.org
K&R2 (the "proper" way to learn C): https://www.amazon.com/dp/0131103628/ref=cm_sw_r_cp_awdb_t1_FSwNAbFDJ3FKK
Computer Systems A Programmer's Perspective, a book that might just be what you're looking for: https://www.amazon.com/Computer-Systems-Programmers-Perspective-3rd/dp/013409266X
K.N. King's C programming
covers upto C99, I don't know if there's anything significant in C11.
Thank you all for your responses! I have compiled a list of books mentioned by at least three different people below. Since some books have abbreviations (SICP) or colloquial names (Dragon Book), not to mention the occasional omission of a starting "a" or "the" this was done by hand and as a result it may contain errors.
edit: This list is now books mentioned by at least three people (was two) and contains posts up to icepack's.
edit: Updated with links to Amazon.com. These are not affiliate - Amazon was picked because they provide the most uniform way to compare books.
edit: Updated up to redline6561
If you have the time, learn scheme. The scheme books I've seen are extremely well written and go way beyond simply talking about the language.
You could start at SICP, but it doesn't assume previous programming knowledge. It's a beginner's book, but don't take this as "the book is easy". Try it out and see what you think about it.
Another one is The Little Schemer. This one is a book on recursion. It uses scheme too. It's probably the best programming book I've read. I never stopped to think about a ranking, but thinking on the spot, this would be the 1st.
http://www.amazon.com/The-Little-Schemer-4th-Edition/dp/0262560992/
SICP is freely available: http://mitpress.mit.edu/sicp/ with video lectures from a course (based on the book; or the book is based on the course) given at MIT http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/
This one is also pretty good. http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
There are other scheme books out there. There is, for example, a "How to Design Programs" http://htdp.org/, which also has a course based on it: https://www.coursera.org/course/programdesign -- but I've never read this book or taken this course.
Here is a "curriculum" of sorts I would suggest, as it's fairly close to how I learned:
Generally you'll probably want to look into IA-32 and the best starting point is the Intel Architecture manual itself, the .pdf can be found here (pdf link).
Because of the depth of that .pdf I would suggest using it mainly as a reference guide while studying "Computer Systems: A Programmers Perspective" and "Secrets of Reverse Engineering".
Of course if you just want to do "pentesting/vuln assessment" in which you rely more on toolsets (for example, Nmap>Nessus>Metasploit) structured around a methodology/framework than you may want to look into one of the PACKT books on Kali or backtrack, get familiar with the tools you will use such as Nmap and Wireshark, and learn basic Networking (a simple CompTIA Networking+ book will be a good enough start). I personally did not go this route nor would I recommend it as it generally shys away from the foundations and seems to me to be settling for becoming comfortable with tools that abstract you from the real "meat" of exploitation and all the things that make NetSec great, fun and challenging in the first place. But everyone is different and it's really more of a personal choice. (By the way, I'm not suggesting this is "lame" or anything, it was just not for me.)
*edited a name out
Some context, I've been living in this house for about 3 years now, my girlfriend and i moved in to take care of the owner of the house. Turns out that he was a big lisp / scheme hacker back in the 80s-90s and had developed a lot of cutting edge tech in his hay day. Anyway, these books have been hiding in his library downstairs...
It was like finding a bunch of hidden magical scrolls of lost knowledge :)
edit: I will compile a list of the books later. I'm out doing 4th of July things.
update: List of books
ISBN: 1-55558-044-0
ISBN: 1-55558-042-4
ISBN: 0-262-56038-0
ISBN: 0-393-95544-3
ISBN: 0-201-17589-4
ISBN: 0-07-000-422-6
ISBN: 0-13-370875-6
ISBN: 0-07-054666-5
ISBN: 0-262-11158-6
ISBN: 1-55860-191-0
ISBN: 1-59059-239-5
ISBN: 0-932376-41-X
ISBN: 0-07-001115-X
ISBN: 0-673-39773-4
ISBN: 0-262-07093-6
ISBN: 0-932376-87-8
ISBN: 0-13-717232-X
ISBN: 0-417-50308-8
ISBN: 0-471-60771-1
ISBN: 0-262-19288-8
ISBN: 0-262-55017-2
ISBN: 0-13-834284-9
ISBN: 1-935182-64-1
ISBN: 978-1-59327-591-4
If you're new to C, read K&R.
Once you've done that (or if you already know C) then read THE book on Unix programming
What OS? Linux, of course. When TPB order everything locked down, you don't want to be caught using a Microsoft OS. -- What distribution? The easy path is Ubuntu, with the Cinnamon UI, or LinuxMint 13, when issued (May 2012).
What IDE? There's lots to choose from. My favorite is "geany".
https://en.wikipedia.org/wiki/Geany
For TCP/IP protocol tutorial. Recently updated by Wright:
Stevens, "TCP/IP Illustrated", 3-volume set.
http://www.amazon.com/TCP-IP-Illustrated-Volume-Set/dp/0201776316
On human interface guidelines relevant to programming:
https://en.wikipedia.org/wiki/Human_interface_guidelines
For GNOME 2, see:
http://library.gnome.org/devel/hig-book/stable/
To develop Linux applications:
You are right. You MUST know how to program in C. When others tell you that object oriented programming is the thing, know that you can do object oriented programming in C. Avoid interpreted languages (Python, Java, and others) as a first programming language. Interpreted languages teach bad habits and hid too much of what's going on from you such that debugging becomes difficult to impossible.
However, if all you intend is "casual programming", the Python will do, if you must. It's just not the best choice first a first language if your intent is to become a "professional programmer". I use Python myself; It works for what I need to do quick and dirty.
Definitive, but for experienced programmers:
http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628/ref=sr_1_1?s=books&ie=UTF8&qid=1335197606&sr=1-1
As a tutorial for someone learning a first programming language and how to program from zero:
Perry, "Absolute Beginner's Guide to C", 2ed.
-- I have not read the book, but the ToC looks reasonable for a beginner.
http://www.amazon.com/Absolute-Beginners-Guide-2nd-Edition/dp/0672305100/ref=sr_1_6?s=books&ie=UTF8&qid=1335197606&sr=1-6
OK, you don't want a full CS curriculum, but some topics in discrete mathematics are mandatory. ... Ack! Having looked over the offerings at Amazon, I believe that Epp, "Discrete Mathematics with Applications" may be the best of the lot, but at $187, it is hard to recommend without knowing your intent and interest. The reason I suggest this title is that it looks focused on application to computer science topics. It covers a number of topics that are NOT covered in many of the other titles, enough so that should you use other texts you will have spent more than the $187 that this title includes. JMHO.
http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/ref=sr_1_1?s=books&ie=UTF8&qid=1335199316&sr=1-1
See also: Sedgwick, "Algorithms" -- You'll probably need it sooner than later.
http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewick/dp/032157351X/ref=sr_1_1?s=books&ie=UTF8&qid=1335200153&sr=1-1
Remember that Linux OS? You are going to need some programming tools, right? If you intend to write GUI applications based on the GTK+ toolkit, then install the package "glade" or "glade-gtk". Installing a glade package will suck in over 100 other packages essential to building a GTK based GUI application. Specifying glade to the package manager is just easier that finding and installing all the other necessary parts by hand.
If you are going to do command line based UI programs, then package "build-essentials" should be adequate.
There are some other things to read:
On how to organize, grow and maintain a Linux software development project: Fogel, "Producing Open Source Software"
http://producingoss.com/
You can read it online here, but buy the book too to help support Fogel. He's gotta eat too.
On the culture of writing Open Source Software:
Raymond, "The Cathedral and the Bazaar"
http://www.catb.org/~esr/writings/cathedral-bazaar/
Linux programming is not like Windows programming.
Read and study ESR's TAOP.
Raymond, "The Art of Unix Programming"
http://www.catb.org/~esr/writings/taoup/html/
You can read it online, free. However, buy a hardcopy too. Raymond has to eat too.
Now to get really technical. What interface do you write to?
Kerrick, "The Linux Programming Interface: A Linux and UNIX System Programming Handbook"
http://www.amazon.com/The-Linux-Programming-Interface-Handbook/dp/1593272200/ref=sr_1_1?s=books&ie=UTF8&qid=1335201257&sr=1-1#reader_1593272200
Beginning to focus on GNU style programming:
GNU Coding Standards
https://www.gnu.org/prep/standards/
GNU Coding Standards is more than how to and how much to indent a line or how to set braces. You will get into the topic of Make and Autotools. Make is a program to build complex softare and Autotools is about how to build a package for distribution, the package that any Unix flavor can use; it is not focused on any specific distribution. See also: "configure and make"
Enough! There's more, but I have too much time in this already for today.
[edit: typos]
K&R. If you're in a programming 101 class that involves C, just buy this book unless your prof tells you otherwise.
---
K&R has the reputation it has because they did an excellent job of balancing between "experienced programmers can use this as a reference" and "newbie programmers can use this as a starting point. Let me clarify: K&R will not make you a better programmer, but it is an excellent example of what industry professionals would consider to be a good piece of technical documentation.
If you're going to ever work with APIs or large amounts of technical documentation about software, this book will mirror the experience you get reading "good docs". In short, learning C from this books does an excellent job of showing you how much you'll have to figure out yourself and what information you should be expected to be given to you when working in the industry.
It's not cheap, but C Programming a modern approach is very good.
All you need to get started is a text editor and a compiler. Which ones they are depends on your platform.
The resource seems very extensive such that it should suffice you plenty to be a good software engineer. I hope you don't get exhausted from it. I understand that some people can "hack" the technical interview process by memorizing a plethora of computer science and software engineering knowledge, but I hope you pay great attention to the important theoretical topics.
If you want a list of books to read over the summer to build a strong computer science and software engineering foundation, then I recommend to read the following:
The general theme of this list of books is to teach a hierarchy of abstract solutions, techniques, patterns, heuristics, and advice which can be applied to all fields in software engineering to solve a wide variety of problems. I believe a great software engineer should never be blocked by the availability of tools. Tools come and go, so I hope software engineers have strong problem solving skills, trained in computer science theory, to be the person who can create the next big tools to solve their problems. Nonetheless, a software engineer should not reinvent the wheel by recreating solutions to well-solved problems, but I think a great software engineer can be the person to invent the wheel when problems are not well-solved by the industry.
P.S. It's also a lot of fun being able to create the tools everyone uses; I had a lot of fun by implementing Promises and Futures for a programming language or writing my own implementation of Cassandra, a distributed database.
https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
C Programming: A Modern Approach is quite good, and before I go into detail, let's pause for a moment and discuss "The C Programming Language" by Dennis Ritchie.
It's incredibly good, provided you're an experienced programmer. It's incredibly bad otherwise. There's no doubt Ritchie knew his stuff (he did create the language), but from a learning perspective of a new programmer, you're going to be incredibly lost. Hell, I came from quite a bit of C++, and even after working with some C code it was quite confusing.
"A Modern Approach" is very much a book with which you can learn C, even as a beginner, but also doesn't treat you like an idiot. One thing it does quite well is it contains a "Q&A" section that covers common questions (or otherwise things you wish you had thought to ask) and is quite detailed, including some modestly challenging exercises. He posts the solutions to some of the challenges online as well.
It's not perfect, but I've never found the "perfect" book. The book is, however, thorough, reasonably easy to understand, and has a knack for knowing the mistakes rookies will undoubtedly make, as well as questions they probably have, which is surprisingly rare.
When it comes to programming books for the beginner, most fall into the category of:
King opted for an alternative route, in that it has great coverage, isn't too advanced, but also isn't cute either. He very much gets down to business, but has an understanding of his audience. My only fault? Again, some of the examples get somewhat complicated for the beginner, and he doesn't pause every so often to tell you to take a break from reading and give you a small task to try yourself.
EDIT: Also, avoid "C: How to Program" by Dietel. Quite literally nearly half the book is just a crash course into C++. I've no idea how this ever made it past a publisher. Well, it's a Pearson book, so I have an idea, and it also helps explain the ridiculous-ass price. Put another way, for the cost of this one book, you could buy King's book and another book on C++ new, and still have money left over.
The Little Schemer will teach you to truly think recursively. It teaches via a continuous series of question and answer.
Either K&R's The C Programming Language which is often considered "The C Bible" and is written by the authors of C, or a more recently published C Programming: A Modern Approach are both excellent and comprehensive learning resources. I personally recommend the latter because I believe it is more relevant and includes almost, if not all, the information in K&R.
C++ Primer is amazing, but definitely not for beginners. Since you're totally new to programming, I'd suggest learning a bit of Python first to get the basics down, or if you're feeling more adventurous, pick up a copy of K&R's "The C Programming Language", as it's a great introduction to lower-level programming, and it'll make C++ a lot easier to understand.
Some good freely available online Python books:
Invent With Python
Learn Python the Hard Way
Learn Python the Hard Way is easier than it sounds, I assure you. I would definitely recommend starting with Invent Your Own Computer Games With Python, though.
A couple more useful things to know:
I found some of the more abstract ways to introduce functional programming to be good fun. Like the Clojure Koans or The Little Schemer
Haskell does throw a little too much at you at once, I agree. Another option though would be to go straight with ML, using The Little MLer. It's like The Little Schemer but, shockingly, in (S)ML. It'll get you enough of types and recursion and consing and so on that Haskell will "only" be adding laziness, type classes and monads. At the same time, I think it's a very accessible book, and it mentions food a lot.
Or perhaps even learn Scheme, then ML, then Haskell. Make your life easier at each stage, and learn more languages to boot.
Best one out there: https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628/
I'm confused do you want someone with a native American accent, a British accent, or and American accent?
(Also in general videos tend to be a poor medium for learning the C language. Most learn from books like this)
I heard this book is good:
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
Java Concurrency in Practice by Brian Goetz is a very good book to get started on the concurrency package. I would recommend reading through it atleast once.
I started to teach myself C, and this book has been an unbelievable resource. It starts pretty basic, but it gets into the meat of C pretty quickly.
I'm going to give some very different advice than everyone else here: expand what you already know. Everyone else is recommending new languages (in my opinion, it's better to know a few languages very well than to know many languages poorly) or something highly complicated (game design is a fantastic way to go, but one requires a very diverse skill set to create games solo).
Someone mentioned programming books. I highly recommend learning from books. The FAQ has a list of some particularly good ones. However, I don't recommend learning a new language from these. Knowing many languages poorly is not a very useful skill. It's far more useful to know a few languages very well. It's even easier to learn other languages when you have a strong grasp on programming, which requires focus.
But above all, languages aren't important! I recommend sticking with a language primarily so you don't have to learn a new one. You already know Java, so you can go straight into a book on algorithms and data structures without relearning the basics to a language. Don't focus on learning a language, focus on learning how to program.
Learning programming techniques instead of a specific language is far more useful to a programmer. Data structures are mandatory knowledge. Do you know how to use lists (like a linked list)? How about hash tables? What algorithms can you use to search for specific data? These skills can usually be transferred to other languages, sometimes with minimal changes.
So here's my advice: start with a book on algorithms and data structures. Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein is probably the best known book for beginners. Note that you must already know how to program. I don't know how good your programming is, so it may be necessary to first start with a book on Java to fill in the blanks from online tutorials. The FAQ should have some good advice, there. The book I used for Java was Horstmann's Big Java.
Anyway, databases is what I'd expand into next. They're not Java, but a core part of many modern programs. Thankfully, the basics are quite easy to pickup.
A book on software engineering is a good next choice, since software engineering goes over design patterns. Just how would you design a large program? Where do you start? Software engineering is crucial for ensuring projects don't become Duke Nukem's.
Beyond that, I would hope you'd have some specific interests, yourself. For example, perhaps you're interested in AI or security (etc). If you have some personal interests, they make great areas to focus once you've picked up the basics.
But for now, focus on learning to program, not just "languages".
Read about the topic.
Practice.
Set yourself little challenges that you work on, or learn a new language/platform/environment. If you're just starting, try different easy programming challenges you find on the 'net. If you've been doing this a while, do something more sophisticated.
The challenges I've set for myself in the recent past include writing a LISP interpreter in C, building a recursive descent parser for a simple language, and implementing different algorithms I've encountered in books like Numerical Recipes and Introduction to Algorithms.
(Yes, I know; you can download libraries that do these things. But there is something to be gained by implementing quicksort in code from the description of the algorithm.)
The trick is to find interesting things and write code which implements them. Generally you won't become a great programmer just by working on the problems you find at work--most programming jobs nowadays consist of fixing code (a different skill from writing code) and involve implementing the same design patterns for the same kind of code over and over again.
----
When I have free time I cast about for interesting new things to learn. The last big task I set for myself was to learn how to write code for the new iPhone when it came out back in 2008. I had no idea that this would change the course of my career for the next 9 years.
If you aren't doing well in your current CS courses, I'd highly recommend you focus on your university's courses and do well in them before deciding to bite off more than you can chew. Do some research and look for very basic coding books, not ones like this: https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628/ref=sr_1_1?ie=UTF8&qid=1478891766&sr=8-1&keywords=introduction+to+C+programming
Look for a bit more like this: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208/ref=sr_1_1?ie=UTF8&qid=1478891799&sr=8-1&keywords=Head+first+java
This depends on what language you are currently learning right now. Don't worry about entering contests and participating in projects or open source coding until maybe second or third year in especially if you haven't had any prior experience. Don't rush yourself into this, you need to make sure you absolutely understand the basics before going into things like hackathons or being very concerned about internships. Take your time learning, and don't enroll onto too many online courses if you think that you can't handle it. Yes, online courses can be helpful, and will only be really helpful if you treat them like real classes. I would advise against code academy or khan academy to learn languages since I've gone through them and they never helped me really grasp CS material better than a book and actual coding. Key here is to code as you go through a book, or else you'll never learn how to actually code. Do tons of simple programs and if you don't understand code bits, don't get frustrated. Copy paste the code, and use a debugger (a bit more advanced but very very helpful) to go through step by step what the code is doing.
Main Points:
Best of luck to you, remember to enjoy the process, and keep in mind that while you might not like coding, CS isn't coding. It's the principles that underlie what we can do with code. A lot of it comes from really basic logic, you will be surprised in the future how easy some things can be to understand with basic step by step thinking.
"The C programming Language" is an excellent book. I learned most of the concepts and coding from that book.
Kernighan and Ritchie's The C Programming Language
It will teach you almost all you need to know. It is written by the creators of C and is still the best way to learn C.
I even use it as a reference for parts of C I do not use often.
Also, you should try to be running a unix os, since c programming will be much more integrated and easier.
link: http://www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628
I recommend reading and working through The C Programming Language, which will likely be your textbook. Java syntax comes from C/C++, so that part will be somewhat familiar. C is a lot more low-level, though.
Lisp is like magic - it's the programmable programming language - if you learn it, everything else kind of pales in comparison :P
One fascinating aspect of lisp is that it's based on lambda calculus, which is basically a cleaner alternative to Turing machines (Turing machines are basically a mathematical way to describe computable problems). After learning about lambda calculus, Turing machines looked like a hack to me. A decent non-mathematical guide I found introducing them was this: http://palmstroem.blogspot.com/2012/05/lambda-calculus-for-absolute-dummies.html
Even though lisp allows for a lot of functional programming, it's not purely functional, and can be used to write object oriented code, or anything else really.
The books I'd recommend to learning it are:
Your post has too little context/content for anyone to give you particularly relevant or specific advice. You should list what you know already and what you’re trying to learn. I find it’s easiest to research a new subject when I have a concrete problem I’m trying to solve.
But anyway, I’m going to assume you studied up through single variable calculus and are reasonably motivated to put some effort in with your reading. Here are some books which you might enjoy, depending on your interests. All should be reasonably accessible (to, say, a sharp and motivated undergraduate), but they’ll all take some work:
(in no particular order)
Gödel, Escher, Bach: An Eternal Golden Braid (wikipedia)
To Mock a Mockingbird (wikipedia)
Structure in Nature is a Strategy for Design
Geometry and the Imagination
Visual Group Theory (website)
The Little Schemer (website)
Visual Complex Analysis (website)
Nonlinear Dynamics and Chaos (website)
Music, a Mathematical Offering (website)
QED
Mathematics and its History
The Nature and Growth of Modern Mathematics
Proofs from THE BOOK (wikipedia)
Concrete Mathematics (website, wikipedia)
The Symmetries of Things
Quantum Computing Since Democritus (website)
Solid Shape
On Numbers and Games (wikipedia)
Street-Fighting Mathematics (website)
But also, you’ll probably get more useful response somewhere else, e.g. /r/learnmath. (On /r/math you’re likely to attract downvotes with a question like this.)
You might enjoy:
https://www.reddit.com/r/math/comments/2mkmk0/a_compilation_of_useful_free_online_math_resources/
https://www.reddit.com/r/mathbooks/top/?sort=top&t=all
The problem is, most books are ground out by publishing mills and have very little value - especially to more experienced developers.
I try to choose books carefully and buy very few because most simple answers are already online.
One recent purchase which I felt was actually worth the money (i.e., the same depth of discussion and information was unavailable free in such as well-presented format) was:
"Java Concurrency in Practice" by Brian Goetz
http://amazon.com/o/asin/0321349601
This is an example of how high the bar needs to be raised to make a book worthwhile.
Some physical book recommendations:
List of free ebooks: https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books.md#c
I highly recommend reading up on assembly as well, since understanding assembly is invaluable for understanding C. You might also enjoy reverse engineering as a topic, especially since it teaches a lot about lower-level architecture.
Physical books:
Some more (free) e-books:
Other resources: (will add more when I remember/find them)
I've always had a knack for the stuff. When I TAed graduate classes I found this book to be helpful in explaining some advanced statistical concepts in plain language. If you are specifically learning to use the SPSS program, this book is by far the best. Good luck!
Start with a good algorithms book like Introduction to algorithms. You'll also want a good discrete math text. Concrete Mathematics is one that I like, but there are several great alternatives. If you are learning new math, pick up The Princeton Companion To Mathematics, which is a great reference to have around if you find yourself with a gap in your knowledge. Not a seminal text in theoretical CS, but certain to expand your mind, is Purely functional data structures.
On the practice side, pick up a copy of The C programming language. Not only is K&R a classic text, and a great read, it really set the tone for the way that programming has been taught and learned ever since. I also highly recommend Elements of Programming.
Also, since you mention Papadimitriou, take a look at Logicomix.
The C Programming Language
> 3) is it hard to program your own apps? I know a bit
> about programming (limited experience in college).
> Would I be able to pick it up easily?
Don't see anyone answering this part of your question so I'll take a shot at it:
The Pebble is programmed in C, which is not the simplest language to learn, but it's certainly doable and once you master it you'll be in awe of what it can do. It's the programming language of choice for small footprint embedded systems, so you'll find this a useful skill in the long run, even if it's just to understand what others have to do to make your app a reality.
If you've never programmed in C it's probably best to get a book and start reading. I started with Kernighan & Ritchie's The C Programming Language -> and still feel it's the Bible from which all others are derived. Of course, if you under 25 and don't know what a book is, you can always hike off to the Google and start searching "C tutorial").
Pebble Central will provides you with an SDK with all the libraries you need to access Pebble features (e.g. User Interface, timers, comm to/from the watch, etc) but to make this work you'll also need a dev environment to hook all this up to your code.
The traditional/"hard" way to code for Pebble is to set up the Pebble dev environment on your computer and use command line tools to edit/build your app. For this you'll need a copy of the Pebble SDK and a Linux/MacOS machine Inexplicably, Pebble development is not currently supported under Windows, although if you're a real keener you can set up a virtual machine, install Linux and fake it. If you want to go this route, Google "Pebble Vagrant development" and click on the first link okay, if you're really lazy you can click here ->.
Note: I've tried the Vagrant/VirtualBox VM route - trust me, it's currently so poorly documented as to be a true pain in the ass. Not recommended if you can avoid it...
Which brings us to the other alternative. Katharine Berry, an MIT student who apparently dabbles in things Pebble in her spare time, has produced the site Cloudpebble.net ->. This is a fully integrated IDE, with GitHub support and built in SDK. This really does simplify the task of building Pebble Apps, although at the expense of some privacy, as your code lives on somebody else's server. This is no problem if you're developing open source apps or simply teaching yourself but would probably be an issue for commercial developers. Still, I can attest to how much easier it makes things if you're primary focus is on getting your first app done. I love it and recommend it highly.
Whichever approach you take, you'll find the Pebble Central developer site a useful place to hang out. It's got the online docs, links off to developer forums and more. [Pebble Developer Central is located here ->] (http://developer.getpebble.com/).
There are a few examples of programs out there you can use as tutorials and/or starting point for your own designs. I found Katharine Berry's peapod App (a music control app for iOS) to be a good starting point and her httpebble App is the definitive tool for accessing web resources. Her GitHub home is here
I've also written a couple of Pebble Apps and turned them lose under the MIT License (free for reuse if attribution is preserved). My Tempus Fugit App was (I believe) the first to provide multitasking capability, as well as stopwatch, timer a "meeting cost calculator" and multiple watchfaces all in a single app. Source code for this is available here I made an effort to comment the code to help folks figure out what's going on, so hopefully this will help you get started with your own app.
So that's a quick tour of what it takes to get started. Please feel free to post follow-up questions and I'll do what I can to fill in the missing bits...
Ok, let's see. A few quick points:
Rooted in in standard, everyday mathematical notation? public static final volatile interface abstract class transient inner class inner anonymous class objects values boxed values..... etc...
Java Generics has drawn heavily from the functional programming camp which is based on lambda calculus. See google tech talk: Faith, Evolution, and Programming Languages
Extremely easy to read and understand? Go read Java Puzzlers and Effective Java to see how many easy mistakes you can make.
Static types enables blablabla...? Not possible without static typing...? Does he realize that tools like Eclipse grew out of a smalltalk project and that smalltalk pioneered automatic refactoring ages ago? Smalltalk is one of the most dynamic language around, and it's more than 30 years old.
Most bugs are found at development time with java? That's not my experience :-)
Simple puzzle: for which values for someInt does this code fail?
int myPositiveInt = Math.abs(someInt);
assert myPositiveInt >= 0;
The Common Lisp textbook used at Tulane.
The Little Schemer - Has to be one of my favorites
People might argue that you really don't need to learn C. They are lying to you. Go buy this read it over the summer, it will do nothing but help you with anything else you ever decide to code in even if you never touch C again.
http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628
As someone who also has been looking to delve deeper into C for a better understanding of the language and programming in general, I would recommend The C Programming Language, 2nd Edition by Kernighan and Ritchie.
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
While it's not a huge tome of a book, the amount of material and exercises is invaluable, and I've learned more in the first 15-20 pages than I've learned googling or from other resources in the last several months. For 35 bucks new, this book is worth it, although it's even cheaper if you rent or buy it used.
If you already have an engineering degree then you already know how to study. What experience do you have with embedded? If you don't have any then you should be sure it's what you want before you commit to anything huge.
I think the best way to get a job in embedded systems is to build embedded systems, and not bother with language certifcations. I might be going against the grain here a bit but I would suggest starting to dip your toes into embedded systems by buying an arduino and messing around with it.
Arduino gets a lot of flack for being "not real" embedded systems, and while it's true nobody is going to hire you because you can make an impressive arduino project, IMHO it's a great introduction to what embedded is about. The hardware equivalent of "hello world" is blinking an LED. If you are serious about learning then you will quickly outgrow the arduino, but you can always throw away the bootloader and try to program the ATmega with bare metal gcc and avrdude.
I don't know what you already know nor how you feel about math, but things you will want to learn include:
If you get this far and still want to become an embedded systems engineer then you're doing pretty well. I would say just try to build projects that utilize these skills. Maybe you can use your mech background to build a robot and then design the software to support it. Get used to reading datasheets for parts, and imagining what the digital logic inside looks like. Get used to searching google for answers to your questions.
C is good to learn as a beginner, although it is an unforgiving language. If you can write C, you will be able to learn the vast majority of other programming languages in common use today with a very small learning curve.
Any CS department worth anything is going to have you write in low level languages at some point, especially C and assembly.
To get started, you're going to need a good C compiler - I recommend GCC. The C Programming Language is also a priceless resource for anybody interested in learning C. Finally, although this is optional, you should learn to use a "serious" text editor, such as emacs or vim.
That's awesome. My recommendation would then be to apply to the school, study the hell out of your mathematics, and start learning C. (I'd recommend getting familiar with Cygwin and GCC, reading C Programming by K.N. King and trying to work through this.)
Good luck!
If you've never programmed anything before and you really want to learn coding (if it's your priority) instead of rushing out your first game, I think LÖVE is pretty great for that. You get to learn Lua and an awesome framework. There's also Phaser, which you can learn JavaScript or its variants with it. JavaScript is probably more widely used than Lua because of the World Wide Web.
And when you're done with those, you can try to learn Java and use libGDX, or C# and Unity.
GameFromScratch.com has plenty of tutorials to get you started.
When you've decided you want to be an ultra low-level programmer, buy The C Programming Language. Learn the basics of C, and then follow Handmade Hero.
When you're done with that you're probably on your way to become a godly programmer. You'll probably know how to do some assembly and machine code by then.
But first, you're gonna need lots of discipline to even get to anywhere.
There are no shortcuts.
If you just want to make a game, however, GameMaker and Construct 2 are pretty awesome!
Introduction to Algorithms by CLRS
TAOCP is a waste of time and money; it's more for adorning your bookshelf than for actually reading. Pretty much anyone who suggests TAOCP and is less than 55 years old is just parroting Standard Wisdom™.
Godel, Escher, Bach is a nice book, but it's not as intellectually deep in today's world as it was when first published; a lot of the memes in GEB have been thoroughly absorbed into nerd culture at this point and the book should be enjoyed more as a work of art than expecting it to be particularly informative (IMO).
If you're interested in compilers, I recommend Engineering a Compiler by Cooper & Torczon. Same thing as TAOCP applies to people who suggest the Dragon Book. The Dragon Book is still good, but it focuses too much on parser generators and doesn't really cover enough of the other modern good stuff. (Yes, even the new edition.)
As far as real programming goes, K&R's The C Programming Language is still unmatched for its quality of exposition and brevity, but these days I'd strongly suggest picking up some Python or something before diving into C. And as a practical matter, I'd suggest learning some C++ from Koenig & Moo's Accelerated C++ before learning straight C.
Sipser's Introduction to the Theory of Computation is a good theory book, but I'd really suggest getting CLRS before Sipser. CLRS is way more interesting IMHO.
Good news is you have previous experience and C is a very simple language.
Learn C The Hard Way has some weird shit in it (wtf does "make is your Python now" even supposed to mean?) but it is largely good and do tend to recommend it despite the warts.
Really though, why not go straight to the source?
Just make sure you master pointers. It is really useful to understand what memory is on a physical or near physical level to understand pointers. It is one of those concepts that makes instant sense if you come from a hardware point of view, but can trip up newbies with a software point of view.
Read the sidebar.
If you haven't had programming knowledge before, then The C Programming Language by Dennis M. Ritchie and Brian W. Kernighan is right up your alley.
K&R is the book for C, especially if you have prior programming experience.
Il mondo della programmazione è incredibilmente vario, ti consiglio di cominciare con qualcosa che stuzzichi la tua voglia di fare, potrebbero essere le applicazioni web, oppure sviluppare su android o iphone, come la programmazione di videogiochi oppure realizzare un programma per windows o per linux.
Una volta capito cosa ti piacerebbe provare indirizzati su qualche tutorial veramente basilare, e impara facendo.
Se dovessi indicarti un linguaggio da cui cominciare non avrei dubbi: il C.
Non C++ mi raccomando ma il C puro.
Esistono diversi testi incredibilmente validi e oltre alla Bibbia ti consiglio di farti un giro su amazon per cercare qualche introduzione a qualche argomento o linguaggio specifico, tipo "coding for dummies" ecco.
Il python potrebbe essere un linguaggio buono per cominciare a capire, oppure il javascript a livello base.
Quindi in sostanza io ti consiglio di seguire due strade parallele allo stesso tempo, da una parte di fai un pò di culo con le basi, quindi imparando il C, dall'altra puoi divertirti a sperimentare con le tecnologie più recenti. Ad esempio su codeacademy puoi già cominciare a fare pratica di javascript (penso ci siano altri linguaggi disponibili).
Gli argomenti base che dovresti cominciare a studiare riguardano la programmazione procedurale ad oggetti.
Esistono altri paradigmi di programmazione come ad esempio quella funzionale ma al momento lasciala pure stare.
Ovviamente tutto in inglese, mi raccomando.
> I'm taking a Unix class in c/c++.
Those are two very different things. Please clarify.
> We are using the book by Sobell. I want to ask if I should read the book?
Uh.. if it's required for your class, yes you should obviously read it. If you are looking for supplemental material, I'd suggest:
La plupart des formations t'apprendront rien d'utile mais prendront volontiers tes thunes.
Sinon t'as le CNAM, c'est bien, si tu veux à tout prix un vrai diplôme (ça aide à trouver le premier taff).
Tu peux aussi faire ça en solo :
Bref si tu fais rien que la moitié de ce qu'il y a dans la liste t'es facilement employable comme admin sys en apprenant quelques bases des réseaux . Avec python et de la virtualisation en plus t'es en chemin pour devenir devops (l'un des profils les plus recherché sur le marché).
En plus tu seras plus compétent que la majorité des bonhommes sortis de formations privées à la noix.
Uhm, I would first start with a complete introduction to OOP. This book:
http://www.amazon.co.uk/Thinking-Java-Bruce-Eckel/dp/0131872486/ref=sr_1_1?ie=UTF8&qid=1451750882&sr=8-1&keywords=thinking+in+java
helped me a lot. Once you go through with it, you should have a pretty solid understanding of OOP and Java.
Also I cannot stress enough how important this thing is, many people seem to neglect it nowadays:
http://www.oracle.com/technetwork/java/codeconventions-150003.pdf
I recommend following books once you understand Java more :):
Effective Java by Joshua Bloch:
http://www.amazon.co.uk/Effective-Java-Second-Joshua-Bloch/dp/0321356683/ref=sr_1_1?ie=UTF8&qid=1451750978&sr=8-1&keywords=effective+java
Head First - Design Patterns by Eric Freeman:
http://www.amazon.co.uk/Head-First-Design-Patterns-Freeman/dp/0596007124/ref=pd_sim_14_2?ie=UTF8&dpID=61APhXCksuL&dpSrc=sims&preST=_AC_UL160_SR138%2C160_&refRID=1J4FWDFZDD8XERKQEY2Q
Clean Code by Robert C. Martin:
http://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=pd_sim_14_3?ie=UTF8&dpID=51oXyW8WQwL&dpSrc=sims&preST=_AC_UL160_SR124%2C160_&refRID=1J4FWDFZDD8XERKQEY2Q
We need a book like The Little Schemer, but for haskell.
If i had to suggest one book to you I'll suggest buy "The little schemer". Take a pen and a notebook with you. Keep the laptop aside and solve it on paper. Don't do anything else. Read it, solve it on paper then rest and think about what you just learnt. This book will change the way you think about computation if you have never seen any functional language before.
Oh and the book is in Socrates style, so you'll not feel you are just reading a book you'll feel you are talking to a master and having a dialogue with him. Some people can't get that style. It worked wonders for me.
Give it a shot. And pleasure is mine :)
Ref: https://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992
The Little Schemer takes you from zero? to meta circular interpreter in 10 chapters of questions and answers.
I reccomend the SICP book and SICP Video Lectures taught by Gerry Sussman, who is one of the creators of Scheme.
Why?
Higher-order procedures (Lecture 2A), Metacircular Evaluator (Lecture 7A) are simply badass if you've never been exposed to them.
Also, pick up a copy of The Little Schemer
Why?
I think the book does a good job of covering the mind-blowing [for me] concepts of continuations and the applicative order Y-combinator
You can find some in-the-browser Scheme interpreters too like this one:
http://repl.it/languages/Scheme
Friedman & Felleisen Little Schemer seems noteworthy. Unorthodox, but nicely done.
And while I think that Meyer's technical writing isn't exactly the best, Object-Oriented Software Construction has a nice visual layout and is one of the few computer books that uses color effectively.
You missed:
Filthy Rich Clients
http://www.amazon.com/Filthy-Rich-Clients-Developing-Applications/dp/0132413930
Not so relevant now that JavaFx is here, but still a good way to understand how to properly write Swing code that doesn't put Java to shame.
Java Concurrency in Practice
http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
A must read for anyone writing multicore code on the JVM.
Read C Programming: A Modern Approach by KN King. It's one of the best introductory C books available.
I've been self-teaching myself C through various books/courses/series the last few months (I'm still not that great), and so I have some suggestions about good places to start learning.
Books:
Courses/Videos:
Resources:
Other than that, you should maybe look into trying out Linux, because it's more developer-friendly than Windows (such as having a C compiler out of the box). And the whole kernel and many core components of the OS are written in C, which are all usually open source, so you can learn from, and contribute to them.
Good luck, friend.
Check the syllabus and get a head start on the topics covered. My two favorite C books are C Programming: A Modern Approach and C Programming Language. The first one is for absolute beginners, while the second one is for someone who already knows the basics of programming.
I suggest disconnecting the two. You need to have a firm grasp on C or C++ programming before going into graphics. It's a long road, but worth it.
This book is considered the authoritative source on C programming, written by the creator: http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628
Here are some text based tutorials that I used to learn OpenGL recently.
http://openglbook.com/the-book/
http://www.swiftless.com/tutorials/opengl4/1-opengl-window.html
http://en.wikibooks.org/wiki/OpenGL_Programming
Good luck!
If you're looking to learn C, get K&R.
Kernighan and Ritchie
+1 for mentioning malwareunicorns Reverse Engineering Malware 101 course. I'm pretty excited about starting that after I'm done with some Powershell stuff.
Books for: /u/Kreator333 and /u/curiousdoggo
C/C++:
Assembly/C:
Also OP while your learning the basics here do as many examples as you can. Don't just read it and assume you know everything. For C you can try coding a bunch of classical ciphers and for ASM, debug the assembly of simple programs in gdb. (check out godbolt) or try coding a echo client/server in Nasm.
I haven't read either of those, but I did enjoy and find a lot of value in K&R and 21st Century C.
Any book on technology. Like this one. Oh yes, most Indians wanting out are settled in the US or the UK or Australia nowadays. I'm mostly a lurker here and on reddit. I don't understand most of the posts, especially the ones on politics, although I'm learning new terms like Dail and Taoiseach and I'm pretty sure I don't know how to pronounce these words. I'm trying to participate in self posts like these.
The C Programming Language by K&R is probably the first book people recommend.
Learn C The Hard Way is more hands-on, but if you already know other programming languages youll be fine.
I dont know about any interactive courses, but HackerRank has lots of challanges you can solve in a multitude of languages (including C) which is pretty close to CodeAcademy. Keep in mind that it gets hard pretty quick, so it is better to be somewhat comfortable with your chosen language before doing them.
If you want to know what programming is like, try Stanford's CS101 course. It's very basic but gives you a taste of what you can learn. You can breeze through it in a week or two. Don't worry about memorizing the code, just focus on the concepts.
If you finish that and enjoyed it, you can try M.I.T's 6.00 1 course. It teaches you Python, one of the easier programming languages to start with. This course is longer than the first one and is an actual programming course. It recommends the book Introduction to Computation and Programming Using Python if you need it.
After that, I would say give Harvard's CS50 online course a go. This course teaches you the C language and is easier to complete if you did the first two courses. This course recommends the books: The C programming language book or C programming: an absolute beginners guide for a more beginner friendly (and budget friendly) option.
Good luck and have fun
Pick up a copy of K&R (ANSI edition). It is thin and the definitive reference. You can burn through the exercises pretty quickly, especially if you have used Java, C++, or C#.
Ridiculously-priced hard copy (IIRC, I paid about $20 for my copy.)
E-book PDF
The C Programming Language is what I'm reading now.
http://www.amazon.com/exec/obidos/ASIN/0131103628/ref=nosim/schmcreadesis-20
I would make the logo a blue C, like in the title page of The C Programming Language: https://i.imgur.com/yMpmgEp.png
There are tons of resources in many different formats of many different qualities.
On the sidebar to the right, there are quite a few. You should pick the format you're most comfortable with -- book, video, course, etc.
As I've read a few books, for absolute beginners, Intro to java: Comprehensive was pretty good. Very easy to get into to.
Thinking in Java or The Java Reference Book are pretty good for people who already know the concepts of programming.
I haven't watched videos for learning java or taken any courses, so this is all I can give you.
EDIT:
I've found a playlist on YouTube, I've only watched the two first videos, but they seem great.
As a beginner, you'd first have to install Java and also a tool to easy use java -- an IDE (Integrated Development Environment) for example. Plenty of YouTube videos covering that.
Here is a course that alot of people seem to like and recommend: MOOC
Lastly, some advice: Stick through with it if you really want to program. Learning to program at first is the hardest part on the journey.
The little schemer and the seasoned schemer. They start feeling like a really easy, gentle intro to programming. The dialog presentation style is amusing, and some serious Socratic style teaching going on about programming with an algebraic bent, and the second book builds up to a surprise ending, a rather interesting program -- I won't spoil the surprise for you.
Try the book "The little schemer"
The Little Schemer - 4th Edition https://www.amazon.com/dp/0262560992/ref=cm_sw_r_cp_apa_i_OST2Db7M254TR
I couldn't wrap my head around anything past very basic recursion. Once I had completed this book, I felt like I had a fairly solid understanding of the topic. Well worth the money, in my opinion.
Edit: As a side effect, you learn a little scheme which happens to be a very fun language.
Well, it's still in print. And it's worth getting.
While I have not read it, I hear great things about The Little Schemer
The Little Scheme on amazon
I used SICP which can be found here. It is really great!
http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
For concurrency you can't go wrong with Java Concurrency in Practice
"Java Concurrency In Practice" is the text that I would recommend.
http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
You would love C Programming: A Modern Approach.
The book gets into some pretty advanced stuff. From MAKE files, to programming idioms, to how to organize your code.
It's a really dense book, but super well organized, super clear for almost all topics (only two or three topics I needed to google), and most importantly very thorough.
I was reading the book to refreshen my C. Out of curiosity, I looked up common or important interview questions on embedded C, and pretty much the book nailed it down.
> all of the courses on coding there will be using C [..] should I start learning C so that it'll be easier to follow classes for exams next year?
C is a completely different animal and learning more Python will do very little to help prepare you. If your intent is to get ahead of the game so you'll get the most out of your courses, then starting C now will help more than continuing with Python, IMO.
That said, C is much more difficult to learn, and you might need the help of an instructor more there. It really depends on the person. I learned C on my own from K&R. YMMV.
Download:
Notepad++
MinGW GCC
Buy/Borrow/Download:
The C Programing Langiage
The Standard C Library
Read:
Answers To Exercises
Computer Science For Everyone
C Tutorial
Practice.
Profit.
Got a Question?
Learn 'C' and 'Python'.
'C' is the lingua-franca of computers.
Start with K&R's 'The C Programming Language'.
Python as a high level language for getting things done. 'Dive into Python' is a good start.
Introduction to Algorithms by CLRS. Used in almost every algorithms class I've heard of, and a great reference book. It's about 1300 pages, so don't try to read straight through it.
C Programming Language by K&R. This is a C programmer's Bible.
Design Patterns by the Gang of Four
This is a little more of a topic book, but The Art of UNIX Programming by Raymond.
These are all either pretty common, or almost essential. You'll probably see these in your curriculum anyway, and you should. These are a good cornerstone.
Io direi di iniziare con il C.
Il manuale che consiglio(io) è, solamente, questo:
The C Programming Language: ANSI C Version
On top of what any other comment recommends here I also recommend that you learn C very well (structures, unions, pointers, bitwise operations, static, extern, volatile, etc)
This is my favorite C book
http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?ie=UTF8&qid=1415412105&sr=8-1&keywords=modern+C
also read or skim over the manual of whatever compiler you choose, you will sometimes be stuck and remember that your specific compiler's features offer the solution to your problem.
Yes. Everyone should own a copy of: https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628/ref=sr_1_1?ie=UTF8&qid=1494216538&sr=8-1&keywords=c+programming
Not sure about EE-related topics, but for CE you're almost guaranteed to use these textbooks:
And of course, the most important and useful textbook of them all for almost anything coding-related.
"Thinking in java" is the best book.
Thinking in Java https://www.amazon.in/dp/0131872486/ref=cm_sw_r_cp_apa_i_T9wrDbHHP4R1A
This list isn't about "coding" per-se but is more focused on concepts, sw.en., practices, etc.
Thinking in Java is one of my favorites, the definitive introduction to object oriented programming and design.
Code Complete, Don't know anyone who hasn't heard of this so far
The Pragmatic Programmer: From Journeyman to Master
I learned it from this book around 25 years ago:
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
But you can probably save the money and just use any tutorial on the internet. I'd recommend just starting out with C++ though. When object oriented programming went mainstream, I had a lot of trouble switching over to the new mindset. You're better off learning OO from the beginning.
Just learn C. There are tutorials all over the place, or you can buy http://www.amazon.com/The-Programming-Language-Brian-Kernighan/dp/0131103628
ATLien325's comment explains that terminology in a pinch, but it's not really going to get you very far on your way to learning how to hack. Your best bet would be to pick up books like this, this, and this. Then you'll have an idea of how programs, file systems, and networking work behind the scenes and you are much better situated to begin to learn how to hack them.
You're also going to need to learn how to effectively use a search engine.
I have been working through C Language: 2nd Edition have been having a few problems understanding a few things but good book!
I had no real programming experience before I started C as part of a university course. Thankfully, my first course was on the language itself so the problems were all based around understanding the fundamentals of C itself (not on the theory of algorithms).
I know some people here are criticising it as a first language choice, and I'll admit that I am in two minds about recommending it. However, I'm struggling to think of a better choice.
So I'll assume that isn't up for debate or maybe even the class recommends it?
Unfortunately I have never taken a relevant MOOC in this area. I have looked at several books however:
I can't avoid mentioning The C Programming Language by Kernighan and Ritchie aka K&R - if only to say I dont recommend it. I own a copy and feel its not really appropriate for a complete beginner. Its not a book you can sit down and read through. Its basically a reference manual, to be used to help provide context for a particular problem. Unfortunately, at the start I would know what I wanted to achieve but didn't know the correct terminology to describe it, in which case the index becomes useless (even Google can't work these types of miracles).
Absolute Beginner's Guide to C by Greg Perry is however very readable. Its probably a little too verbose for someone who has prior programming experience - as the title suggests its written for the absolute beginner. It should be ideal for you however. If you are prepared to go for a book rather than a MOOC I highly recommend it.
The C Programming Language
If you want to learn C - you should read K&R's The C Programming Language (the bible for C) and do all the exercises.
Also - the first half of CS50 is in C. r/cs50
Buy K&R and do the exercises.
You may also find /u/_Madk's list of projects interesting. It focuses a lot of games, if you're into that. A lot of those are pretty easy to show to non-programmers, which is always nice. (ex. Dad can appreciate Tetris more than your Red-Black Tree)
Immediate, unequivocal answer: Thinking in Java by Bruce Eckels.
Here are some books that I feel have made me better professionally. They tend toward the comp sci side, some are more useful than others.
Lastly, find some open source projects and read their papers, then read their code (and then the paper again, then the code...etc)! Then find their blogs and read those too. Then find them on Twitter and follow them. As others have said, the field is evolving very quickly, so half the battle is information sourcing.
Okay I came in to school like you with very little programming experience. Probably even less than you since I only messed around on my TI. I am going to assume you're only taking ECE110 first semester. If not I recommend getting in as soon as you can. They may give you some crap about it depends on last names, but it doesn't really matter. After a certain point its open to everyone.
Either way, programming in ECE doesn't really start until you take ECE190 which is all C programming and a very simplified assembly language for educational purposes. Like I said I went into the class with practically zero programming experience and still did very well in the class, so don't let anyone scare you on that. If you put the time aside to read the book (really helpful in 190) and doing your MPs/ask the TAs questions you will do fine.
I wouldn't fret too much over the summer with learning stuff, but I would definitely recommend C over Python. Python is pretty easy to pick up, but its also very high level. If you need an introductory language to get familiar you can try python for a bit, but I'd go with C after that. It is worth noting that the other two required programming class you have to take (CS 225 and ECE 391) are C++ and C/x86 respectively. So learning C should definitely be your focus.
I recommend the book written by the creators of the language. The book the school requires is pretty good too actually and would give you a better idea of what to expect. They're kind of pricey, so its your call how you want to get them. As a heads up, codecademy does have Python, but not C as far as I recall. I've never used lynda do I can't comment on them C Book ECE 190 Book
I honestly wouldn't fret too much about it all. Enjoy your summer, depending on how busy your schedule is next semester you can probably set aside some time now and then to study some languages. If you have any more questions I'd be happy to answer.
"the" C book: http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
K&R is the go-to C book, IMO.
Read "The C Programming Language" ( https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628 , it's also on libgen)
​
Make sure you're cool with data structures (most of them are important, but hash tables are very key because they form the basis of caches, something you'll have to learn)
​
Look up some basic digital logic (up to flip-flops and d-latches, and cover some FSM too if you have time)
​
I don't really know of any great resources to self-study assembly, so you'll have to just make the most of the lectures on that.
​
Prof Nagarakatte is super fair imo. Multiple project extensions, a multitude of extra credit opportunities (I believe it totaled to something around 15% of the total course grade with max extra credit when I took it), and no curve- you just need an 85% (after extra credit is applied) to get an A, which is nice. The best thing about him, though, and something I've never seen anywhere else, is that the TAs know what they're doing. He tries to get his own grad students TA positions, and so he's got a great working relationship with them. Go to recitation, because the TAs know what's up and will often write out significant portions of the projects for you. In my opinion, the course wasn't particularly easy, but an A is definitely achievable as long as you put in the effort. His lectures are pretty fast, but the slides are online and fairly self-explanatory, so try to go over them after each lecture if you can.
Haha, sorry it is a commonly referenced book I did not even think about it.
Brian Kernighan and Dennis Ritchie (early developers / creators of UNIX) wrote a book called The C Programming Language. Make sure you get the second edition though.
I'd also recommend Paul Graham's own ANSI Common Lisp: http://www.amazon.com/gp/product/0133708756/
I liked it slightly better than Practical Common Lisp for getting the Lisp way of thinking across... Not as much, um, practical code, though.
Oh, and if you really want an "aha" experience then there's
Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp by Norvig: http://www.amazon.com/gp/product/1558601910/ which both introduces Common Lisp and takes you all the way up through writing classical AI systems using it.
Learn math first. Physics is essentially applied math with experiments. Start with Calculus then Linear Algebra then Real Analysis then Complex Analysis then Ordinary Differential Equations then Partial Differential Equations then Functional Analysis. Also, if you want to pursue high energy physics and/or cosmology, Differential Geometry is also essential. Make sure you do (almost) all the exercises in every chapter. Don't just skim and memorize.
This is a lot of math to learn, but if you are determined enough you can probably master Calculus to Real Analysis, and that will give you a big head start and a deeper understanding of university-level physics.
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
Design Patterns by Erich Gamma , Richard Helm , Ralph Johnson , John Vlissides
https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/ref=sr_1_3?ie=UTF8&qid=1549541116&sr=8-3&keywords=design+patterns
Concurrency in Practice by Brian Goetz
https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601/ref=sr_1_1?ie=UTF8&qid=1549541190&sr=8-1&keywords=concurrency+in+practice
Clean Code by Robert C Martin
https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=pd_sim_14_4?_encoding=UTF8&pd_rd_i=0132350882&pd_rd_r=cf3a76e3-2ad0-11e9-91c7-79eddbe046cc&pd_rd_w=RVwGU&pd_rd_wg=ZJ2Iq&pf_rd_p=90485860-83e9-4fd9-b838-b28a9b7fda30&pf_rd_r=4P48EDFQ0VNRGZYAE96S&psc=1&refRID=4P48EDFQ0VNRGZYAE96S
These two are good reference guides despite their age. Lots of good best practice stuff.
In addition to Code Complete 2, which, while very dense, is a compendium of wonderful coding knowledge... I recommend Clean Code by Robert C. Martin.
One of the best books on concurrency that I've ever read is definitely Java Concurrency In Practice it's (obviously) written with Java in mind, but most of the concepts map rather easily to constructs in other languages as well.
The standard for design patterns is still probably Design Patterns (colloquially "Gang of Four")... but I've heard good things about Head First Design Patterns as well, despite the really stupid cover.
I cannot recommend The Java Programming Language highly enough. It was written by the creator of Java, and it shows. It's the reason I've spent my 12 year programming career using Java.
I'd recommend learning Python. It's really simple to transition to for someone who knows MATLAB and it's really useful.
The official Python tutorial here is good: https://docs.python.org/3/
Python 2 is definitely more widely used right now, but Python 3 is the future of the language, so I'd go with learning 3 if I were you.
C is good to learn, you can either try Kernighan and Ritchie (the "bible of C", actually written by the creators of the language), but I hated learning from that book. I picked up this book and it was fantastic. Most online C resources suck ass.
Also, "Customers Who Bought This Item..."
"Forbidden Lego: Build the Models Your Parents Warned You Against"
BRB, Christmas wishlist
Numerical Recipes is a veritable catalogue of different methods. Depending on what field you're interested in though there is surely a text with a title along the lines of 'Computational methods for [insert field] physics'
I recommend Andy Field's book
Applied Predictive Modeling by Kuhn and Johnson
Gives good interpretations of different approaches as well as listing the strengths, weaknesses, and ways to mitigate the weaknesses of those approaches. If you're an R user, this book is an excellent reference.
There is the second edition (2018) of APM
Check out here:
https://www.amazon.com/Applied-Predictive-Modeling-Max-Kuhn/dp/1461468485
Most of what you need to know: http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
The rest of it
C
Books:
The C Programming Language
Haskell
Books:
Learn You a Haskell for Great Good!
JavaScript:
List of Resources:
javascript.crockford.com
Buy and read this book.
Probably one of the best books for starting in software engineering: C Programming Language - K&R Used is about $20.
It will frustrate you, and you will begin to hate everything about the book and programming, but if you can learn how to solve problems such as the ones presented to you then you will have a good solid foundation to tackle many other more interesting and useful tasks.
Per testare le acque velocemente puoi usare https://rubymonk.com/ (introduce Ruby in modo basico). Anche Coursera, Khan, Udacity e simili hanno corsi introduttivi sulla programmazione.
Mentre se vuoi imparare a programmare, il percorso deve toccare almeno tutte queste tappe, in ordine:
Organization-Design-Fourth-Edition/dp/0123744938)
Da qui puoi partire e specializzarti in quello che ti interessa
This solution requires some knowledge of how C works. A pointer is a number referring to a point in memory (and memory is one continuous blob of data). A C string is just a pointer to a character- you start at the location given and keep reading until you hit a NUL (character 0). C doesn't have a boolean type, so you use 0 is false and anything else is true. Once you understand those things, it's a fairly straightforward answer- you start at the beginning of the string, increment the pointer (you can literally imagine a finger pointed at a specific spot in a container if it helps) until you reach the end of the string (marked by character 0), then swap the character from the front with the character from the back, moving each pointer towards the middle as you go.
Having enough knowledge of C to implement this solution is different than a general knowledge of algorithms. On the C side of things, you could read something like Learn C the Hard Way, or buy a copy of K&R if you just want something to refer to as you practice. On the algorithms side of things. For the algorithms side of things this is a pretty popular textbook on the subject.
Every Preschooler needs to have read and studied this!
Yeah, sure. Here you go.
If you're learning C and not C++ I highly recommend picking up The C Programming Language. It's a fantastic introduction to C and unmanaged languages but you do already need to know how to program to get the best out of it.
This book
First you need a compiler. IMO the best thing to use is GCC, the GNU compiler, on linux. It will force you to learn how to write your makefiles and you'll get more exposure to linking. If you're committed to windows there is Microsoft Visual studio, but this is not my domain. I remember using an IDE called Dev-C++, a free software, in college and it can compile C. But by sophomore level courses we were using GCC. If you're running Mac OS X you can get GCC using the brew package manager.
Then you need a 'resource' that will help you. C Programming Language, 2nd Edition by Kernighan and Ritchie is an excellent resource. Its dry and to the point and it makes for a good reference later on. I'm sure there are a lot of free online classes and tutorials to get you started as well.
One thing I will say is that C is a great language to learn, but you can't do much with it without a good understanding of data structures and algorithm analysis. I assume you'll be in a systems level (firmware, kernel, driver) of abstraction. Here you have to be resource conscious and usually don't have space for bloated libraries or inefficient routines. That's why an understanding of data structures and algorithms is key to writing efficient code and will take you much further than just understanding the languages syntax and structure.
Others have mentioned that this is probably not the route to go with "0 computer knowledge". I would agree with them, but in case you decide that you really must start with C, here is the book. It's the most recommended resource, and it is for a reason.
C is a very small language that is easy to pick up, but takes a long time to master. This book is considered the gold standard. Good luck!
Spend few years with this, then ask questions.
You'll do fine. You're a physicist, second smartest people in the universe behind the mathematicians :)
Pick up a copy of 2nd edition K&R C and go through it. It's a short book and has everything you need to know about C.
I doubt they are going to throw you in too deep and it's likely they will have some experience with the environment since they seem to be specifying it. That is, you should have a number of tools at your disposal. If you get stuck, just ask someone.
The C Programming Language:
http://www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628
That book is generally considered the C Bible, and a great introduction to C. It's worth keeping in mind that their library isn't clear about what functions are insecure, however.
Edit: as /u/mianosm pointed out, I actually meant The C Programming Language is the C bible. (The book can be found online as well.)
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.
I made some Python code quizzes that teach by example. The quizzes follow The Little Schemer teaching style.
I second Practical Common Lisp, and may I recommend ANSI Common Lisp and The Little Schemer (I know its scheme, but when I did the exercises I did them in LISP).
There is now a 4th edition, which has a different name.
Since you're fuzzy on the whole "Turing Complete" concept, I wouldn't start at the toy app level. The best place for you is probably The Little Schemer with javascript transformations from http://javascript.crockford.com/little.html applied (Unless you want to get yourself an actual Scheme implementation, which would be fantastic). Also, if you work through both that, and "Structure and Interpretation of Computer Programs," you'll have super-high nerd cred.
I'd start with this article. Finding newer versions of the books mentioned here is going to get you going on the right path. Here's a few I've picked out that I've personally read over the years.
Java: A Beginners Guide - Doesn't really get much better than this as far as an introduction into Java. Clean examples, pretty easy to follow. Would be a great place to start
Effective Java - This has historically been an excellent reference for Java. It's not entirely beginner friendly, but if you have at least a working knowledge of Java it's an excellent book to have around. Note: The link is for the 3rd edition which is coming out soon, I assume it will be as good as the previous editions, but in any case the information from the previous editions is still worthwhile even if there are newer features in Java 7/8/9 which is covered by the 3rd edition
Java Concurrency in Practice - As you become more advanced this book can help guide you along the ways of concurrent operations in Java and pitfalls/issues you'll run into (and how to avoid them)
C Programming: A Modern Approach ( https://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?ie=UTF8&qid=1484676207&sr=8-1&keywords=c+programming+a+modern+approach+2nd+ed.+k.+n.+king+2008 ) is quite a good book that you might want to pick up.
Another good follow up to the aforementioned book is 21st Century C ( https://www.amazon.com/21st-Century-Tips-New-School/dp/1491903899/ref=sr_1_1?ie=UTF8&qid=1484676272&sr=8-1&keywords=21st+century+C )
Thinking in Java - Bruce Ekel
Head First Java - Kathy Sierra
Stanford's Programming Methodology Lecture Series
If you're after a solid understanding of math, I recommend learning from actual math books. Keep "mathematical methods" books for reference and review. Some recommendations:
Linear Algebra by Lang
Fundamentals of Complex Analysis by Saff and Snider
Fourier Series and Boundary Value Problems by Brown and Churchill
These books will be significantly more rigorous than Boas, but maybe seeing everything developed carefully will be easier for you to understand.
I don't know where you are in physics, but if you've got any quantum mechanics classes coming up, then I would focus on linear algebra, as it is very important. (And not just the finite-dimensional R^n stuff...make sure you understand vector spaces of possibly infinite dimension over general fields, and C in particular.) For classical mechanics and electromagnetism, vector calculus is probably the most important, but things like Fourier analysis and residue integration can show up anywhere.
Saff and Snider is great for applied complex analysis. In my opinion it strikes a perfect balance between accessibility and rigor for a first course on the subject.
Visual Complex Analysis is another good choice, but it might be a little more advanced than what you're interested in.
The first half of Lang might also be a good choice, but Lang takes a slightly more formal, proof-based approach.
I've also skimmed through Brown and Churchill, which looks quite good but is prohibitively expensive.
Finally, you can find many cheap (~$10) books on the subject by Dover. The only one I've looked at is Knopp, which is quite formal and light on computation, but might be a good supplement. Here's another Dover book with outstanding Amazon reviews.
Complex analysis is both very elegant and very useful. Best of luck with your class!
There are different variants of Lisp. One is Common Lisp. A really good book on it is online for free: Practical Common Lisp.
I have heard The Little Schemer recommended for learning Scheme, but I've never done so myself or read it.
Your math background really shouldn't be an issue. If you're curious, though, check out this primer on lambda calculus.
Also highly recommended is The Little Schemer, which should fit your bill perfectly as a beginner to functional programming.
The most amazing demo I've seen at a meetup was done with
Overtone
. Whether or not to pursue Clojure or Python is a matter of taste/inclination. I think it would be really hard a priori to determine it since it requires a fair amount of exposure to decide whether or not you are interested in computing as an intellectual exercise.If you think you'll end up writing code a fair amount, then this is like any trade: invest in good tools to get professional results. In my opinion, Clojure is the superior tool (compared with Python).
Both Python and Clojure claim Lisp as an antecedent but Clojure has these "killer features":
Python is really nice but after having worked with it for years, I felt that I could do better. Things that pushed me away:
I wholeheartedly recommend reading SICP to anyone who ends up writing code in Lisp because it is a great way to expand one's mental model of what's possible in terms of capturing abstraction in code. And I think Scheme is a really nice language to learn. If you are interested, you might want to look at The Little Schemer. I have found Chez Scheme (now free) to be excellent.
Good luck--feel free to write if you have any questions.
Cheers! afm
Groovy is a scripting language so it solves a fundamentally different problem than Java does. It's fast enough for most things but it doesn't approach the speed of Java as it does a lot more work (hence burns more CPU time) to give you advanced features. When you want to build something big and powerful, you will choose Java over Groovy.
It's worthwhile learning both Java and Groovy as both run on the JVM and can interface directly with each other's objects. It's common to write a Java application with pieces of the codebase written in Groovy or the reverse: a Groovy application with pieces written in Java where better performance is required.
Especially while you're in school, learn as many languages as you can. Each new language you learn will teach you something new about programming and will improve your overall effectiveness as a programmer. Additionally it'll make it easier for you to keep up with technology. I've been a professional programmer for 4.5 years and have used more than 10 languages in my day to day work. It's expected that you can pick up a new language fairly quickly when necessary.
Specifically try to learn different classes of languages. Java is a Statically Typed, Compiled, Object Oriented Language. Scheme, on the other hand, has none of those attributes. It's a Dynamically Typed, Interpreted, Functional Language. Check out The Little Schemer if you're interested.
I'm glad someone suggested scheme. Then get her The Little Schemer. It's a nice introduction to the language in the form of step by step questions.
Warning: Food related examples may cause hunger.
Functional programming is notoriously difficult to teach due to people learning it and getting stuck in jargon. Then it becomes almost impenetrable when you combine that with a language with a totally new syntax (like haskell). There's an old joke that's somewhat tired but expresses this well: "what's so hard about monads? It's just a monoid in the category of endofunctors".
That all being said, I think that means the best way to seriously get into it is to avoid resources that focus on jargon. Unfortunately javascript is not a great language for FP, so most of the great resources I can think of focus on other languages:
https://fsharpforfunandprofit.com/rop/
I learned using Dr Racket and this little book: http://www.amazon.com/exec/obidos/ASIN/0262560992/ref=pd_sim_books/103-5471398-9229403
The little schemer is great.
I really like Java Puzzlers.
You probably won't need to do anything until you actually start working, because you don't know what the tech stack of your company looks like yet.
For me, the generic Java-centric books that I think every Java developer should read are the following. They are the only Java books I did not end up burning/shredding:
java.util.concurrent
API that was introduced in Java 5, which makes writing concurrent code easier depending on your use cases.Beyond either of those, though, I really wouldn't care about any other dead tree Java book. You'll probably spend significantly more time learning internal libraries and 3rd party stuff like Spring or Guice or Apache Commons or whatever your company uses.
A good resource is Java Concurrency In Practice. Sounds like you'd be interested in Item 5.3: Blocking Queues and the Producer-consumer Pattern. Unfortunately I can't share it with you as it's copyrighted, but here's the short code snippet from it:
Producer & Consumer:
public class FileCrawler implements Runnable {
private final BlockingQueue<File> fileQueue;
private final FileFilter fileFilter;
private final File root;
...
public void run() {
try {
crawl(root);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
private void crawl(File root) throws InterruptedException {
File[] entries = root.listFiles(fileFilter);
if (entries != null) {
for (File entry : entries)
if (entry.isDirectory())
crawl(entry);
else if (!alreadyIndexed(entry))
fileQueue.put(entry);
}
}
}
public class Indexer implements Runnable {
private final BlockingQueue<File> queue;
public Indexer(BlockingQueue<File> queue) {
this.queue = queue;
}
public void run() {
try {
while (true)
indexFile(queue.take());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
And startup method:
public static void startIndexing(File[] roots) {
BlockingQueue<File> queue = new LinkedBlockingQueue<File>(BOUND);
FileFilter filter = new FileFilter() {
public boolean accept(File file) { return true; }
};
for (File root : roots)
new Thread(new FileCrawler(queue, filter, root)).start();
for (int i = 0; i < N_CONSUMERS; i++)
new Thread(new Indexer(queue)).start();
}
Two Java specific books you should read cover to cover (and keep around as an effective reference) are Effective Java and Java Concurrency in Practice, and you should also seriously consider reading Design Patterns. The examples in it aren't written in Java but they hold for all OO languages.
If you want a deeper understanding of concurrency, the go-to book is Concurrency in Practice.
For Spring, the go-to book is Spring in Action.
The best book I've read for OOP is Agile Patterns, Practices and Principles for C#. The first 1/3 of the book is Agile stuff, but the rest is a wide variety of topics in OOP. There used to be a Java version of this book, but the newer version is C#. But the C# code is nothing to different than what you would do in Java.
Java Concurrency In Practice is the book you want to read.
I'm not too sure about a general purpose book, but if you are interested in learning about Java's concurrency stuff I'd recommend Java Concurrency In Practice. I'm sure you'll see threading in the corporate world and this book was actually recommended to me by a Google employee who was a guest professor for a semester.
We use it at work for asynchronous service calls. We deal with heavy amounts of data sometimes requiring hundreds of separate service queries. If we do them sequentially it takes a solid minute, but if we do them asynchronously we can really shave that time down. As others have said, though, it adds a LOT of complexity. It is also difficult to write unit tests for. If you are genuinely curious I would recommend Java Concurrency in Practice to learn more about it.
Coming to Java after a bunch of other languages, I found The Java Programming Language and Effective Java really helpful.
The first is a massive, and incredibly dry tome, but it leaves out nothing. Every question I had about the language was answered somewhere in the book. No technical details were ignored or glossed over. If you're looking for something really technical, it's hard to complain!
Effective Java is more useful as a sort of crash course in Java design patterns. The chapters are more conversational, but they give a really good sense of what professional idiomatic Java looks like, and how to think about the language. If you read through it, and understand the thought process behind each chapter, you'll have a really good sense of what good Java looks like.
Agreed, C Programming A Modern Approach, 2dn edition is the textbook I would recommend if you want to learn C, K&R is classic , but it lacks a lot details in C which are coverd in books like Pointers on C and C Traps and Pitfalls, C Programming A Modern Approach, 2dn edition covers most, if not all, of them.
I can't recommend a good site, but I will recommend an amazing book which you can find here: https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
Modern software development is more about being able to search for the answer you need when you need it, than learning anything on the off-chance it might be useful in the future.
I remember when my desk was littered with books, and browsing the tech section of my local bookstore was a happy diversion and source of inspiration. My list of RSS feeds was a mighty well tended garden.
Sadly no more. :(
The classic readings would be things like Joel on Software (blog), the Pragmatic Programmer, and the Mythical Man Month.
If you haven't read http://www.amazon.com/The-Programming-Language-2nd-Edition/dp/0131103628 then do so (even if you already know C). If you own only one programming book, this should be it. It is the key to all modern languages you are likely to experience in your lifetime. Imagine you are an acolyte taking the first steps into your chosen religion. This book is the old testament, written by the gods themselves. If you truly want to understand the mysteries you will find no better reference.
More important today is being able to search/ask intelligent questions on stack overflow, use google effectively, and get a feel of what software is worth your precious time to learn. Hint: evaluate the community surrounding the software with a stern eye, often the community is more important than the actual software.
There is nothing special about building a computer. Feel free, newegg.com and /r/pcmasterrace are your friends. More important would be to get an an Amazon account and learn how to spin up instances on EC2. Why build a computer when you can summon and disperse 100's of them on a whim?
And since 100 computers is more interesting than 1, the 2nd book you own should be:
http://www.amazon.com/UNIX-Network-Programming-Richard-Stevens/dp/0139498761
By this point I assume you are proficient with, understand and love Unix. If not then IMHO your education dollars and/or time were misspent. Break loop, forget about learning frameworks, languages, etc and spend at least the next six months becoming intimate with vi, bash, make, and the linux kernel. These are the true weapons of a Jedi code master.
A full personal subscription to https://www.safaribooksonline.com is more than worth it, and should be considered mandatory for any professional software developer.
Have fun. :)
I am currently taking my systems programming class for my CS degree. We use linux, with C and VIM, and have a couple of books that are actually really helpful.
This book will walk you through C and its syntax. I have read through most of it. Its pretty easy to follow and comprehend.
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
This book I havent cracked open yet but plan on it today. My teacher swears by it, however.
https://www.amazon.com/Unix-Programming-Environment-Prentice-Hall-Software/dp/013937681X
You can't have it both ways. if you want to know exactly then you have to drill down to the fundamentals which are handled at a low level (C & assembly). If you want to understand the general concepts you'll need to make lateral moves and study CS along with having enough of the tiny details to fill in the gaps with your intuition.
I think what you may like is a book on the linux API. This is between kernelland and userland.
Try this one:
https://www.amazon.com/Linux-Programming-Interface-System-Handbook/dp/1593272200
Before you do that ensure you know enough basic C. Linux kernel uses K&R style. So this might be good enough and your best bet to fasttrack.
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
Do keep in mind this is 2K pages worth of reading. This should help to fill in enough of what you don't know you don't know so that you can better use google-fu to get you further.
After Codecademy it could help you to read C Programming. It is, at least in my opinion, awful to learn C/C++ form the start but it rocks as a second/third language. It helps with understanding more about basic computing and with help of Cython you can make your Python programs run faster even by the factor of 10 (sometimes more, sometimes less).
JavaScript is also pretty neat language to learn from the start. Course at Codecademy even features making little text based game. Subscribe to /r/learnprogramming and /r/learnpython for further help.
Sounds like the problem was with your learning environment, not you. Getting started with programming is very tough at first; you need all the advantages you can get. But I see a number of things in your post that are serious disadvantages:
Stick with it! Things get a lot less scary / frustrating once you develop a solid foundation!
As someone with zero programming experience, thank you for the reading list. I was just planning on trying to learn python but I don't know if that's the best language to start with. Would you recommend just reading those books and starting with C?
Also, since I have no experience a technical answer would probably go right over my head but could you briefly explain how someone would go about messing around with an OS? I've always wondered what people meant by this. I have Linux installed on a VM but I have no idea what I could do to start experimenting and learning about programming with it.
Edit: Are these the books you're talking about? Physical Computing, C programming, and Writing Great Code?
The C Programming Language by K&R.
It shouldn't be too hard to learn C since you know C++, they are very similar.
To date, the best programming book that I've read is C Programming Language by K&R. It's a pretty complete text on the C language. It is more than sufficient to enable the reader to be a good C programmer, yet it is still entirely digestable by new programmers. It is 274 pages. There are some recent gems, like Programming Clojure (304 pages). However, these days the norm seems to be more like Applying Domain-Driven Design and Patterns: With Examples in C# and .NET (576 pages), Real World Haskell (710 pages), and The C++ Programming Language (1030 pages). These books are all good. They just are hard to carry around and hard to hold while reading for long periods. I'm looking for good programming books that are short; an upper limit of roughly 325 pages. Post links to your favorites!
Yes I forgot to mention. I'd never touched C code before this book and it's teaching me everything I need to know so far (though I have a really old copy of The C Programming Language (2nd Edition) incase I need it, haven't done yet)
Copy pasting my response to a similar question:
Edited to have more resources and be easier to read.
It's hard to draw the line between "essential" and "recommended." That depends a lot on what you want to do. So, I will present a rough outline of core topics covered in the 4 year CS program at my university (UC Berkeley). This is not a strict order of topics, but prerequisites occur before topics that depend on them.
Intro CS
Topics include Environments/Scoping, abstraction, recursion, Object oriented vs functional programming models, strings, dictionaries, Interpreters. Taught in Python.
The class is based on the classic MIT text, "Structure and Interpretation of Computer Programs." Of course, that book is from 1984 and uses Scheme, which many people don't want to learn due to its rarity in industry. We shifted recently to reading materials based on SICP, but presented in python. I believe this is the reading used now. This course is almost entirely posted online. The course page is visible to public, and has the readings, discussion slides / questions and solutions, project specs, review slides, etc. You can find it here.
Data Structures and basic algorithms
DS: Arrays, Linked Lists, Trees (Binary search, B, Spaly, Red-Black), Hash Tables, Stacks/Queues, Heaps, Graphs. Algorithms: Search (Breadth first vs depth first), Sorting (Bubble, radix, bucket, merge, quick, selection, insert, etc), Dijkstra's and Kruskal's, Big-O analysis.
This class uses two books: "Head First Java" and "Data Structures and Algorithms in Java" (any edition except 2). The class doesn't presupposed knowledge in any language, so the first portion is covering Object Oriented principles and Java from a java book (doesn't really matter which), then moving to the core topics of data structures and algorithms. The course page has some absolutely fantastic notes -- I skim through these before every interview to review. You can also check out the projects and homeworks if you want to follow along. The course page is available here (note that it gets updated with new semesters, and links will be removed -- download them soon if you want to use them).
Machine Structures (Intro Architecture)
Warehouse scale computing (Hadoop Map-Reduce). C language, basics of assemblers/compilers/linkers, bit manipulation, number representation. Assembly Language (MIPS). CPU Structure, pipelining, threading, virtual memory paging systems. Caching / memory hierarchy. Optimization / Performance analysis, parallelism (Open MP), SIMD (SSE Intrinsics).
This class uses two books: "The C Programming Language" and "Computer Organization and Design". This class is taught primarily in C, so the first few weeks are spent as a crash course in C, along with a discussion/project using Map-Reduce. From there in jumps into Computer Organization and Design. I personally loved the projects I did in this class. As with above, the lecture slides, discussion notes, homeworks, labs, solutions, and projects are all available on an archived course page.
Discrete Math / Probability Theory
Logic, Proofs, Induction, Modular Arithmetic (RSA / Euclid's Algorithm). Polynomials over finite fields. Probability (expectation / variance) and it's applicability to hashing. Distributions, Probabilistic Inference. Graph Theory. Countability.
Time to step away from coding! This is a math class, plain and simple. As for book, well, we really didn't have one. The class is based on a series of "Notes" developed for the class. When taken as a whole, these notes serve as the official textbook. The notes, homeworks, etc are here.
Efficient Algorithms and Intractable Problems
Designing and analyzing algorithms. Lower bounds. Divide and Conquer problems. Search problems. Graph problems. Greedy algorithms. Linear and Dynamic programming. NP-Completeness. Parallel algorithms.
The Efficient Algorithms class stopped posting all of the resources online, but an archived version from 2009 has homeworks, reading lists, and solutions. This is the book used.
Operating Systems and System Programming
Concurrency and Synchronization. Memory and Caching. Scheduling and Queuing theory. Filesystems and databases. Security. Networking.
The Operating Systems class uses this book, and all of the lectures and materials are archived here (Spring 2013).
Math
Those are the core classes, not including about 4 (minimum) required technical upper division electives to graduate with a B.A. in CS. The math required is:
Those are the core classes you can expect any graduate from my university to have taken, plus 4 CS electives related to their interests. If you could tell me more about your goals, I might be able to refine it more.
C Programming Language
http://www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1215998409&amp;sr=8-1
Hey I am a CS major who is graduating May 2015 and honestly I can tell you not to worry and dont feel rushed in taking as many hours as possible. Now that I am entering my last year I feel I rushed through classes so fast trying to take as many as possible that I didnt get as much as I should have from them. I couldnt devote more time to them since I had other classes to worry about and it reflected on my grade by getting a B instead of an A. So take your time, find whats right for you and go with it.
312 is all about basic Java. So you learn for loops, if statements, classes, polymorphism, and other stuff. I had no prier experience with programming till I took that class and I got an A in it without working to much. If you want to work on your java, go to sites like http://codingbat.com/ and go through all the java exercises. Those were homeworks I had when I took 312.
If you want to get ahead of your class learn C!! Seriously after 312 and 314(data structure) you will be programming a lot in C (and while your at it learn c++ as well). I recommend writing all the programs you did in java in C. This book is an excellent source to learn C
Finally I recommend reading these two articles 1 2 They were assigned to me in a previous class and I wish I had read them as a freshman.
TLDR: Dont worry, find the right pace for you and check out the links I supplied as they can give you more information.
This is one of the most frequently asked questions on every programming forum, ever. I'm going to start by linking to one of the best answers the previous times it's been asked:
https://www.reddit.com/r/learnprogramming/comments/1ehg69/explain_pointers_like_im_five/
Once you understand WHY you need pointers and WHAT they are, the rest is just syntax.
Do you have K&R? You're never going to find a book that's more clear and concise than that. It won't explain the concepts like you're 5, but once you understand the concept it explains exactly what * and & means. It's literally the explanation written by the authors of the C programming language.
If you're still stuck, please post a specific example of some code you're struggling with.
on a scale of 1-10 how good are you looking to get at programming?
Also
I second this. K&R is one of the most concise books I have ever read. Here is the link https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/ref=sr_1_1?ie=UTF8&amp;qid=1519854630&amp;sr=8-1&amp;keywords=kernighan+and+ritchie
CLRS is the classic for learning about different algorithms and concepts (e.g. sorting, graphs, data structures, etc. etc.). I didn't really like books when I was learning, but hacking my way through the K&R C book wasn't too painful
At university we learnt C, Java (and he marked us down if we used an IDE...), and then we had freedom to pick up whatever. So I would say having a look at C or C++ couldn't hurt and will definitely teach you fundamentals better than Python. But bear in mind there are some concepts in lower-level languages that you can (for the most part) ignore in Python, e.g. Garbage Collection, memory allocation, pointers.
If you're not a complete beginner then go for The C programming language .
If you need to get up to speed on both programming and C, then I'd recommend something a bit more friendly such as Programming in C
> The C programming language
he's saying to get this book
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
https://en.wikipedia.org/wiki/The_C_Programming_Language
also good is this course
https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x
sign up for the free version -- its the same teacher, lectures and projects used in the Harvard classroom
its half in C and the rest in python and web programming
if you've got one dollar you can still get the basic Humble Bundle
https://www.humblebundle.com/books/head-first-books
which includes "Head First C" which is pretty good
just go to that site and scroll down
Read the C Programming Language, it will help you in your course.
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
For C: Build your own Lisp. As the name suggests, this book teaches you C as it guides you through the process of implementing your own Lisp (which it will also teach you about). It's also freely available online.
&#x200B;
Now, the more conventional answer to this question is Brian Kernighan and Dennis Ritchie's classic The C Programming Language, often just referred to as K&R. This is a fine book, but unless you can find it secondhand or in a library, it is a tad expensive. Another advantage of Build your own Lisp is that it guides you through the process of building a large-ish program, so you can see how things fit together in a big-picture way.
&#x200B;
For OCaml: Real World OCaml is freely available online, and will not only teach you the language, but show you how to do all sorts of cool things with it. OCaml From The Very Beginning, and its follow-up text, More OCaml: Algorithms, Mehods, and Diversions, are very well-regarded, but aren't free (although $25 USD will get you both in PDF format).
Learn C would be the best. The book that most likely is going to be used is this one: https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
But there are COUNTLESS free resources online to learn C.
You could also learn another language, but i recommend just jumping into C
The C Programming Language is a good one too. Although it's specific to learning C, reading through it and doing all the exercises is something every programmer should do at least once.
Also, Code Complete 2.
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"?
These are my standard recommendations to anyone who wants to learn the C language these days:
https://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?ie=UTF8&amp;qid=1537025256&amp;sr=8-1&amp;keywords=king+c+language&amp;dpID=41%252BbFKtFHjL&amp;preST=_SX218_BO1,204,203,200_QL40_&amp;dpSrc=srch
https://www.amazon.com/Reference-Manual-Samuel-P-Harbison/dp/013089592X/ref=sr_1_sc_1?ie=UTF8&amp;qid=1537025419&amp;sr=8-1-spell&amp;keywords=herbison+steele
The first one is a great book to learn C from the basics to the details of the standard library, and it's updated to cover the C99 Standard. The second is more of a reference that is very useful once you get more experienced, it covers C99 as well, it is basically the C Standard document rewritten for humans : ) My students find the first one very complete and full of good exercises and explanations. Not everyone has bought the second, those who have find it invaluable.
C and C++ are totally different programming languages.
------------------
Get the K&R book and this one:
C Programming: A Modern Approach by K N King (Author).
http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?ie=UTF8&amp;qid=1425256918&amp;sr=8-1&amp;keywords=C+Programming%3A+A+Modern+Approach
https://www.amazon.co.uk/d/cka/C-Programming-Modern-Approach-K-N-King/0393979504/ref=sr_1_4?ie=UTF8&amp;qid=1499335785&amp;sr=8-4&amp;keywords=c+programming+a+modern+approach
this book?
To go with the other comments I also recommend picking up a book like numerical recipes which describes in detail many well tested algorithms.
There are numerical methods that make essential use of randomness, such as Monte Carlo methods or simulated annealing.
And numerical methods can be applied to statistics problems. A nonlinear model is probably going to require a numerical scheme to implement. The book Numerical Recipes, which is all about actually implementing numerical methods on a computer, has four chapters covering randomness and statistics.
> My plan at present is to do a PhD in numerical PDEs and then go into industry in scientific computing as a researcher or developer.
I'd make sure that whoever it is you want to work with is heavy on the computation side. Even better if they work with supercomputers. I say this because even a topic like numerical PDEs can go very deep into theory (consider this paper ). Industry likes computer skills.
You could read the IBM manual OR you could buy this much more user friendly book:
http://www.amazon.com/Discovering-Statistics-using-IBM-SPSS/dp/1446249182
Discovering Statistics using SPSS
This is the type of book you want. It has good examples and straightforward commentary.
I really like this book:
http://www.amazon.co.uk/Discovering-Statistics-using-IBM-SPSS/dp/1446249182/ref=as_li_tf_sw?&amp;linkCode=wsw&amp;tag=statihell-21
Fun to read, easy to understand, entertaining. What stats book is entertaining???
I ran across this presentation last night by Max Kuhn, one of the authors of Applied Predictive Modeling (http://www.amazon.com/Applied-Predictive-Modeling-Max-Kuhn/dp/1461468485).
https://static.squarespace.com/static/51156277e4b0b8b2ffe11c00/t/513e0b97e4b0df53689513be/1363020695985/KuhnENAR.pdf
It's a really great discussion of how they did the joint authoring of the book and the tools they used - and what they would do differently.
This book is all you will need.
https://www.amazon.com/Applied-Predictive-Modeling-Max-Kuhn/dp/1461468485/ref=nodl_
It sounds like you're looking for time series material, but Applied Predictive Modeling may be of interest to you. For time series and R specifically, this text seems well-reviewed.
You're welcome. Thanks for providing some additional detail. This helps. I think if you read up on the CRISP-DM and use that framework to walk your way through some of these challenges it will be very beneficial to you. I'd recommend giving this document a read when you have the time. I think that if you show them that you are comfortable with these guidelines and know how to work your way through it to solve a problem it will go a long way. Model selection can be a bit tricky depending on the situation but I think most practitioners have a favorite model that they go to. Sounds like you're already familiar with Wolpert's "No Free Lunch Theorem" suggesting to try a wide variety of techniques. Personally, this is where I'd start digging deeper into tuning parameters (cross-validation, etc.) to help with that decision. Ultimately though, it's important to have a firm understanding of the strengths/weaknesses of the different models and their use cases so you can make an informed selection decision. Kuhn and Johnson's book Applied Predictive Modeling will be a good read to help you prepare.
Many thanks. I can speak more on the topic, but you're wanting to learn a lot about Machine learning (well lasso and ridge regression technically count as statistics, but point stands).
If you learn best via online courses, I'd suggest starting with Andrew Ng's Machine Learning Course
If you learn best through reading, I'd recommend two books: Hastie, Tibshirani, & Friedman - Elements of Statistical Learning
and Kuhn & Johnson - Applied Predictive Modeling
Obviously, I'd also recommend my blog once I learn my audience.
Quick and dirty answer: speaking very broadly, random forests -- found in the "randomForest" package -- tend to win battle-of-the-algorithms type studies. If you just want to play with a single model, I'd recommend starting with that and looking at the help for it.
Longer and better answer: Your best bet to answering all these questions and getting a good handle on data mining/predictive analytics is this book: Applied Predictive Modeling. The book references the "caret" package quite a bit, since the package's author is the same person. With it, you can train a lot of different types of models for regression or classification optimizing for accuracy, RMSE, ROC, etc. It provides a standard API for playing with models and makes your life much, much easier. It has its own website here.
Agreed. I also recommend K&R, it is a short but effective introduction to C, written by the makers of C themselves.
C: Just start practicing with it. "The C Programming Language" is commonly regarded as the best textbook by young and old programmers alike. Hands on experience is the best especially when supplemented.
Linux: Get VM software and install a few flavors. Poke around. Get used to using a package manager, BASH, and Git. Your TA or professor may be able to help you with Virtual Box. The beauty of a VM is that you can pretty much do whatever you want without risk of damaging your own machine, so don't be afraid to experiment. You could try better VM software like VMWare or Parallels. You could also try dual booting.
On your host machine, I would recommend completely ditching whatever shell Windows uses these days. Install Cygwin so you can keep practicing BASH commands. And you can also get a package manager, Chocolatey.
A calculator: TI36X Pro, Casio fx-115ES PLUS, or HP 35s (these are the 3 best calculators allowed on the FE and PE)
If you get a graphing calculator, either get the TI-84 Plus C (which can be used any time graphing calculators are allowed), or get an HP Prime or TI Nspire CS CAS (which are WAY more powerful and useful).
Pencils: Pentel Graphgear 1000, Pentel Kerry, Rotring Rapid Pro (include an eraser such as the Sakura Foam Eraser). The rapid pro pen is also pretty popular.
If he's doing a software/computer engineering degree, get him a copy of K&R2.
If he's doing electrical/electronics engineering, he'll benefit from a nice soldering station, a multimeter, or a used oscilloscope (such as a Rigol DS1052e).
I can't give much advise for mechanical and civil. Sorry.
Oh yea, the paper is useful... especially with some pressboard report covers. They make nice notebooks (albeit expensive), and pair really really well with looseleaf textbooks.
\ The HP is more expensive, but it looks like a tool that professional engineers use when they're not in front of a computer. I ended up getting an HP prime, so I never could justify a 35s
Keep working through your Python book. From what I've read, it seems to be a good book, and Python is worth being familiar with.
When you feel like you need a change of pace, watch Buckland's lectures. He doesn't dive into C right away, but instead talks about a very simplified low-level machine code. (It's simple enough, actually, that you could very easily implement a virtual machine for it in Python.) It'll help you build an understanding of how programs actually run, so that when you pick up a book on C, things will make more sense.
Then, when you feel confident in Python, go grab a book on C. I don't have any specific recommendations (there are a ton of good books) but it's nice to have a copy of K&R C on hand. Then you'll want a book on data structures. Maybe Introduction to Algorithms.
This is the C bible: C Programming Language, 2nd Edition https://www.amazon.com/dp/0131103628/ref=cm_sw_r_cp_api_rQMUAb33ZZ7E2
I wish it were as easy as jumping into the language and knowing the syntax. Sadly C is as nuanced a language as it comes. From obscure compiler errors to pointer problems; C isn't something you simply look at the syntax once and hit the ground running (as familiar as it may seem)
Your best bet is to read through K&R and use the language as often as possible. If it's an introductory course, you should be able to stay ahead of the syllabus and be prepared to handle any problems. Still, you're inexperienced in the language, be prepared to learn a lot, and fast.
The goto theory book by Sipser.
Excellent for C programming.
Programming in general.
My favourite.
You can probably find all of these at a library.
Without knowing what your interests are, if you're wanting to get back to the basics, one of the best programming books ever written is without a doubt: http://www.amazon.com/The-Programming-Language-Brian-Kernighan/dp/0131103628
Since you know Java I would suggest that you a read one of the best programming books ever written: [K&R The C Programming language] (http://www.amazon.com/The-Programming-Language-Brian-Kernighan/dp/0131103628/), this book was written by the people who made the C language and it's one of the best books ever written. It is a must read for every C programmer. [Computer Systems: A Programmer's Perspective (3rd Edition)] (http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/013409266X/) is a great book to learn about computer systems. But I would recommend [Operating Systems Design and Implementation (3rd Edition)] (http://www.amazon.com/Operating-Systems-Design-Implementation-Edition/dp/0131429388) because it has some minix source code which will go really well with learning C.
Best of luck buddy :)
You can try reading The C Programming Language by Dennis Ritchie and Brian Kernighan. I've been reading it for the past month or so and it has really helped me out a lot
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
Read K&R C and work through the examples.
C Programming Language, 2nd Edition https://www.amazon.com/dp/0131103628/ref=cm_sw_r_cp_apa_i_KsHRCbMHMDBX8
For C: http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
Known as the K&R it is THE way to learn C, as long as you are familiar with general programming concepts already (scripting counts).
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
I can't believe that no one has recommended The C Programming Language. It gives you a clear concise introduction to C and in my opinion is still the best place to start if you want to learn C and learn well from reading books. It also gives you plenty of exercises along the way to help you progress.
Well, I'm afraid most of that knowledge won't really help you there. While the basics of programming like variables, loops, functions, etc. are certainly useful anything OOP related - which, in Java is a lot - isn't really that applicable on C which is procedural-only (at least on vanilla C without a bit of pointer hacking that you probably shouldn't mess with given your beginner status).
Really, I'd suggest trying out CS50, a C course from Harvard available online as a series of video lectures and then give a look at K&R, which is widely regarded as the C book, even if not necessarily beginner friendly.
Computer science. And this is probably the most important book I had to buy.
Learning C is probably better. Arduino is just a framework built on top of C++, so if you learn arduino you get a strangely limited understanding because you don't know the underlying language.
And while under the hood arduino uses C++, from a user perspective it's just C with classes.
This is the most recommended C book. The only hard part of C is pointers and you don't even need those for arduino most of the time.
If you REALLY want to learn C++ and want to learn it well, I'd recommend learning C as well. There are a lot of details about the language that, like others have said, are derived from C. If this is something you're willing to take the time to do, I'd recommend reading K&R, it's a fantastic book that's not too complicated to read through. Plus, understanding C will help you understand what a lot of what other languages do for you under the hood and (at least in my opinion) will make you a much better programmer. I learned to program in C/C++ (and I'm not some old timer, I'm still in school) but I think it definitely has been worth the learning curve.
Thinking in Java and Head First Java are also really good.
K&R -> The C Programming Language by Brian Kernighan and Dennis Ritchie
SICP -> Structure and Interpretation of Computer Programs
The Pragmatic Programmer
You could try something like K&R, but you would probably benefit from a book like that a bit more if you know how memory and the stack/heap works, and how stuff works under the hood. You might want to read a book like Code, which goes over more low level stuff with a nice approach that doesn't assume you have a huge EE/CS background. There are also the Head First books, I haven't read Head First C yet but it looks interesting; I have read Head First Programming and the non-web development sections of Head First Python (android and web development just don't interest me right now), and they are fun to read with the "Head First approach".
Here are my favorite books for sharpening your C saw. The great news is that all of these are less than 300 pages each.
The C Programming Language (Kernighan, Ritchie)
An essential for all C programmers. It's short but dense and it's packed full of great exercises.
Data Structures in C (Kalicharan)
This book offers a practical look at data structures and a few algorithms. It has a bunch of exercises to help you retain what you're learning.
The C Puzzle Book (Feuer)
A tiny book packed with a bunch of C puzzles, the pointers chapter is especially helpful.
In addition, a student of C may want to consider the implementation of some higher level features not readily available in the base language. Not only is it interesting to learn how some interpreted languages may accomplish things (LUA, Python, Perl, etc...) it's also valuable experience in regards to best practices in lower level languages. Once you feel you have a solid grasp on fundamentals, cough K&R cough, I find it's worth checking out C Interfaces and Implementations by David Hanson and Object Oriented C by AT Schreiner. The latter-most is free.
If you are learning from newboston I strongly doubt you "have a good understanding" of C. Try reading TCPL. As for network programming, there's no reason not to give it a whirl - what's the worst that can happen? Read Beej's guide to get started.
Most assigned texts for CS are unnecessary. There are a few you could get because they are considered to be part of the CS bible such as C Programming Language by Kernighan and Ritchie.
Read SICP and K&R C, really understand these and everything else should take care of itself.
C Programming Language, 2nd Edition https://www.amazon.com/dp/0131103628?ref=ppx_pop_mob_ap_share
I took Chen and passed. All I did was read K&R over the break before his class and supplemented it with lecture.
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
I took it Spring 2016, so not with Skrentny. If you're not familiar with C you could learn it over winter break. You might use this textbook: https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628 so you could get it and start reading it early.
Mine would be to learn some C for a better understanding of Python internals. Also, go through this book.
None that I know. Check out the sidebar though. There are several links to online courses and other reddits, some of which cover C. In my opinion, however, C is best learned from a book like The C Programming Language.
For C, definitely use the K&R text. It's the best C resource I've come across.
I would recommend starting with Python, though - it will give you a general understanding for how programming works without forcing you to deal with directly managing the machine's resources. A simple online search for Python resources will turn up many good-enough options, but the basic principle is to try writing code that automates basic tasks that you might perform on your own (like renaming all the files in a directory, or changing a color picture to black-and-white) and to progressively try this with more and more complicated tasks.
OK, so multidimensional arrays in C are interesting, especially if you come from a language like
Java or C#.
In a language like Java, where many things are pointers, there is no such thing as a
multidimensional array. All arrays have one dimension, though you can sort of fake it with what's
known as a jagged array, which is an array of pointers to other arrays. This isn't as common in C,
but I figured that I'd mention it since there is one place you see it all the time:
int main(int argc, char argv[])
In
main
,argv
is an array of pointers to arrays of characters. If we call it with the argumentsfoo
andfoobar
, it would look something like this:+-----+
| | +---+---+---+----+
| O-------> | f | o | o | \0 |
| | +---+---+---+----+
+-----+
| | +---+---+---+---+---+---+----+
| O-------> | f | o | o | b | a | r | \0 |
| | +---+---+---+---+---+---+----+
+-----+
As you probably already know, arrays and pointers are somewhat interchangeable in C. I can do this:
int arr[10];
int parr = &arr[0]; //or
int *parr = arr
arr[n] == parr[n] == (parr + n) //true for all 0 <= n < 10
For a one-dimensional array, there's no difference between the array itself and a pointer
to the array's first element. If the array's cells hold values of type
T
, then the pointer should beof type `T
. C arrays arent bounds-checked (though going past the end of the array <br /> has undefined behavior), so you don't really *lose* anything when going from an array to a pointer.<br /> <br /> Running with our
mainexample, I can also do this:<br /> <br /> char **pargv = &amp;argv[0]; //or
char *pargv = argv<br /> <br /> pargv[n] == argv[n]; //true for all 0 &lt;= n &lt; argc<br /> <br /> In this case, each cell in our array stores a
char. So if we want a pointer that points to that <br /> array (i.e. points to the first element of the array), it needs to be a
char*`.---
But like I said, C has proper multidimensional arrays as well. Instead of an array of pointers, we
have an array of arrays. Something like this:
char strs[2][7] =
{
"foo",
"foobar"
};
... will show up in memory like this:
+-----------------------------------+
| |
| +---+---+---+----+----+----+----+ |
| | f | o | o | \0 | \0 | \0 | \0 | |
| +---+---+---+----+----+----+----+ |
| |
+-----------------------------------+
| |
| +---+---+---+---+---+---+----+ |
| | f | o | o | b | a | r | \0 | |
| +---+---+---+---+---+---+----+ |
| |
+-----------------------------------+
... which is essentially the same as this:
+----+
| f |
+----+
| o |
+----+
| o |
+----+
| \0 |
+----+
| \0 |
+----+
| \0 |
+----+
| \0 |
+----+
| f |
+----+
| o |
+----+
| o |
+----+
| b |
+----+
| a |
+----+
| r |
+----+
| \0 |
+----+
But this is also important: there's also a similarity between one-dimensional arrays and multidimensional arrays.
Multidimensional arrays are arranged end-to-end in memory, so it's possible to use a plain pointer to refer
to a multidimensional array:
char pstrs = &strs[0][0];
pstrs[r 7 + c] == strs[r][c]; //true for all 0 <= r < 2 and 0 <= c < 7
So let's say that you have a function that allocates, initializes, and returns a
foo
. It might look like this:foo create_foo()
{
Foo p = malloc(sizeof(foo));
return p;
}
How would you allocate and return a one-dimensional array of
foo
?foo create_1d_foo_arr(int length)
{
foo p = malloc(length sizeof(foo));
return p;
}
How would you allocate and return a two-dimensional array of
foo
?foo create_2d_foo_arr(int rows, int cols)
{
foo p = malloc(rows cols sizeof(foo));
return p;
}
---
Now, depending on what you're doing, you can get fancy. To return to a previous diagram:
char strs[2][7] =
{
"foo",
"foobar"
};
+-----------------------------------+
| |
| +---+---+---+----+----+----+----+ |
| | f | o | o | \0 | \0 | \0 | \0 | |
| +---+---+---+----+----+----+----+ |
| |
+-----------------------------------+
| |
| +---+---+---+---+---+---+----+ |
| | f | o | o | b | a | r | \0 | |
| +---+---+---+---+---+---+----+ |
| |
+-----------------------------------+
We can declare a more specialized pointer than we had before:
char (pstrs)[7] = strs;
... which should be read as "a pointer to a 7-element
char
array". But as we've established, thatcan also be seen as an array whose cells can hold 7-element
char
arrays. That's how we've drawn itin our diagram.
We can now use that pointer as if it was a 2-dimensional array:
pstrs[1][0] = 'm';
... which will update the second string to
moobar
.Note that this:
char (pstrs)[7]
is not the same as this:
char pstrs[7]
As we discussed at the beginning, `char pstrs[7]
is an array of pointers to characters (i.e. <br /> potentially a jagged array), whereas
char (*pstrs)[7]` is a pointer to an array of characters (i.e.potentially a two-dimensional array).
---
If you can get your hands on a copy of K&R C, chapter 5 has an excellent treatment of this topic.
I think K&R is quite readable but also fairly comprehensive. It's not at the level of the language
spec, but it covers a good many cases.
K&R's C Book is also very good.
buy these 2 books:
and read them in parallel. Both are short well written books with good examples.
Go through the WWDC videos, Apple Docs for specific info about different aspects of the language and how it works, Programming in Objective-C (5th Edition) (Developer's Library), and if you want to know more of the fundementals of the C language then you could pick this book up C Programming Language (2nd Edition), it will help you with general programming practices.
In no particular order:
Structure and Interpretation of Computer Programs
Code Complete
C Programming Language(K&R)
The Pragmatic Programmer
The Mythical Man Month: Essays on Software Engineering
Introduction to Algorithms and/or Algorithms
> I bought a gameduino shield
> I am weak in coding
You sure have bitten off quite a bit for a beginner. /u/Thereminz's advice is pretty sound. Seek all the demo code you can find, and spend lots of time reading and understanding it. Tweek, play, and learn.
Also, you should be reading programming books to better understand the language. I recommend the K&R C programming. It is the bible of C, and every other C book in existence was born from it. It's a bit dry, but it's also very concise. I always keep it handy. Also, "Writing Great Code" is a fantastic read, and a must have for optimizing for performance in microcontrollers.
Python is an easier starting point than C. I've tried to learn Python many times, but I always find myself gravitating toward C.
C Programming Language by Kernighan and Ritchie is a very good book to pick up.
C Primer Plus by Stephen Prata is another good one for the C language. I gravitate heavily toward C. Mostly because it interests me. Also the first programming language I've ever decided to pick up.
Do not give up denizen! Programming is an exciting experience when you get things to work properly. There is so much you can do with it.
Best piece of advice is to choose what best suites your interests, and goals.
I found it much easier to learn C first and then C++
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
&#x200B;
BTW I don't use C++ anymore, just python and BASH.
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
It's hard to give recommendations about books when you don't tell us what the books are.
For example, if one of the books is the second edition of The C Programming Language by Kernighan and Ritchie, then you should keep it. This book was published in&nbsp;1988, but it is a well-written book that is still a good introduction to&nbsp;C.
This one?
Weary Traveler, you seek guidance into the world of C Programming. Know that it is a difficult journey and peril is around every corner. A good start would be tomes from Kernighan and Ritchie (http://www.amazon.com/The-Programming-Language-2nd-Edition/dp/0131103628) or a more modern scroll from Zed (http://c.learncodethehardway.org/) .
Do not give up and soon you will be programming in C as a budding apprentice mage yourself.
https://www.amazon.com/gp/aw/d/0131103628/ref=dp_ob_neva_mobile
Here is a video I watched the other day about 7-8 mins a student summed up his entire CS undergrad. He basically goes over what to learn once you become proficient in a language like Python to have a deeper understanding. As the other person mentioned he goes after looking at low level architecture and learning
https://www.youtube.com/watch?v=ReVeUvwTGdU
He recommends learning C the book he recommends is https://www.amazon.com/gp/product/0131103628/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0131103628&linkCode=as2&tag=devoncrawfo05-20&linkId=2848ad31c81353554f1744502c936f34
&#x200B;
That is a great question both in the literal and figurative sense - specifically, most languages have oddities when it comes to what is generically referred to as I/O handling. These originate from the fact that in spite of great advancements, converting a series of key strokes/taps on glass etc. still requires buffering and "de-bouncing" (prevention of multiple same key strokes from being read) etc.
in general, I would recommend Kernighan's book (C programming language ) as a fun guide that explain not only what the gotchas are but give solid ways to code effectively around them.
Try Kernighan and Ritchie. http://www.amazon.com/gp/product/0131103628
If you don't have any specific questions for us here, The C Programming Language, co-authored by the creator of C, is the gold standard in books about the language.
One of the best things to do is read what other programmers have to say. It opens yourself up to things that you might not normally come across. Schedule a time of the day where you will go on Stackoverflow to answer questions or read answers. Also in that time, read some blogs and any new articles. A few of the websites that I really like:
Have you caught up reading the classics when it comes to software development? A great list of them can be found here. A few that I have found totally eye opening:
Also, have you used any new technology lately to make something cool? Schedule a time everyday (similar to when you read new things) to work on a project no matter what. Close Reddit, close your email, and get programming! Here a few things I had on the top of my head:
Hopefully all of these can give you an idea of how to improve.
try the book https://www.amazon.com/Thinking-Java-4th-Bruce-Eckel/dp/0131872486 also the book for the java certs is pretty good but gets pretty down in the weeds
I always liked Effective Java the most, might be a little too advanced. I'm really not sure where you are in terms of comfort with syntax and basic concepts. Can you explain further what you've done in terms of programming in Java, and how you understand these concepts?
Also, I would suggest checking out TheNewBoston video series on Java programming, lots of great syntax and implementation of concepts you mentioned. http://www.youtube.com/watch?v=Hl-zzrqQoSE&amp;playnext=1&amp;list=PLAFF55E55870752DA
I think I may have found a book more for your level. www.amazon.com/Thinking-Java-4th-Bruce-Eckel/dp/0131872486. Thinking in Java. From a review, here are some topics covered:
Object-design basics
Inheritance and polymorphism
Object lifetimes
Exception handling
Multithreading and persistence
Java on the Internet
Analysis and design basics
Java basics: keywords and flow control
Initializing objects
Java packages
and many more.
Some of these I'm sure you've seen, and this will be another look at them, others will be new but important to know and understand.
После java можно как-раз.
По java советую Thinking in Java и Effective Java и в довесок.
It seems that your comment contains 1 or more links that are hard to tap for mobile users.
I will extend those so they're easier for our sausage fingers to click!
Here is link number 1 - Previous text "K&R"
----
^Please ^PM ^/u/eganwall ^with ^issues ^or ^feedback! ^| ^Delete
http://www.amazon.com/The-Programming-Language-2nd-Edition/dp/0131103628 This is still the go-to book for C. Much more than 6 years old now.
The book.
Read The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie front to back. It was published in 1988 and is still phenomenal at teaching the fundamentals of CS: primitives, branching, structures, etc. C programming is daunting at first, but future you will appreciate learning CS from its basics as C is about as barebones as you'll want to get. After finishing it you'll learn the majority of what you need to know to begin learning other languages quickly. Run every example in an environment of your choice to see for yourself whats going on in them. I recommend using this online compiler to run the examples as figuring out what programs to use to actually run the code is difficult for a beginner.
If you mean this one, then YES, it is an EXCELLENT book. Highly recommended.
Podés probar aprender C, que está bueno si queres saber como funciona un idioma de programación a nivel mas cercano al hardware. Si ya sabes programar podes usar este libro para aprender.
Mas adelante en la carrera me parecen que ven Haskell, pero probablemente sea demasiado avanzado si estás empezando.
C books I've found useful:
Beginner
Intermediate
Expert
> Maybe now is a good time to step back and consider what kind of programming job you might want to target.
This is definitely something you should keep in mind. Try to become really awesome at one thing. That's not to say you shouldn't have a well rounded education in programming, just that someone who is simply ok at everything isn't getting a job anywhere.
Here are a few texts which I consider to be great for a novice programmer:
The C Programming Language : ANSI C
It's an older book, but it's still the best book to learn the language.
C++ Primer : C++
I used this book to get started with C++, and found it to be easy to follow and informative. Some say it's not a beginner book per-se, they may be right. I was already very familiar with C when I started.
Objective-C Programming: The Big Nerd Ranch Guide : Objective-C
If you're planning to write apps for Apple's iOS and OS X platforms, you're definitely going to need to learn this. Otherwise, don't bother.
Algorithms : Algorithms / Data Structures
This is not the be and end all authority on algorithms, but it's a great book. It's less theoretical and more concrete in my opinion.
I don't feel qualified to give recommendations for other topics like Java or web development, as those aren't really my strong suits. Happy hunting!
http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628
Geez. While it's good to hear that everyone else's copy of K&R is tattered, too, I can't help but feel bad for how tattered mine is. It's been rained on, ran over with a car, left out in the yard for weeks, and used as a coffee mug coaster lord knows how many times.
I should probably honor him by picking up another copy today.
> (assume i have programming background in javascript/web front end.)
Um, are you sure you're ready to jump into iOS development?
Unless I'm reading this incorrectly, it doesn't seem like you have any C or OOP (like Java) programming experience. You'll definitely want to be at least comfortable with C-like syntax and message-passing, inheritance and objects, etc.
Actually, I'll have you answer that for yourself. Watch the first lecture in the iOS dev series from Stanford on iTunes. Around minute 11 the professor goes over what concepts you need to understand in order to be able to follow along with the course. If you don't understand all of the concepts listed, then you aren't ready yet.
Also, you've got to have a Mac. Have at least a Mac Mini (which are the cheapest Macs you can get refurb'd / used).
Here's what I would do assuming I am correct about your programming experience:
1. Learn C on the Mac.
It's for beginners, and will go over the basics of C. Objective-C, the programming language for iOS, is a strict superset of C, so they share a lot of syntax.
1.a The C Programming Language (recommended)
This one isn't for beginners, and is a bit stale, but is the de facto book for learning all of the intricacies of C. While it isn't absolutely necessary, the better you understand C (including pointers, memory, etc.), the easier time you'll have with iOS dev. I absolutely recommend going through it in its entirety, though this isn't necessary. It'll also be good to know C in the future if you plan to pursue software development.
2. Programming in Objective-C
This will teach you Objective-C, related OOP, and using XCode 4.
3. Beginning iPhone 4 Development
This will probably rehash some stuff related to Objective-C and XCode, but for the most part is a great introduction to iPhone development.
Use this book in tandem with the Stanford lecture series. Read the first few chapters, watch the first 2 lectures, do the homework exercises as if you were in the course along with the examples from the book, and just go from there. There might be some redundancy, but I think the combination of reading, listening, and doing will really help you understand the material.
If you need short tutorial refreshers at any point, Cocoa Dev Central is a great resource.
From there, you should be able to start making your own apps, and just use Google, StackOverflow, and http://developer.apple.com/ for all of your questions not previously answered or if you get stuck.
As you go through the process of learning all of these new programming concepts, try to develop ideas for what apps you want to develop. As you learn more, try to piece together how you would accomplish certain aspects of the ideas, and if you can, maybe even code the bits (like certain functions) you can.
There are no set milestones.. it's a gradual process of learning and getting better at programming and iOS development. Your goal should be to just create your own working app entirely based of your own ideas and work.
For iOS devices, you're going to want to start here, this will get you familiarized with the NeXtStep family of jive turkeys, followed up with a more formal introduction to Objective-C. I'll be honest, having some working knowledge of C will never hurt you, so after you're done with that, take a peek at K&R.
If you're aiming for Android, you have a bit of a different education outlook, I'd recommend brushing up with Head First Java. When I started poking around with Android, I read Hello, Android most of it should be still pretty relevant. I'm not entirely sure if it has been updated as of late, I outgrew it rather quickly, and if you do too; pretty much anything and everything by Mark Murphy is relevant. Best of luck!
I've always felt like C is a good language for a programmer to think in. With that being said, I often recommend that a programmer who doesn't need to know C++ learn C if (s)he wants to learn something that will improve his/her skill across the board.
C will give you a good appreciation of what's going on behind the scenes in many of the languages you use. You'll get an appreciation for how passing by value and reference works in other languages thanks to pointers. You'll learn how your strings are actually managed in memory. You'll have a better understanding of how many of those built-in generics you may use (List<>, LinkedList<>, HashMap<>) actually work, because if you want to use them in C you'll have to implement them yourself or download a source file and read it to understand the author's implementation.
This knowledge will help you build more elegant solutions. You'll be less sloppy and gratuitous creating new strings anywhere and everywhere, and may even find yourself using references more often. Your code may or may not be cleaner, but you'll have an appreciation for how and why you should write code for runtime efficiency. You'll be more likely to use the right data structure for your task at hand.
The best part is that C has a great standard resource for learning the language. Pick up The C Programming Language Second Edition and read it cover to cover. By the time you're done you'll know everything you need to know about C, and will have a wonderful reference in the even that you need to use C later on.
If you want to improve your object-oriented programming skills, you don't need to learn a new language. It is best to learn OO independent of any language in order to gather a strong understanding of the underlying concepts and to be able to apply it to any language. Craig Larman's Applying UML and Patterns is the best book I've ever read on the subject.
the static could mean that, hard to tell with this line in isolation. If it's inside a C++ class, then your assumption would be correct.
For all C-only related topics, nothing beats this:
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
Here's the link in case anybody is interested in it.
I don't know what your background is, if this is your first object-oriented language or what. I have gotten a better understanding of programming over the last couple of years, so I may not have the best recommendation, but to refresh on Java, I have found these videos from [Cave of Programming] (https://www.youtube.com/playlist?list=PL9DF6E4B45C36D411) to be pretty awesome.
Very simple, incremental videos that illustrate basic and fundamental concepts pretty clearly for me. Note that there are not quizzes, but by manipulating the programs provided and really making sure one understands what the speaker is presenting, I think one can get a basic understanding of some key aspects in Java programming. If you enroll in the course in Udemy, you may be able to get feedback (haven't tried though to be honest; the course is also free on Udemy).
That said, it wasn't until I started taking some C that I found I understood the Java better; there are some things happening under the hood with Java that I never quite understood until I got to a lower level language like C (and maybe it just took that much exposure, repetition for it all to click).
I took a university course in C, but I am going through a Udemy course on C by Huw Collingbourne that may give a decent overview.
All that said, I do find that I like a mixture at times of watching somewhat more shallow expositions like the video series listed above, but then also enjoy finding some written resources that go into a bit more detail. Check out the Java tutorials for Java. For C, there is [this] (http://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628), which was written I think by the two main guys behind the programming language itself.
The C Programming Language 2nd Edition. There is absolutely no better way to get into programming that this book. Starting with something like Python or Java will only hurt you in the long run because they obscure certain details that are fundamental to programming.
You won't be making anything flashy right off the bat, but you'll have a much more thorough understanding of programming and it'll make transitioning to other languages and techniques easier.
Holy f... it's the beej.
Are you really he? I think I've downloaded all of your guides, but I must confess to having read none — someday, though, someday.
As to the OP, mark another down for K&R's 2nd edition. Be careful if you're looking online for a PDF, there's one floating around that doesn't match the physical copy. I found, and sent, a PDF to a friend who discovered an error, which didn't exist in my physical copy.
All the more reason to shell-out money for the real thing! I only went searching since the binding on my copy is starting to go, and I don't want to add further wear.
The C Programming Language (aka K&R)
If you are a total beginner then read C Programming Absolute Beginner's Guide, Third Edition by Greg Perry & Dean Miller
https://www.amazon.co.uk/Programming-Absolute-Beginners-Guide-Guides/dp/0789751984
If you have some basic experience in another language such as Python, Visual Basic, JavaScript, etc. then read Programming in C, Forth Edition by Stephen Kochan
https://www.amazon.co.uk/Programming-Developers-Library-Stephen-Kochan/dp/0321776410
If you are comfortable programming in another language such as Java, C#, Python, etc. then read The C Programming Language, Second Edition by Kernighan & Ritchie (also known as the K&R book)
https://www.amazon.co.uk/C-Programming-Language-2nd/dp/0131103628
Here is a decent tutorial for c++ and others programming languages: http://www.tutorialspoint.com/cplusplus/index.htm
This is the book that i learned c with. I think theres a free pdf online if you google for it: http://www.amazon.com/The-Programming-Language-2nd-Edition/dp/0131103628
> Do you recommend "K&R C" (can't find that book anywhere)
It's the first result if you type K&R C into Amazon: The C Programming Language, 2nd Edition.
> more than "Pointers to C"?
This doesn't exist, so I have no idea what you're asking.
PS, when you get a chance, read "The C Programming Language" by K&R. Those are the guys that invented C. Ritchie recently died, sadly. ANYWAY just about every modern computer language is written in C. Java, C++, and so on all use it as a base, and C++ really isn't very far off from standard C.
There WILL be obtuse parts in the book you probably won't understand at first, but it's great to understand everything you can do with the language.
I've also seen you're a little confused by why you're doing Hello World stuff... It's mostly because printing a line to the terminal is a way to give you quick feedback with little/no overhead, or what we tend to call boilerplate code. To get a visual set up just to show a message (in Java) is probably around 60 lines of code that will make 0 sense to you right now.
Also, that same feedback - the quick and dirty console print - is a great way to check if your concept is correct. Let's say you write a simple physics engine for your game. You want to make sure you're getting expected values, and you want to do it quickly. Rather than re-launch the entire game EVERY time you tweak the engine, you run a smaller set of code that tests just your physics engine.
Imagine Mario-like movement - jump up and fall in 2d. If you print the Y position every, say, 500 milliseconds (.5 seconds), you would expect values like "0.0, 1.1, 1.5, 2, 1.5, 1.1, 0.0" which would indicate it went up rapidly, stopped at 2, and fell back at the same rate. It's obviously not the same as a visual feedback, but the first time you write the physics engine you might get something like "0.0, 1.1, 1.5, 2, 2, 2, 2" which is CLEARLY incorrect. Something isn't triggering properly! This happens all the time, and a quick check like that helps you diagnose what you did wrong while wasting minimal time running the program.
Umm, I think Python is a good language to start with. It's forgiving and low on boilerplate code. I haven't read it but Learn Python the Hard Way by Zed Shaw is supposed to be decent (and it's free online). I didn't like Learning Python published by O'Reilly. I'd just read reviews on Amazon if Learn Python the Hard Way isn't working for you. Whichever you end up with, I recommend typing all examples from the book into the computer by hand. Something about doing this really helps make things stick in your head. You'll also make the occasional typo and have to debug your program which is something we programmers spend more time doing than any of us care to admit.
I think it is important to try to think of something you want to make and have it in mind while you are learning the language. It can be any software but I recommend a video game. They are really good for this because you can just think up a simple concept or implement your own version of an existing game. Having a goal makes it so you are constantly solving the problems you will encounter while trying to reach that goal which is the most important part of programming (more so than learning the syntax of the language). This is actually the highest rated Python book on Amazon and is all about gamedev with Python.
After you've learned Python to the point where you are comfortable (no need to master it), learn other languages to grow as a programmer. Once you've gotten a couple languages under your belt it's actually really easy to learn even more languages (unless it's a very odd language like Haskell, Lisp, or Brainfuck). The problem solving skills you've acquired often work in any language and you learn some new techniques as you learn new languages.
274 pages actually.
Python is great, there are tons of resources online for learning it, because the OSS community is in love with it.
Also Django is python for web apps if you are so inclined.
As for C, the "C bible" is a must have. Read this book and do the examples and thats all you need really.
http://www.amazon.ca/Programming-Language-Brian-W-Kernighan/dp/0131103628/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1267067483&amp;sr=8-1
Not really related to mobile development, but he should still really enjoy these if he hasn't read them already:
if you wanna get a jump start on the material now then go for it. The book they're gonna make you buy is "The C programming language" by Kernighan and Ritchie. It's widely known as one of the best programming books ever written and It's actually very useful for the class, so you are going to have to buy it eventually. I wouldn't bother with anything other than that and the other books they might make you buy though
&#x200B;
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/ref=sr_1_2?ie=UTF8&qid=1539738086&sr=8-2&keywords=the+c+programming+language
(Just an aside comment: when I saw this post it was at 0 points. I have no idea why this post or the poster is getting downvoted -- it is legitimate curiosity to link C to computer science and garner interest in CS/programming languages. So what the fuckity fucking fuck?)
However if you're developing applications you might look towards using a different language such as C++, Java, Python, Cocoa, Swift, etc. If you're doing numerical/scientific work you might do it in Matlab. C is definitely not a good choice for writing a web application. You pick the language you use appropriate for the type of goal/task you're trying to accomplish
volatile
or aregister
keyword).No its not a stupid question. Most people like the K&R book, which is like the C bible. Link
I recommend checking this out, it has a ton of recommended C books for beginners and Intermediate.
General:
Pragmatic Programmer
C language
This one is a lot tougher read and is probably one of the most famous book sets in Computer Science
Computer Programming Don Knuth
Edit: fixed spacings
There's a few resources. Ultimately it comes down to you sitting down and playing around with all this stuff. Sure you can watch courses, read books, etc but the best learning experience comes from using the programming languages, operating systems, setting up the server emulators, etc.
Keep in mind that you won't learn everything overnight. I started my time with all of it back in 2005. Wasn't until around 2009 that I had a firm grasp of most of these concepts and turned it into an actual career path. These are all skills that can be used outside of RO stuff.
https://learncodethehardway.org/ and https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
LCTHW is more contemporary, and written by an author who may or may not be banned in this sub, it has fairly strict pedagogy, but may be more approachable for you. K&R C is the definitive book on C, though it's old and slightly dry at points, I don't know your syllabus, but I think K&R C would supplement well.
I've never used Visual Studio, but I've heard that Microsoft makes great development tools. These videos may help https://www.visualstudio.com/vs/getting-started/
Also, as general advice, consider starting with something other than C. It's fairly low level compared with other modern languages, and tends to be used to low level systems programming (consumer electronics or operating systems), or as a foundational knowledge to be learned but not used daily, similar English and Latin (I'm sure this analogy will piss off someone somewhere).
I'm only guessing at your goals as a biologist, but a less computational efficient but scientifically applicable language like Python or R may be a better fit.
Head First Java
Thinking in Java
Effective Java
Java Concurrency in Practice
Best $150 you'll ever spend. Read in order listed.
Read, in this order:
Those three books should get you wherever you need to be, without getting more specific books (e.g. framework books).
Java is a great language to start out with and I would recommend two books to get you running. Since you are new to the language and programming in general, start with Head First Java. Then, move on to a more advanced treatment like Core Java. Thinking in Java is also very good but it's dense and some people have a difficult time digesting it.
Once you have the basics of the language down, learn about working with databases. Then, move on to server-side development as that's where the jobs are.
Despite the similarity of their names, Java and JavaScript are not similar and cannot be used interchangeably. JavaScript is primarily used in UI development in web browsers, although server-side implementations have existed for almost as long as JavaScript itself. Currently, the most fashionable of these implementations is node.js.
Lastly, since you are looking to work professionally but without any formal education, know that you are going to have a difficult time getting work for the first several years. You might find that learning JavaScript (and HTML and CSS) are a quicker route to finding a job as front-end web developers often do not require a college degree, whereas Java programming jobs invariably do.
this is the best java book i know: http://www.amazon.com/Thinking-Java-4th-Bruce-Eckel/dp/0131872486 should have anything you need.
Heres something from an older reddit thread asked in /r/ruby and it suggest the book The Little Schemer to help you think recursive, if you got that down I guess writing your own recursive code is less of a struggle, I cannot however tell you how good that book is, so you should do some research on that yourself.
FWIW, the "applicative order Y-combinator" is the punchline of The Little Schemer, which I highly recommend.
Most explanations of it describe it as "how you do recursion without names," which is a good enough operational description, I guess. What it really is, historically, is the proof of Curry's paradox, a simplification of a proof that was originally arrived at by Alonzo Church's grad students, Stephen Kleene and John Rosser, as a demonstration that the untyped lambda calculus is logically inconsistent.
In other words, its significance isn't as a tool for implementing general recursion. Its significance is as a proof that the untyped lambda calculus isn't useful for what it was originally intended (i.e. use as a formal logic), and motivates the introduction of type theory in logic and computer science.
The Little Schemer. After you read that book, in addition to having had a car load of fun, you'll be pretty good with recursion, which is all that book basically teaches. It's pretty slim, around 100 pages IIRC. You could knock it out in under two weeks if you worked at it. Man, I love that book.
Program anything. The choice of IDE (JCreator) isn't very important. Try debugging a program if you've never done that. If you're on *nix, check out GDB and valgrind.
Your profs have probably set up the course structure for 4 years to work a certain way. Some where down that road (2nd semester for me after AP comp sci) I had to take Programming Languages and we used Scheme. Functional programming feels entirely different from imperative. I would suggest buying a copy of The Little Schemer. It is one of the few programming books I'll probably keep forever, and it doesn't break the bank. It will also open your mind in CS.
Intro: The Little Schemer
Intro: Simply Scheme
Intermediate: Structure and Interpretation of Computer Programs
Many others have answered this sufficiently but as it's your gf taking the course I thought I would chime in to suggest picking up The Little Schemer which is a cute book for informally learning the language and you will pick up cute-points.
Read The Little Schemer
The Little Schemer
( google books preview )
The Little Schemer
This book is a great tutorial for "programming" in lisp just by reading the book. You can learn "lisp as a concept" more than lisp for work.
The Little Schemer was a good read when I wanted to learn about recursion. It cleared everything right up =) Only the first few chapters are necessary:
http://www.amazon.com/The-Little-Schemer-4th-Edition/dp/0262560992
Buy up all remaining copies of Java Puzzlers: Traps, Pitfalls, and Edge Cases and then re-list them for twice the price.
Java Puzzlers: Traps, Pitfalls, and Corner Cases by Josh Bloch
This is very relevant: http://www.amazon.com/Java-Puzzlers-Traps-Pitfalls-Corner/dp/032133678X
Depending on how skilled you are at Java:
Then for Android specifically:
This seems to have been recommended quite a few times on Java related subreddits: http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
This is the book you want to read:
http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
I personally always use an IDE, because you will soon discover that there are dozens of libraries used by real world projects, and you cannot possibly know everything about them. However, IDEs have options to turn off autocomplete, incremental compilation and syntax highlighting, if you are a masochist... Google is your friend.
I read Algorithims in C++ by Sedgewick, and it was great, but not important for learning to code. You need to know the basic concepts of: the Java standard library, especially collections, looping constructs, etc. Any good tutorial should cover these. General CS knowledge is great and you will be quizzed about it in interviews. However, not necessary when starting out.
Eventually you will need to know about the Java memory model, concurrency and thread safety this was the Bible back in the day, maybe there more up-to-date options.
Math is an interesting topic; in college, you have to learn calculus, which is where many of us decide that we don't like math. This is a pity, since programming is applied math. Also, math gets more interesting, but often weird, when you start studying upper division topics.
Most data structures are based on set theory and relations, which are taught in Discrete Math. To understand what a function is, you need to know about Set Theory and/or Category Theory. Category Theory is fascinating, and particularly important for understanding functional programming. This is a great resource. To understand graphics, you need to know about Geometry and Linear Algebra.
It also helps to understand the basics of Probability, Combinatorics and Abstract Algebra. All of this math is advanced stuff however, most programmers don't need to know any of that...
I type too much so I needed a second post
---
> And lastly, do you have any sources that you used to read up on multithreading?
I recommend doing the following:
If you know Java and want to see all the ways you can strangle yourself, this book has a lot of great things in it. It's quite readable and will likely scare you (for good reason...) into how dangerous multithreading can be. The book is hefty and requires Java, but the information is very practical.
If you want CSC369 notes from a really good textbook, the following chapters are relevant:
http://pages.cs.wisc.edu/~remzi/OSTEP/threads-intro.pdf
http://pages.cs.wisc.edu/~remzi/OSTEP/threads-api.pdf
http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks.pdf
http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks-usage.pdf
http://pages.cs.wisc.edu/~remzi/OSTEP/threads-sema.pdf
http://pages.cs.wisc.edu/~remzi/OSTEP/threads-cv.pdf
http://pages.cs.wisc.edu/~remzi/OSTEP/threads-bugs.pdf
http://pages.cs.wisc.edu/~remzi/OSTEP/threads-events.pdf
You can casually read the above. You don't need to actively code or anything... and the style is very laid back and enjoyable to consume. Each chapter should take you ~40-60 minutes to do, so you can do one a day over the summer and be done in a week.
If you want the 369 notes, these are relevant lectures which cover the above chapters:
http://www.teach.cs.toronto.edu/~csc369h/winter/lectures/w3/L3-Synch.pdf
http://www.teach.cs.toronto.edu/~csc369h/winter/lectures/w4/L4-Synch.pdf
The above may be a good refresher after you've done the textbook spam I posted above.
All of these links are from the CSC369 webpage here: http://www.teach.cs.toronto.edu/~csc369h/winter/lectures.html
LASTLY make sure to read up on the language you plan to use and explore its concurrency library.
Now that you have the knowledge, go write something that does this. Find a cool topic where you have tasks that could use multiple threads to go faster and make some cool stuff.
=============================================
Some final notes because this took a while to type up and I have to go have lunch:
I didn't proof read anything so enjoy the typos, spent too much time writing posts
EDIT (I lied): Don't forget that luck plays a large factor in the interview, you can have everything and you could be asked some stupid question. Therefore it's not worth killing yourself over since you could grind like mad and have luck just not be on your side (and this is why you should apply to as many companies with interesting jobs as possible)
i've been looking for comprehensive guide on clj concurrency
today i got https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
thank you for this
I think Java Performance and Java Concurrency In Practice are two of the main ones. Especially JCIP is the reference for concurrent programming.
If you've worked with Java before this is a great book
I highly recommend Java Concurrency in Practice if you don't mind buying a book. http://smile.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
It really demystified threading for me and I felt more comfortable with when something should be synchronized.
If you are using concurrency a lot then it might be worth it to take a look at: Java Concurrency in Practice (I believe that's the book I've seen recommended before.)
It's a little old but still mostly valid.
> Oh boy, I know nothing about either of those things.
Get this book pronto. It's essential.
Depends on your experience. If you haven't programmed before, I think Big Java would be a good book to start with (it's the book MIT's Civil Engineering Dept uses to get them up to speed with Java). If you've programmed before, you're better off doing the official java tutorials followed by Core Java 1 and Core Java 2.
Regardless of the path you take, if you intend to do ANY kind of "serious" java programming, Effective Java is a must-read.
Finally, you'll want a good reference book. Gosling's Java Book is the definitive one, although you might prefer a book by O'Reilly.
SO Guide on Java Books
Better SO Thread
Sorry, ran out of time. Here's the rest of my answer:
If you are more of an engineer and not that interested in design, but in Front-End Development, start with Bulletproof Web Design, following up with Transcending CSS.
For JavaScript, read You Don't Know JS and Eloquent Javascript. (The second edition of Eloquent is going to be released on 17th of november, if you can't wait until then, there's a first edition aswell)
A very important design book I forgot aswell: The Design of Everyday Things.
Good luck on your way to mastering Web Design!
Thanks, I appreciate that. I started doing front end stuff probably 12 years or so ago right when I was finishing college. I got started with these two books:
http://www.amazon.com/CSS-Mastery-Advanced-Standards-Solutions/dp/1430223979
http://www.amazon.com/Bulletproof-Web-Design-flexibility-protecting/dp/0321509021
That's about it, really. I do browse some of the top blogs and try to find inspiration though and see what kind of layouts everyone is doing these days.
I'm guessing they're pretty outdated right now though. Aside from that, I just try to not over complicate things in the design and keep it as simple as possible. I'm not someone who's going to spend hours designing some award winning illustration for the website header; I just try to pick a nice color palette (usually two at most three colors) and then lay out the site with some common sense. One big thing I've found is ensure you're using enough padding/margins. I think too many times people only have 5 or 10px between elements and it makes it really difficult for your eyes to flow over the site. That's just my opinion though.
Hope that helps.
Both posts here (so far) give good advice in terms of learning assembly. I personally used the OpenSecurityTraining course that was linked by /u/miguelhgn to fill in gaps I had in assembly, and I second his advice to check that one out. If that course proves to be too steep, I'd take a step back and learn a bit of C -- so that you can better understand the context of the assembly you would be reading. For free resources, I generally like to recommend https://publications.gbdirect.co.uk//c_book/ or http://users.cs.cf.ac.uk/Dave.Marshall/C/ as they're iso-9899 recommend free resources that cover a pretty good scope when it comes to C itself.
If you'd prefer a more textbook style of reading, and don't mind shelling out money, I generally recommend C Programming: A Modern Approach above anything else that's out there, but it's far from necessary to get this if you find that you learn from the free resources just fine.
As for recognizing patterns in assembly over time as mentioned by /u/poindexter_one, that would best be implemented by using https://godbolt.org/ imo, and starting with smaller C snippets, trying different compilers and optimization levels, and gradually doing the same with more complex code. A good exercise when you start to get good at that, is to also try to do the same thing in the opposite direction (Seeing assembly, and trying to construct C code from it, AKA a part of reverse engineering)
As for your question "Should I learn Assembly language?" depends on where your interests lie, and what you eventually want to learn / be able to do down the line. It's absolutely a good thing to be able to understand though.
Hey, I'm also learning C as well. I have spent the last 4 years with Java and wanted something more lower level.
I picked up a copy of C Programming A Modern Approach and have been completing one chapter a night. And by one chapter a night, I mean reading the chapter, taking notes on stuff that I don't get, and doing all of the programming projects. Even the early chapters that are super easy, I figure that it will help me learn the syntax so that I'm not screwed later.
If you have the time to learn slowly like me, I really suggest it.
As for practicing C online, as far as I know, that is impossible. C is way too destructive to allow people to compile and run it on some server.
I suggest this book
I used an earlier version of this in my first C programming class: http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?ie=UTF8&amp;qid=1311251965&amp;sr=8-1
It was ok, but I find myself referring to the K&R book more on projects. It's just better in every way. Not that the first book was bad by any means.
I don't know if this is good, but here's a free book: http://beej.us/guide/bgc/ It's by the same guy who did the Beej's guide to Network Programming (http://beej.us/guide/bgnet/), which I highly recommend if you want to get into network programming at any point. This book was instrumental in me passing my network programming class.
Second, don't use an IDE like Eclipse. Use a text editor (my preference is VIM) and GCC. You'll learn more. Once you get the basics down, then learn an IDE.
Finally, as Madsy9 pointed out, look into revision control (Git, Subversion, CVS, etc) at some point. However, I would learn a bit about the language first before using revision control. In my CS curriculum, we didn't touch revision control until Operating Systems in my third year. Previously, we learned C and simple data structures (linked lists and the like) before touching revision control. Then again, CS != Software Engineering, so I could have been taught completely wrong on this.
To be honest, I would suggest some other book first (kochan and king are good enough), then reference/read that book if you have problems or just want to say you read it.
K&R is old, and while still mostly accurate, and can teach you C, there are books that are better suited for teaching people learning C in this century. One thing that the newer books lack usually is explaining old stuff. For example, many books don't sufficiently explain how the input and output buffer works.
I do think it's a good idea for people actually doing stuff with C to eventually read K&R, but starting from the basics, you might want a gentler approach.
C Programming: A Modern Approach
Buy 2-3 good books on the C programming language and get really good with it. I personally read this one and liked it but it's not introductory in my opinion so start simple.
For system administration good python, bash and a surface-level understanding of C are enough
As everyone said, start with a book. C++ has a lot of cool features and a lot of really advanced things can be done with it, but before you start with any of that you're gonna need to learn the basics. It took me a year to understand most of the "basic" C++ concepts, so don't expect to have the quick learning curve that you would get in Python/JS.
However, I also strongly recommend you start by learning C before C++. I feel that C++ has too many advanced features wrapped around C, and you get into that confusing situation where a lot of C++ expects you to know how the low-level stuff works (especially memory allocation), while at the same time hiding it so much that you probably won't learn it. I suggest picking up some highly rated book on C and learning everything until you at least know how pointers and dynamic memory allocation work. Then you're free to go crazy with the C++.
PS: I recommend this book:
http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/
I too started with C as my first language using K&R and "learn C the hard way" but i abandoned both halfway. I've started from beginning with "A modern approach to C" as my main source and C: A Reference Manual as, well reference manual when i wanted more in depth knowledge about particular subject. After you're done with Modern approach you should go back to K&R and finish it in order to have your foundation properly rounded.
Edit: I should add few more resources that generally helped me a lot when I started:
http://c-faq.com/
C Traps and Pitfalls
C Standard Library
Things you should avoid in C
A Guide to Undefined Behavior in C and C++
Agree. Change your degree and focus on CIS or CS even for the AA. You could still get an AA in CS and transfer to a 4 years school and only have two years left.
For reading like ender08 said you need to know if it is java, or c++ track, but I would still read C Programming: A Modern Approach, this book is amazing. Take notes, and type out each example in either an IDE or text editor.
>2. If it's not too difficult and something that could be learned over a few months (minus full time work), what sort of subjects, books, pdfs, wikis or other resources would I need to be looking at to get started? I'm a web designer so this isn't really my field... but if there's a specific area of electronics that covers this sort of project, it'd really help to find out.
It is too difficult to do in a few months, but if you are really interested in learning, follow the curriculum of an Electrical Engineering BS. First you need to know calculus, this would be a good place to start, get the used version of course. Alternatively, watch the Khan Academy videos for calculus and find some problems to practice, though this will be less thorough.
Once you have gotten to integrals, start your calculus-based physics education. There is no point in really starting before, as algebra based physics isn't terribly useful for actually understanding things, and you will have to relearn it all with calculus anyways. Halliday and Resnick is a fairly good intro text that includes calculus. The one I linked is just the E&M sections, you can learn the mechanics stuff from Khan -- you just need a cursory understanding of the mechanics. Unfortunately the Khan videos aren't very good for E&M, they are generally too algebra-based. Last I checked he doesn't even cover Gauss's law.
After that you will need some Linear Algebra, Differential Equations, Digital Logic, Circuits, and programming just to round out your fundamentals. Now you are roughly 2 years into a basic ECE curriculum, ignoring a lot of filler courses as necessary.
After this it gets a bit more flexible.
Textbooks on Signals and Systems, Microcontrollers/Microcomputers, Antenna Design, Embedded Devices, Electric Networks, and Digital System Design should round out your education. However that doesn't mean you know what you need to design what you are thinking of -- you also need to get a bunch of real world knowledge and practice. Make a few basic devices, get them manufactured, just to get a feel for the process. Delve into the various IEEE standards and UL standards to learn what you need to do to produce a device that can be sold and will be compatible. You have a lot of research ahead of you, so good luck!
I recently bought C Programming: A Modern Approach, and it has been fantastic. It has a lot of exercises in each section, and an extremely helpful Q&A section for each chapter that clarifies a lot of common problems. It's easily the best programming book I've dealt with so far, though really I've only been through four or so.
Actually, as a recent Computer Science graduate, I agree with this quite a bit. Getting a degree in Electrical Engineering, with perhaps a minor in Computer Science, really opens a lot more doors for you. A lot of the embedded (and generally systems) development jobs I've seen/applied for recently prefer EE candidates to CS candidates -- some won't even consider CS candidates. While the web development industry is big, generally speaking if you have any experience with development you can work in the web world (especially in a junior role) but it takes specialized experience to work in the embedded/systems world.
What you DON'T get from an EE degree alone is discipline in Software Engineering, some of the things like theory of computation and algo. analysis, but if you can hack an EE degree you can pick these up rather easily. Of course, this point is likely moot if you get a minor in CS but that depends on the specific program.
Anyway, I recommend Big Java, it's what I learned on and gives a pretty solid intro. to OO development in general.
In addition, this book will save your life. With a good programming base, it's almost like cheating.
> I have struggled with noise reduction in PixInsight and even when I used Photoshop.
I think most of us (I KNOW I do) have the same difficulty, and it boils down to...well, quite frankly, to wanting our amateur images to look like Hubble results.
Harsh though he can sometimes be, I think Juan Conejero of the PixInsight team said it best :
> A mistake that we see too often these days is trying to get an extremely smooth background without the required data support. This usually leads to "plastic looking" images, background "blobs", incongruent or unbelievable results, and similar artifacts. Paraphrasing one of our reference books, this is like trying to substantiate a questionable hypothesis with marginal data. Observational data are uncertain by nature—that is why they have noise, and why we need noise reduction—, so please don't try to sell the idea that your data are pristine. We can only reduce or dissimulate the noise up to certain limits, but trying to remove it completely is a conceptual error: If you want less noise in your images, then what you need is to gather more signal.
Admittedly...agreeing with Juan doesn't mean I'll stop trying to "prove him wrong" anyway. I'll still mash away at TGVDenoise until the background looks like lumpy oatmeal and call it "noise reduction"...but I'll feel 2 minutes of shame when /u/spastrophoto calls me out on it. ;)
Having said that, I think the article linked above and this comparison probably did more for my "understanding" of PI's NR tools than any others I've read....for whatever that's worth. :)
> Glad to see a fellow hockey player on here...not many astrophotographer/hockey player hybrids out there!
Thought the username looked vaguely familiar. :) It IS an interesting combination, ain't it?
That's one more added to the list now... /u/themongoose85 is a hockey player too.
using:
I found moving from c++ to objective-c pretty easy. Objective-C seems weird at first but it's very mature and well thought out. The biggest problem I had was objective-c's memory model so pay special attention to that.
Certainly going through the cocos-2d tutorials is going to get you a long way.
Oh yeah, I also read Programming Objective-C on the toilet which really helped for big picture kind of stuff. Getting used to the NSString, NSArray classes takes some time but is well worth doing.
Good luck.
Thanks!
I didn't have a background in programming per se (I dabbled on and off since I was a kid), but I was well versed in technology of all stripes.
That said, here are the things that helped a lot:
http://www.amazon.com/Programming-Objective-C-Stephen-Kochan/dp/0672325861
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/
The biggest stumbling block (for me at least) was dealing with the developer tools. Xcode can be SUPER aggravating (both in terms of bugs and in "how do I do this thing that I know I want to do?"). For me at least, there are things that were super hard to fully understand (the difference between creating a UI object in Interface Builder vs. programmatically, delegates, object lifecycle, outlets and actions, understanding Instruments, etc.)
Now that I have a few apps under my belt I can see the rhyme and reason to Apple's design patterns but when I was starting out it made no sense whatsoever.
Good luck!
You will find malware to be written in plenty of languages including Visual Basic, c++, C, etc. For C I highly recommend the Ansi C book, It's short, clear and comes with code examples and exercises at the end of each chapter.
Reversing c++ is similar, but there are many nuances to it depending on the compiler used. For c++, and at your level I would recommend the Dietel and Dietel book
http://www.amazon.com/How-Program-6th-Paul-Deitel/dp/0136152503/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1267536050&amp;sr=8-2-spell
In terms of assembly, I recommend a few books:
First:
http://www.amazon.com/Assembly-Language-Intel-Based-Computers-Textbook/dp/000501395X/ref=sr_1_5?ie=UTF8&amp;s=books&amp;qid=1267536245&amp;sr=1-5
Second:
http://www.amazon.com/Professional-Assembly-Language-Programmer/dp/0764579010/ref=sr_1_3?ie=UTF8&amp;s=books&amp;qid=1267536245&amp;sr=1-3
and Third:
http://www.intel.com/products/processor/manuals/
Good luck.
Start right here:
http://www.cpearson.com/excel/topic.aspx
And buy this book:
https://www.amazon.com/Excel-Power-Programming-Spreadsheets-Bookshelf/dp/1119067723
If you are completely new to programming, don't worry, it's definitely not as hard as people believe it is.
The first important thing when you are learning any programming language is to be goal oriented, because this is what is going to keep you engaged and make you more likely to actually gain something from anything you read.
Think of the most tedious and repetitive task that can save you some time - that is going to be your best place to start. For instance, some formatting always has to be updated and it's time consuming, or you need to create a letter from information on a speadsheet every day etc. That's where you'll see your work pay off immediately, and that rush of having it work for you every day will really inspire you to keep going. For me, it was taking a bunch of files and porting the information to one place initially.
Once you know what your end goal is and what you want it to do, google it in every variation you can find. YouTube tutorials are actually where I started, just to see if what I was thinking of was possible. They have a lot of great resources for how to do certain things and you can find out if the concept is achievable this way really easily. Try to "steal" code or try examples that you find. (Just put a url in a comment or some indicator of where you found it from because you will forget later, and having the page it came from can significantly help when you are troubleshooting. This is attribution etiquette for programming, anyway.) Don't get discouraged if the code doesn’t work the way you imagined, this is going to allow you to see why it behaved the way it did later on and is a really important step to learning how things worked. Besides, with anything you do, you will likely have to mold it so much to your project, it will end up being more your work than anyone else's in the end either way.
[Wise Owl Tutorials] (https://www.youtube.com/watch?v=KHO5NIcZAc4&amp;list=PLNIs-AWhQzckr8Dgmgb3akx_gFMnpxTN5) are some of the most thorough and logically laid out tutorials I have seen for VBA and I heartily recommend this if you learn better through video - he's pretty much made a full course of it.
Then, I would say dive in and find out how the language itself works for a little bit. Read about variables, if statements (and variations of these), and loops.
Variables are the placeholders for your data, and using the right ones in VBA means that you can make your program run faster or slower, so it definitely helps to get an understanding of these and what they do early.
If statements and operators and their variations are the parameters that determine what happens. (If dog does not = fed, then feed dog.) These are the logic that everything runs on. You would be surprised how much coding comes down to statements like the dog example.
Loops are how your program is able to do a few things to a large data set in very little time in a structured way. (For each dog, if dog is not fed, then feed dog, then move onto the next dog.) These are also ubiquitous in all programming languages, but the syntax varies between language. This is how those if statements become really powerful.
If you are like me, and learn well from books, these two have been the best ones I've found:
[Excel 2016 Power Programming with VBA (Mr. Spreadsheet's Bookshelf)] (https://www.amazon.com/Excel-Power-Programming-Spreadsheets-Bookshelf/dp/1119067723/ref=sr_1_1?ie=UTF8&amp;qid=1539050489&amp;sr=8-1&amp;keywords=john+walkenbach+excel+2016+vba)
This book is great for learning from the very beginning, especially if you don't have any previous programming knowledge. It will walk you through everything in a very easy to read way and get you dreaming about the possibilities with VBA. It also shows you why you may end up wanting to get detailed in the ways you think about variables etc with timed examples. I used the 2013 edition of this book and I was very pleased. This is a great choice as your first book covering the basics.
Mastering VBA for Microsoft Office 2016:
This book is the one I used the most out of all of the books that I bought on the subject. It has some really excellent examples of things you may not have even imagined could be done in VBA that give the language a lot of power and usefulness. I still refer to it, even though I outgrew all of my other books. It spells out a lot of the basics as well, and if I had to refer to VBA on a desert island, this would be the only book I would bring. (Although the idea of having to refer to VBA on a desert island is a special kind of nightmare, even for someone like me who loves it.)
If you can only afford one of these, definitely get this one - the first one is great for baby steps but becomes outgrown quickly. I recommend it mostly because it does an excellent job of explaining programming if you have never done it before.
The Spreadsheet Guru has some really basic things ranging to some more advanced concepts and is not a bad place to start learning some quick fixes.
Excel Macro Mastery is great for getting to know how the moving parts work, especially with some of the complex data types that it can be a little hard to wrap your head around as a newcomer. This site has some times when it will try to sell you on his program, but it's worth a little annoyance for the truly good advice:
Excel Virtuoso is excellent for advanced program structures and how to make VBA act more like an object oriented programming language. It may be good for some of the earlier stuff, but this is when I found ways to do things that most people don't seem to know it can, including ways to make custom classes for data do things that are not very well known and only glossed over in most VBA programming books. It's been a godsend for me, and is the cornerstone that a lot of my work actually hinges on as the project I took on was far more complex than the scope of most macros, which are quick and simple maneuvers primarily.
But don't limit yourself to these resources. Look everywhere when you are trying to learn and don't fret overly with whether you are doing something right or wrong. Make it, test it, troubleshoot it, and improve.
The computer will not explode if you do something wrong. VBA is meant to be like a fisher price language because the intent of providing it is more for office workers than full blown programmers. At worst, your program will shut down and you may have to end the task in task manager or reboot your computer. This is rare. Most times, the compiler will remind you that you missed some part of syntax, which is a quick and easy fix that even advanced programmers have to deal with all of the time.
Feel free to look at places like stack overflow, but take all of this advice with a grain of salt, because there are normally at least 20 ways to do something (and that is on the low end) and everyone can get a little protective of their way. I use this as more of a brainstorming effort.
And if you have any questions, feel free to reach out to you. If I haven't dealt with it already, I may be able to point you in the right direction. :)
Also, if you're interested in learning programming in general, this is an awesome list of coding courses and where to find free coding courses that freecodecamp sent out this summer:
https://medium.freecodecamp.org/500-free-online-programming-computer-science-courses-you-can-start-in-august-bc1bcac1af5e
Io avevo imparato su questo
This might help:
https://www.amazon.co.uk/Excel-Power-Programming-Spreadsheet&#37;E2&#37;80&#37;B2s-Bookshelf/dp/1119067723/ref=sr_1_3?ie=UTF8&qid=1527765923&sr=8-3&keywords=excel+vba
But what you really want to do is copy the data into a fresh book so you can play with it, start by looking into pivot tables:
https://www.excel-easy.com/data-analysis/pivot-tables.html
Pivot tables should solve your problem once understand them. If not then move on to more advance formulas and feature combinations. Before finally tackling VBA (actual ms office programming), use VBA only if literally no provided feature(s) can be used to solve your issue.
Also as an accountant, do your career a favor and make sure that you master excel by practicing in your spare time. Mastering excel at home really helped me break into the fin-tech world, now I am a full time full stack developer. Excel can be used to do almost anything with some creativity. Good luck mate! let us know how you do
Sure, the basics, but for advanced information gathering consider using SPSS. Andy Field gives a good introduction if you're interested.
Did you even try?
If you liked that... you'd also love "Discovering Statistics using SPSS" by Andy Field (the second title is "And Sex And Drugs And Rock N' Roll")
http://www.amazon.com/Discovering-Statistics-using-IBM-SPSS/dp/1446249182
Also check out Applied Predictive Modeling - it's in a way the next book to read after ISLR - it goes a bit more in depth about good practices, plusses and minuses of different models, feature creation/extraction.
Badass Lego guns? I have a modified version of the gun from Forbidden Lego, but that sounds awesome!
Amazon links:
Badass Lego Guns
Forbidden Lego.
IMHO if you can afford the C Programming: A modern Approach (2nd Edition) , then go for it by all means. Read the customers reviews to see why.
Por lo menos no es Asm.
Dicen que este esta pro, igual lo adquiero cuando acabe el lcthw.
http://www.amazon.com/Programming-Modern-Approach-2nd-Edition/dp/0393979504/ref=pd_sxp_grid_pt_0_2
I checked out a discussion about K&R the other day. Eventhough it is a classic in programming litterature, it seems like it is a good idea to pick an other book for starting to learn C for you.
The recommendation I found was C programming, a modern approach. Here is an example link. https://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504
Exact book name is C Programming, A Modern Approach. And get the second edition. (amazon link for reference)
I have to say that I don't know. I know that some people like KNK, but as I haven't read it, I cannot vouch for it.
None really exist, it's better to get a good book and learn the language properly
http://www.amazon.com/Programming-Modern-Approach-2nd-Edition/dp/0393979504
http://www.amazon.com/C-Programming-Language-2nd/dp/0131103628
Here is the mobile version of your link
we used big java in highschool and my freshman year of college. Its pretty good. Theres a newer edition thats more expensive..but this one should still be fine.
Not sure if this is exactly what you're looking for as it was written by physicists, but this is considered the bible of numerical methods in my field (computational physics): http://www.amazon.com/Numerical-Recipes-3rd-Edition-Scientific/dp/0521880688
Yes there is software.
The first thing I would suggest is to try the Microsoft Excel "Solver" . It is actually a wonderful piece of highly polished numerical analysis code, buried inside a stinky, steaming turd called Excel Spreadsheets. You and Google, working together, can find hundreds of tutorials about this, including
(link 1)
(link 2)
(link 3)
(link 4)
If you prefer to code up the algorithm(s) yourself, so you can incorporate them in other bigger software you've got, I suggest purchasing the encyclopaedic textbook NUMERICAL RECIPES. This tour-de-force textbook / reference book has an entire chapter devoted to optimization, including source code for several different algorithms. I recommend Nelder-Mead "amoeba" but other people recommend other code.
Personally I make a distinction between scripting and programming that doesn't really exist but highlights the differences I guess. I consider myself to be scripting if I am connecting programs together by manipulating input and output data. There is lots of regular expression pain and trial-and-error involved in this and I have hated it since my first day of research when I had to write a perl script to extract the energies from thousands of gaussian runs. I appreciate it, but I despise it in equal measure. Programming I love, and I consider this to be implementing a solution to a physical problem in a stricter language and trying to optimise the solution. I've done a lot of this in fortran and java (I much prefer java after a steep learning curve from procedural to OOP). I love the initial math and understanding, the planning, the implementing and seeing the results. Debugging is as much of a pain as scripting, but I've found the more code I write the less stupid mistakes I make and I know what to look for given certain error messages. If I could just do scientific programming I would, but sadly that's not realistic. When you get to do it it's great though.
The maths for comp chem is very similar to the maths used by all the physical sciences and engineering. My go to reference is Arfken but there are others out there. The table of contents at least will give you a good idea of appropriate topics. Your university library will definitely have a selection of lower-level books with more detail that you can build from. I find for learning maths it's best to get every book available and decide which one suits you best. It can be very personal and when you find a book by someone who thinks about the concepts similarly to you it is so much easier.
For learning programming, there are usually tutorials online that will suffice. I have used O'Reilly books with good results. I'd recommend that you follow the tutorials as if you need all of the functionality, even when you know you won't. Otherwise you get holes in your knowledge that can be hard to close later on. It is good supplementary exercise to find a method in a comp chem book, then try to implement it (using google when you get stuck). My favourite algorithms book is Numerical Recipes - there are older fortran versions out there too. It contains a huge amount of detailed practical information and is geared directly at computational science. It has good explanations of math concepts too.
For the actual chemistry, I learned a lot from Jensen's book and Leach's book. I have heard good things about this one too, but I think it's more advanced. For Quantum, there is always Szabo & Ostlund which has code you can refer to, as well as Levine. I am slightly divorced from the QM side of things so I don't have many other recommendations in that area. For statistical mechanics it starts and ends with McQuarrie for me. I have not had to understand much of it in my career so far though. I can also recommend the Oxford Primers series. They're cheap and make solid introductions/refreshers. I saw in another comment you are interested potentially in enzymology. If so, you could try Warshel's book which has more code and implementation exercises but is as difficult as the man himself.
Jensen comes closest to a detailed, general introduction from the books I've spent time with. Maybe focus on that first. I could go on for pages and pages about how I'd approach learning if I was back at undergrad so feel free to ask if you have any more questions.
Out of curiosity, is it DLPOLY that's irritating you so much?
Educate yourself.
This was a great book and goes into a little C as well. You really don't need to learn C in order to program in Objective-C, but I definitely do think it has it's advantages ... here is the book: Programming Objective-C by Stephen Kochan
I learned objective-c with this book - http://www.amazon.com/Programming-Objective-C-Stephen-Kochan/dp/0672325861
Then to make GUI apps and learn about Cocoa I read through this one -http://www.amazon.com/dp/0321503619/
I found Objective-c frusterating at first but eventually decided it was not so bad. If you know a bit of C then Obj-c isn't that difficult, it's getting to know all the Cocoa classes and stuff that takes time.
Something else I found useful was using the tab completion in Xcode to find things that sounded similar to what I was trying to do and then reading the docs in Xcode.
Maybe try to write a few simple command line programs, then translate some of your other programs to Obj-c, and finally have a crack at building a GUI app.
If you don't want to do high level assembly and that you want to do in on unix you should try Professional Assembly Language, it's based around gnu tools and it's pretty good. Especially to learn to interface your assembly language with c. After learning that you can use the system call to print stuff to the terminal well you don't really care about reinventing printf, so you can just easily call the c printf function in assembly, which the book does most of the time. And you learn really early how to write a function that can be called from a c program.
Vivek has some good tutorials, but I don't think they're good for brand new beginners off the street. I recommend Assembly Language Step By Step: Programming With Linux, and after that Professional Assembly Language
Hey OP, I'm in a class where about half of it is writing AT&T syntax x86 assembly. This the same syntax output by GCC.
There's very little in the way of AT&T syntax documentation, but there is one good book: http://www.amazon.com/Professional-Assembly-Language-Richard-Blum/dp/0764579010
This book talks about all the linux utilities you need, how to write straight assembly, and how to inline it with your C programs.
AFAIK there are no bugs in gcc assembly compilation. The assembly language generated by gcc compilation of .c files will have a few bugs (they allocate memory in 16byte chunks, except when they don't), but I haven't encountered anything just compiling my .s files and running the executables.
gdb is useless for me when I'm doing assembly work, except to see where the program died but this is useless if you are not 100% sure you are following the calling conventions, because it could be that it dies in the caller but it's your (the callee's) fault. The only other thing it's useful for is dumping registers, but I have a register dump that's very easy to use if you want, you just call it in your code (don't even have to set up parameters) and it does everything for you. Only x86 though. Also have a hexdump program if you want to check what your stack looks like, but to use it you first have to learn how to pass two local ints and a pointer.
EDIT: forgot to say just message me if you want the programs and I will upload the source code
Professional Assembly Language covers SIMD instructions, although it's from 2005, so it's also a bit outdated.
VBA is rather archaic and you manipulate excel through poorly documented com methods/objects and it sucks. If you really want to go that route here is a link to try. https://msdn.microsoft.com/en-us/library/ff846392.aspx
VBA is also strictly distinct and not entirely compatible with Visual Basic. If you're entirely sure you want to go this route there are books on the subject. Try the Excel Bible. It has sections in there on VBA. Only 100 or so pages however. Excel 2016 Power Programming with VBA is about 700 pages of VBA
I highly recommend Andy Field's book Discovering Statistics Using IBM SPSS Statistics. He has a gift for simplifying complex statistical concepts. Additionally, you'll be learning to use SPSS, which is guaranteed to be useful in your graduate studies and career. Alternatively, he offers the same book for other statistical softwares.
I'm late to the game on this one, but learning these programs cannot be stressed enough. Different institutions have different preferences for programs, so you may hear about MATLAB, SPSS, STATA, R, etc etc. Pick one and go for it. My personal suggestion is to begin with SPSS. It's very user friendly and a great kickoff program for getting your feet wet.
Your school may have stats classes where you'll learn SPSS or a program like it, but if you want to go at it on your own for a headstart, I suggest two things: the first, YouTube, FOREVER. There are a ton of helpful videos which take you step by step through the processes of using almost any program you can think of, and the best part is that YouTube is free.
The second is that it's never a bad idea to pick up a great book, a go to reference guide if you need it. Discovering Statistics Using SPSS is written by a great author who (shockingly) does not make the subject matter seem dry. I own the R equivalent and am looking to pick up the SPSS version soon because I liked it so much.
Costs of textbooks/stats reference books are high, I know. But for my preference, nothing beats having that go to reference item on your shelf. If you decide to start shopping around, you can ask around in /r/booksuggestions or /r/asksocialscience and see what others use to find the best book for you.
I'm a graduate student who teaches an undergraduate statistics course, and I'm going to be brutally honest with you.
Because you have expressed a lack of understanding about what standard deviation is, I don't anticipate that you will be able to understand the advice that you receive here. I teach statistics at an undergraduate level. I teach standard deviations during week 1, and I teach ANOVA in the final 2 weeks. So, you are at least a full undergraduate course away from understanding the statistics you will need for this.
Honestly, you're probably in over your head on this and a few days spent on reddit aren't going to give you what you're looking for. Even if you're given the answers here, you'll need the statistical knowledge to understand what the answers actually mean about your data.
You have run an experiment, but the data analysis you want to do requires expertise. It's a LOT more nuanced and complex than you probably realized from the outset.
Some quick issues that I see here at a glance...
Mashing together different variables can make a real mess of the data, so the scores you have might not even be useful if you were to attempt to run an ANOVA (the test you would need to use) on them.
With what you have shown us in the post, we are unable to tell if group b's scores are higher because of the message they received or whether they just happen to be higher due to random chance. Without the complete "unmashed" dataset we won't be able to say which of the "mashed" measurements are driving the effect.
I have worked with honors students that I wouldn't trust with the analysis you need. Because you are doing this for work, you really should consider contacting a professional. You can probably hire a graduate student to do the analysis for a few hundred dollars as a side job.
If you really want to learn how to do it for yourself, I would encourage you to check out Andy Field's text book. He also has a YouTube Channel with lectures, but they aren't enough to teach you everything you need to understand. Chapter 11 is ANOVA, but you'll need to work your way up to it.
Stats :) https://www.amazon.com/Discovering-Statistics-Using-IBM-SPSS/dp/1446249182/ref=sr_1_1?ie=UTF8&amp;qid=1494420070&amp;sr=8-1&amp;keywords=statistics+using+spss
(also other versions if you/your school doesn't use SPSS)
Google Forms er bra og svarene dine vil bli lagret i et ark som kan lastes inn i SPSS. SPSS kjenner .sav, .csv og excel-varianter. Her er en video hvor Andy Field forklarer deg hvordan du kan gjøre det:
https://www.youtube.com/watch?v=nchjj4XzIWc
Den eneste begrensningen med Google Forms du må bekymre deg for er om du skal ha mer enn 400.000 respondenter og over 256 spørsmål. Dette er begrensningen på datasettet som vil bli laget i Google Spreadsheets. (Disse er ikke noe å undervurdere forresten.)
Fordi Google Forms er et gratis alternativ og jeg har aldri sett det mislyktes på grunn av for mye trafikk så anbefaler jeg det på det sterkeste. Jeg bruker Surveymonkey og Fluidsurveys på jobb og det har kun fordeler om du skal ha mer enn en halv million respondenter i en kort periode (f.eks en uke eller måned). Det koster også penger så jeg anbefaler Google forms.
I didn't know about
MLR
until this post. So without having spent any time with it whatsoever, I would only say that one of the nice things about thecaret
package is that you can also leverage Kuhn and Johnson's book, Applied Predictive Modeling, as well as YouTube videos of Max Kuhn discussingcaret
.You'll probably find this article and its references interesting: https://en.wikipedia.org/wiki/Cross_Industry_Standard_Process_for_Data_Mining
I also strongly recommend this book: http://www.amazon.com/Guerrilla-Analytics-Practical-Approach-Working/dp/0128002182
If you're looking something more technical about actually doing analyses, this is book is very accessible: http://www.amazon.com/Applied-Predictive-Modeling-Max-Kuhn/dp/1461468485
If you use R, this book is really great: http://www.dcc.fc.up.pt/~ltorgo/DataMiningWithR/
Apparently I have to go to the Amazon page to find a table of contents(?)
EDIT: ok they added a TOC.
There's also a paper airplane launcher in Forbidden Lego that works really well with a few modifications.
Want to build real, functional LEGO guns? Check out these two books:
I've got both books, but I haven't actually built any of the guns yet (assembling the parts needed is a challenge, and I haven't gotten the gumption up to hit bricklink.com to pick them out and order them.
Still, very cool to check out. Some day, I'll build them.
>Customers Who Bought This Item Also Bought Forbidden Lego: Build the Models Your Parents Warned You Against!
I so want this book!!!
When he has enough components, you can buy him more intruction books. http://www.amazon.com/Forbidden-LEGO-Models-Parents-Against/dp/1593271379/ref=bxgy_cc_b_img_b
"The C Language", generally referred to as "K & R" after the authors, is pretty old but still a wonderful book. (C is pretty old too, after all.)
You'll eventually want to supplement it with some newer material but it's such a well-written book that it's great to start with.
Mainly because C has no memory management by itself. The programmer is responsible to declaring and releasing memory. On top of that is the extensive use of pointers to pass data and functions around. Not having objects is just another mark against it.
C is good for a lot of things, but not everything. There are almost as many ways to shoot yourself in the foot as there are in perl.
The C Programming Book by the creators of the language should definately be on your reading list.
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
Yeah - I'm probably the odd one out, having almost no programming- or technology-related books left on my shelf - other than a couple of the classics that don't get outdated. I do still have this one and this one, although those are only for nostalgic reasons.
The set dresser comment was before I saw what else was on the shelf - I don't find it all that unlikely a collection now - although I'm still hard pressed to find a reason that Elliot would need e.g. a "missing manual" for OSX Mavericks in 2013. Or a relatively recent (from the typeface and colors, probably at least mid-00's) edition of PCs for Dummies. :-) But like someone said, maybe that was a gift.
Data Structures & Algorithms Bible
C Programming Language Bible
Can’t go wrong with either of these books.
I quite like the book written by the developers of the language themselves. The C programming language.
The C Programming Language is short and concise with examples and exercises http://www.amazon.com/The-Programming-Language-2nd-Edition/dp/0131103628/ref=sr_1_1?ie=UTF8&amp;qid=1404934158&amp;sr=8-1&amp;keywords=C+programming+language
XCode has been free for a while in the Itunes store.
https://discussions.apple.com/thread/2563835?start=0&amp;tstart=0
If you have any aptitude at all for programming, you should be able to finish that book in the summer before your class and understand the fundamentals of C. If you cannot do this, you ought to reconsider your career path.
I would recommend reading (and doing the exercises) from The C Programming Language by K&R. https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
If you really want to learn to program, and not just have a functional knowledge of implementing some practical things, you should really learn C. C is the basis for practically every modern language and it's comparatively small and easy to learn. The best book on C is K&R C which was written by the language designers. It is very precise, which I believe you'll appreciate coming from a math background.
This book only covers the language itself though. To learn conventions and patterns you need to learn by doing and reading. Find a site with coding challenges or find a project you want to work on and do it. Also read code you come across and try to understand how it works and why the author wrote it that way.
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628?ie=UTF8&amp;*Version*=1&amp;*entries*=0
https://www.reddit.com/r/learnprogramming/wiki/books
/u/phao has a good question, and I don't have a great resource offhand, but 2 things...
Java, Python, PHP, Javascript, and (I assume at least) Ruby are all C like, so the syntax will look familiar enough that you could probably fake your way through a lot of it while searching online for details and function syntax. Picking up the K&R book might be enough to get you hacking away at work without much trouble.
In fact, you'll probably feel like you are picking things up really quickly (as far as C/C++ goes at least) and wonder why you were so worried in hindsight. There is one huge catch though and it cannot be emphasized how huge this catch is.
Java, Python, JS, PHP, and Ruby (I'm assuming on the last three, I haven't dealt with them much) don't have pointers. OK, yeah, Java has pointers all over the place ("references") but they are hidden from you. In C/C++ you can point a variable anywhere in memory that you want and read/write from it and it might just happen to work fine, until it doesn't, and those issues can be a huge pain to find. Plus, C/C++ doesn't have garbage collection so as you allocate memory and shift it around you are responsible to clean it up when you are done with it.
On paper it doesn't sound too bad, but this would be the area I feel like I see new people to the language have the most trouble with, especially coming from Java and scripted languages. Just be sure to pay extra attention in that section in the book.
K&R Book: http://www.amazon.com/dp/0131103628
If you're a CompE, you're gonna be writing a lot of C. If you haven't read The C Programming Language, by Brian Kernighan and the late Dennis Ritchie, shame on you - it's one of the best, most helpful, and most concise programming books I've ever read. (The design of the book is a lot like the design of C, really.)
Also, if you want a reference for any algorithm you could possibly think of, I can guarantee it's in Knuth's Art of Computer Programming somewhere. CLRS, mentioned by xibernetik below, is another good algorithms book that's more accessible, but less in-depth.
If you really want to learn from the ground up, that is to say low level to high level, I'd recommend starting with Assembly Language Step-By-Step. It will get you introduced to binary computation, binary math, and x86 assembly. From there, I'd say move on to The C Programming Language, AKA K&R.
After that, if you've stuck with it and still enjoy it; the coding world is your oyster. Build something brilliant and reap the satisfaction of building your own programs.
Good luck!
> The next question would be what are some key concepts I should learn before I start programming?
How to write instruction manuals for retards. I don't know actually. I've taught programming (friends and TAing) but I don't know how to teach someone to be a programmer. It takes a certain attitude. You have a problem and there are certain small steps you are allowed to perform. Programming requires you to translate your problem in a sequence of small steps. There are some people who have a knack for it and they will catch it immediately. Others will look at problem, know the steps but blank out completely and never be able to make the connection of what steps they can perform to solve the problem using the small steps. I would recommend go slow and up the difficulty enough to keep you interested but not so much as to discourage you. I don't know how hard you it will be for you but I think the attitude in proving a theorem in mathematics is what would help. It sort of has the attention to tiny detail, creativity and dealing with the frustration of not seeing the solution immediately that programming requires. I think the easiest way to learning how to program would be trying.
> What do I need to install in my computer in order to practice?
I meant to answer this question in my first post. For C on Windows your options also include installing cygwin and then pretending you're on Linux. For Java, Eclipse. Itself written in Java, so cross platform. Perl, Python should be again avilable on all Platforms on the commandline, all it needs is a text editor (haven't seen any Perl IDEs). Oh in C if you're using good old gcc you should also choose a text editor. A good IDE with a not intimidating example project should be decent, but you'll probably become confident a lot quicker if you were using a simple text editor with just your compiler and interpreter.
> Is there a great difference in programming command line programs and GUI programs? What do I need to know to do GUI programs? Do I need special software / libraries / skills?
To be honest I have barely done any GUI programming. I have modified a couple of GUI programs and have done some 3D stuff in OpenGL. My answer is GUI programming is just annoying not interesting. Most of the real work does not involve how you interact with the user. GUI programming is mostly calling a bunch of library functions with some voodoo magic. Of course no matter how technically awesome your program is it's not impressive to a non-programmer until they see a GUI.
> Could you recommend a good book for self-reference?
For Perl the camel book (larry Wall is author of Perl) will serve you your entire life. For C K&R is by the auhtors of the language and considered the definitive learn C book (haven't used though). As far as C++ don't learn that as first language but I know there is a book by Stroussup and Deitel and Deitel is used in almost all universities. I found Thinking in C++ to be useful (used in my school alongside Deitel and Deitel) but please please don't learn C++ first. I plan on reading ANSI common LISP by Paul Graham one of these days.
But seriously a book won't get you very far. The quickest way of learning programming is doing it. Once you're confident programming you'll find all languages making sense and starting to edit a program in a language is a great way to learn. You have code examples right in front of you and the fact that it already runs and does most of the stuff boosts your confidence until you get comfortable enough with the language that you can see yourself do the whole thing.
> I tried teaching myself Python a while back, but then they upgraded Python to 3.0 and I couldn't do anything anymore and I was very confused as to why. It since has become clear to me that knowing a couple of codes in a particular programming language is not the same as "programming". So, I would like to know more. Could you please help?
That's why I said start with C. It's a very concise language that does exactly what you say. And there is slmost nothing to remember for it. It should help you develop the programmer mentality. The other school of thought though is that a learner computer language is something that helps you express algorithms which makes C the worst choice because it is too lcose to what you want to tell the computer rather than the ideas you havem but I'm from the bottom up rather than top-down school of thought.
That is exactly what I came here to say. Learning C before going to college made all of my CS classes easier (especially when I had to learn a new language).
When I learned C I picked up K&R and The C/C++ Programmer's Bible. My only programming experience before that was BASIC (which I don't recommend as a starter language for reasons outlined here).
Since you'll be learning Ruby anyways, it might be fun to build a little web app using Sinatra. Sinatra is simple, lightweight, and a great example Ruby's syntactic flexibility vs Java. And JRuby actually runs on the JVM and gives you access to all the Java libraries. Also on the JVM is Clojure which would give you exposure to a Lisp, functional programming, and cool concurrency tools.
Off the JVM, learn C and Javascript: C so you understand the bits under the hood; Javascript because (even if you don't do web dev) it's kind of cool that a prototype-based language is running everywhere.
Personally, if you really want to dive in, I really recommend C. You'll have to learn about pointers and memory management which Perl and Java won't force you to learn. Java will be easy to learn and will make a lot of sense if you're familiar with C.
K&R's C book is the most acclaimed introduction to the language. http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
If you want to learn C, the only way is to read the bible.
C Programming Language would certainly cover all of that. I don't know what your background is, but C is typically considered a lower level language than languages like Java or Python. Learning to program in C will give you a better understanding of what your hardware and OS are actually doing throughout the execution of your programs. That said, it's a little bit more challenging to get started in.
This book is probably the best resource for learning c. You might be able to find a pdf version online too.
This book is quite good and gives an indepth look into C. The price is pretty steep but I imangine that you could find a PDF somewhere online.
The bible of C/C++ books, ANSI C by K&R.
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
This is the book most programming courses use in Computer Science as it was written by the Bell Labs developers of the 'C' language, Brain Kernaghan and Dennis Ritchie.
Read each chapter like a fine wine then complete all of the exercises at the end of each chapter. My bet is you can find a forum somewhere to post your homework for others to evaluate, troubleshoot, or offer suggestions like the stack overflow site.
http://stackoverflow.com/questions/26645484/kr-the-c-programming-language-exercise-2-2-check-my-work
A lot of Kernighan’s (co‐authored) books age surprisingly well. It’s a real testament to his writing style that they are still relevant today despite examples tending to be in PL/I or Fortran.
And, of course…
Well ultimately the best advice I can give you is it isn't about the language you learn but the concepts you pick up the span across all languages. While you are learning C you are also learning the fundamentals of computer science. For C well C is a low language so it makes you handle memory management and makes you jump right into pointers. I have another source if you want it, the book "The C Programming Language" is what we use for my class, the book is cheap and was written by the guy who wrote C.
Thank you! I'm actually realizing that I learn more from my textbook than I do from the lectures for my intro class, so after my midterm tomorrow I think I'm going to focus on reading ahead for the next couple weeks and spending the second half of summer getting a handle on data structures and algorithms.
Aaand I just looked it up, the data structures course just has a C reference book and the algorithms course doesn't have a required textbook. I'll have to look into which textbooks are commonly used for those classes elsewhere.
I'm also planning to read MIT's Structure and Interpretation of Computer Programs at some point, cause I heard it was a really good intro book. Should I try to get through that first and then hit up data structures and algorithms?
Hm, probably not. Obj-C is used for developing iOS/OS X Apps. But I have no clue what to use in Engineering, maybe C or C++
Infos about Alfred here. It's basically a better Spotlight Search, to find/launch Apps, find files, quick google search, calculator, etc
About Objective-C: Take a look at the Big Nerd Ranch Guide
For Java: Head First
C: The C Programming Language
EDIT: iTerm2: Terminal replacement, I use it mainly for the hotkey window
and Cheatsheet: Hold command to get a list of all shortcuts for the active App
I'd recommend Tanenbaum's Modern Operating Systems, that should get you started on beginning to understand what goes on inside your computer. If you'd like further reading and you want a mental beat-down, you can't go wrong with Knuth's The Art of Computer Programming. Want to start with programming? One of my favorites is The C Programming Language by K&R. Those three recommendations, while they add up to a single semester's tuition, are worth way more than that. Good luck!
C Programming Language, 2nd Edition https://www.amazon.com/dp/0131103628/ref=cm_sw_r_cp_apa_i_djmpDbZD995S4
Find a copy of this:
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/ref=sr_1_3?ie=UTF8&amp;qid=1300812062&amp;sr=8-3
If you really want to learn all of (most of) the "Why" crap up front. I got a copy at a used bookstore for $4.
However, you don't worry about learning WHY it goes there, just learn to realize WHEN it needs to go there. It has to do with statement termination, so the compiler can properly convert your code to machine code.
I came at programming with your same mindset "why" but I realized that the answer is usually "doesn't matter to me" so then I started focusing on "when" and I realized that the "why" question eventually answered itself down the line at a time when I was better able to grasp it anyways.
I see K&R, so I'm hoping it changed in the last two days or I'm going to be very disappointed with this post
I learned C in college with this book, but I highly doubt it's the best way to learn the language: https://www.amazon.com/dp/0131103628
I haven't used C since college, so hopefully someone else like /u/tphb3 can chime in with a better answer for you.
Edit: Just realized he said "Read K&R" (which is the book I linked to).
Needing an understanding of things such as computer networks will again come down to your course selection. How solid is your math?
I'm seeing a very common pattern in the thread here. Any software engineer/programmer that's worth its... awkward complexity is measured in their skill.
That said skill isn't the in-depth knowledge of a language, where you can codegolf the mona lisa in various opengl implementations in cutting edge obfuscated machine opcode and mnemonics, but rather:
A good programmer might be able to code a small software or a small webpage in a constricted time period for a small vendor.
A great programmer only has to look at a language for a day to start programming.
A week is enough to be fluent. Two weeks are sufficient to write vendor code.
CompSci is not some magic bullshit, but some cannot stomach it.
You should absolutely look into the "academics":
Then also look into:
Mind you, not as hard as a college or university might teach it - that's their business. You should do the reading, understand, and apply it in practice.
Code in :
I would be a bad programmer if I didn't recommend:
One very interesting and important point:
To get good jobs, you have to know some technologies. Don't just brush languages. Stack overflow is your friend.
And for the wisest words that many seem to forget:
Keep it simple, do more with less. Avoid all and any side-effects.
Edit: Damn reddit and its formatting...
Edit 2: End-goal of it all: Swimming in all the cash, baby!
> I know, right? All I ask in return is that he does some simple chores around the house for me. I charge other people a fair amount of money for my tutoring services! I taught him C in ~2 weeks when he was on winter break. 24/7 of syntax, function stack frames, pointers, pointers, and did I mention pointers? After that I set him loose on the UNIX assignments, giving a brief overview of how each assignment should be done or whenever I need to fill in the knowledge gaps.
He's quite the lucky one, haha!
In regards to his learning of C, I assume you taught him out of the knowledge you had? For someone like me, I assume I'll have to go through a book, which might take a bit of time before I can really delve into Unix. I've heard K&R is a good book, but I'm still trying to figure things out.
What level of C should I have before I do get into the assignment?
> Regexcrossword is pretty easy. Try it out - just start at Tutorial (and read the title - the puzzles are fairly self-explanatory in the tutorial phase). I can't even do some of the brainteaser non-sense. If you can get to Advanced you basically learned almost all the useful parts of regex.
Duly noted, I suppose I just took a small glance at it and got a bit nervous about whether or not I could fully understand it. So does the idea of regex come up more so in the industry than it would in school, or does it have its place in both?
And does Regexcrossword introduce you to real regex? I suppose I'm more the type who likes the "this is what these symbols do, this is what these do, etc."
> Compilers are usually a course that's feared in most CS curriculum as a hard class. I wouldn't know though - I didn't take it (wasn't offered when I was senior enough & signing up for classes, rip).
Why is it feared as a course?
> CTCI was more of a review for me & mostly to get faster at whiteboarding. Most good CS graduates probably can do all the questions on leetcode / CTCI / EPI given enough time, but all the Big N really care about is if you can do it in 40 minutes. Me derping on fibonacci and bubble-sort was just me being under-prepared & stupid. I know a friend who also failed one of his Big N interviews by forgetting fibonacci and getting accepted into another Big N later on. You'd be surprised what the stress of an interview can do to you, especially if you didn't recently do the problem (I was more focused on data structure & bit manipulation questions then, thinking they were more likely to come up - especially since trees & graphs are naturally recursive so it's a two-in-one question).
Are bit manipulation questions common? I don't know the first thing about them, and not sure if I should learn them sooner rather than later.
When you say that it's hard if you didn't recently do the problem, would it be good to review key problems before an interview?
> If I had to summarize: no bullshit. He never made excuses and always had an answer for any questions he might get asked, and expected the same of his team. It wasn't just that he injected some best practices into the team and everything was rainbows. He cleaned up the task backlog, found the pain points, threw out the "fluff tasks," and kept things on schedule. Since the team was mostly new hires / new grads back then, I definitely think I felt content with the way things are and not realize there's always a better way of doing things - we needed the supervision. He does know when to stop as well - what happens at work stays at work. Work-related topics never come up when the team is hanging out OOF.
Damn, that does sound like a good software engineer. I'm curious, if you have any idea, how he could prepare himself to answer any question he got asked. Were you dealing with a specific type of technology that yielded itself to being mastered enough so that it could become something that one knows backwards and forwards?
Hvis du starter på at lære C, kan jeg varmt anbefale denne 25 år gamle bog. Den gemmer på meget godt, og er bestemt værd at læse.
http://www.amazon.com/The-Programming-Language-2nd-Edition/dp/0131103628
highly suggest one of the coursera classes on python
if you want to get into C/C++ this is a requirement: https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/ref=pd_lpo_sbs_14_t_0?_encoding=UTF8&amp;psc=1&amp;refRID=ZHA2EE7MDB4DC754QR63
a used paperback would be fine
I'd also recommend The C Programming Language.
You get yourself a copy of the The C Programming Language, and UNIX for the Impatient. Then get yourself a VAX-11/780 with 4.3BSD, and program with K&R PCC using nothing but vi.
Please see my edited post.
You are overthinking it. There is nothing called "modern way of doing C". Unlike a lot of modern languages which have been conflated with their libraries/APIs and which keep on growing, C is a small and minimal language and has not changed much through its revisions. So you will be good whichever book you start from and as you build up knowledge you will figure out the nuances and internalize "best practices". It really is that simple.
Here are some books to get you started;
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
Read and do the problems. You'll understand everything taught in CS courses up to senior year, minus version control.
Following up on this since it's a common problem for CS majors especially, I would recommend picking up a copy of the K&R used or otherwise and going through at least the first ½ or ⅔ and trying your hand at the exercises.
If you get through the majority of the book you'll be more than prepared for what 327 will throw at you C-wise.
For C++, Sheaffer does a good job of covering the C++ism's that he expects you to use -- he doesn't like C++ either.
Indeed, it's good to see I'm not the only one who strongly dislikes this website...
> Strings in C are the collection of characters. Strings are also known as an "Array of Characters".
&#x200B;
That is utter nonsense! Quoting the C standard, you can see why:
C11/7.1.1p1:
> A string is a contiguous sequence of characters terminated by and including the first null character. The term multibyte string is sometimes used instead to emphasize special processing given to multibyte characters contained in the string or to avoid confusion with a wide string. A pointer to a string is a pointer to its initial (lowest addressed) character. The length of a string is the number of bytes preceding the null character and the value of a string is the sequence of the values of the contained characters, in order.
&#x200B;
There are multiple contradictions in the implication your website creates. Let us look at them in order specified above:
&#x200B;
C11/7.1.1p1:
>A string is a contiguous sequence of characters terminated by and including the first null character.
&#x200B;
Where in your definition have you mentioned the terminating null character? Note that this implies a string doesn't necessarily span the entirety of the array and a string doesn't necessarily reside within an array at all.
C11/7.1.1p1:
>A pointer to a string is a pointer to its initial (lowest addressed) character.
&#x200B;
If we interpret your website literally, then a pointer to a string is a pointer to an array of characters. The declaration of a pointer to an array of
n
characters namedunusual_string_pointer
looks like this:char (unusual_string_pointer)[n];
&#x200B;
This is unusual because it's very unlike the argument type accepted by our standard string functions. In addition to the implications I've mentioned earlier, from this most recent quote from the standard we can tell a string might begin mid-way through an array.
>The length of a string is the number of bytes preceding the null character and the value of a string is the sequence of the values of the contained characters, in order.
It's extremely common for newcomers to categorically confuse the concepts of strings and arrays, such that they believe
strlen(string_in_array)
would besizeof string_in_array - 1
. That is not necessarily the case, as this quote shows, yet your website does nothing* to guide beginners past this common hurdle.Moving on to some other quotes within your page here...
>Strings in C is a one-dimensional array.
It is trivial to construct a string that isn't stored within an array. With the caveat that the only safe string (that I can think of) to do this with is an empty string, and that you'll probably want to use the
&amp;
address-of operator to do this, I'll leave this to you as an exercise. The key take-home point here is strings are (typically) stored in arrays, but aren't the arrays. You could say that prime numbers are (typically) stored inint
, but that's not necessarily always the case.>Strings in C are ended by the "NULL ('\0') character.
>Strings are written in double quotes ("Programming") while the character is written inside a single quote ('A').
I wonder why you would assume the position of a teacher whilst confusing string literals for strings like this. Tell me, why isn't
"Programming"
ended by the "NULL ('\0') character in this text? To me it seems like you have two definitions merged into one, and they're contradicting each other.I would also like to add that one example of a string (using the formal definition from 7.1.1p1 above) can be written using a character literal like so:
'\0'
(this is a hint for your exercise). A pointer to that string (also complying with the definition) can be written, without a declaration... and the length of that string (see 7.1.1p1 for this definition) can be written... all without declaring a single variable.C11/footnode 78:
>A string literal need not be a string (see 7.1.1), because a null character may be embedded in it by a \0 escape sequence.
As you can see from footnote 78, an attempt to place a
\0
terminating character into a string literal is likely to cause a string literal that isn't a string. Furthermore, if we use string literals as initialisers for arrays that aren't large enough to store the terminating byte, the string literal won't be treated like a string, for example:char fubar[5] = "fubar"; // not a string
.Further common confusions appear in reality with our students, such that newcomers tend to think an array of characters is automatically a string and thus automatically contains a terminating null character... more utter nonsense which your website does nothing to quench... and to be clear on this, I expect more from an educator and was shocked to find you work at a university, teaching programming! This was the point at which I decided to start reporting you for misleading people (and plagiarism). You need to go back to university, as a student, and study C properly (without cheating on your exams).
To be clear on this, if you're going to use the writings of other people (like myself), you need to properly cite those writings. We've been down this road before; I threatened you with DMCA takedown, remember? Frankly, you disgust me. Our educators should know better... to think I am unemployed on a disability pension while you are employed in my dream position. You disgust me!
Even despite earlier making the erroneous statement that Strings are also known as an "Array of Characters", you go on to say...
> In C programming, strings are not used as a data type (like char, float, double, int etc.).
Don't you realise "Array of Characters" is a data type? You have mixed this last small ounce of truth that this page contains in gallons of utter rubbish, as demonstrated by the very next statement you make:
> Strings are declared like an array if you do not know what the arrays are? Then, first, you should read the arrays.
You're a hypocrite. If you don't know what constitutes C, then, prior to assuming the role of an I.T. professors assistant, you should read a book about C (and do the exercises, as you would expect of your students).
I'm not going to bother correcting all of your errors. It'd be less wasteful of my time to simply write my own textbook, and to be clear on that matter, there's nothing wrong with K&R2E. Your website exists without a purpose, and lies to people. What you should do, to be honest to your students and to the founding forefathers of the language, is redirect your entire domain to the Amazon page for K&R2E. Make an affiliate link, if you like, so that you get commissions on the sales... at least this way your students will learn the actual programming language, as opposed to your retarded imagination of it.
Since you already have a decent knowledge of Javascript, this would probably be a good book to start with: Dive Into Python 3.
As for C K&R2. The main issues you are going to have with C are memory management and undefined behavior. Sadly K&R isn't going to teach you much about that, so you will need to look for other resources online dealing with those two things. Also getting help on IRC more than likely will involve a tongue lashing.
My advice for Linux, Git and Vim, just start using them. If you don't have a computer with Linux on it, install it and use it everyday. With your projects use git to keep track of the changes you make. Add a feature? Make a git commit for it. Github has some good learning resources for it and there is also the book Pro Git which goes in depth. For vim start off with vimtutor in the terminal and keep a cheat sheet of shortcuts. After you get semi-comfortable, you may want to read Practical Vim by Drew Neil.
Personal hobby, 7 years deep. I haven't taken a single class that has taught me a single point from that post.
I study computer engineering (with a predominantly math/microcontrollers/electrical engineering focus) in school. I founded a LUG on-campus to promote this stuff, since it's severely underrepresented in my institution.
I linked to it already, but read The Linux Programming Interface. A prerequisite might be K&R since the book is C-heavy. Buy those books, pick a distro (Arch Linux is my forte, since it has the best wiki in the Linux world), and get crackin'.
yo estoy sufriendo con las tareas. Las sacan de este libro.
No creo que nosotros nos metamos mucho en lo que son las estructuras pero los apuntadores si los necesitamos para configurar un chip.
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1486052948&amp;sr=1-1&amp;keywords=C+programming
Seeing as you are working on an Android app, you presumably know Java. C# is really similar. Objective C is for iOS development. I'd recommend C++ or just plain C. This is a good book. Python is also awesome though and pretty straightforward... So C or Python
This is your new bible:
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
&#x200B;
&#x200B;
I haven't read it in years, but I remember The C Programming Language being very useful.
If you want to learn more about the low level details of how computers work in general, I own the following books and recommend them:
---
Computer Systems: A Programmers Perspective
Computer Organization and Embedded Systems
Hacking: The Art of Exploitation
Operating System Concepts Essentials
Computer Networking: A Top-Down Approach
I've been doing this a long time! You'll get to the point where choosing data types and using loops are very simple for you, just takes practice and thinking about why things work.
In terms of a book, my favorite is K&R's C book. It's an oldie but goodie, and starts with the basics which sets you up for success when you want to get into the more complicated stuff.
C++ books will in general not be focused on robotics or embedded programming, but Arduino/robotics books will often be more focused specific solutions than on programming theory, so it is difficult for me to make a recommendation there. Don't be afraid to google questions or topics as well. For general programming topics, somebody has probably asked your exact question at StackExchange.
No need on the gold, friend. Just helping out people with topics that I'm passionate about.
Edit: The bot that replied me to made me realize that book is kind of pricey. If that's too much, there's nothing in it that you can't learn online!
http://www.amazon.com/The-Programming-Language-2nd-Edition/dp/0131103628
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
get yourself a copy of this, and read it cover to cover. This is the C bible as far as you're concerned.
This is our SO before we invented the Internet
The C Programming Language (2nd Edition)
Τσελικη & Τσελίκα ?
Πολύ καλό ελληνικό βιβλίο.
Στο προτεινω ανεπιφύλακτα.
Αυτό είναι ένα κλασσικό αγγλικό πάντως
https://www.amazon.co.uk/dp/0131103628/
There's a ton of instructional videos on Coursera, YouTube, etc. As I learned C++ many years ago, I can't really recommend a specific course. But find one that works for you.
&#x200B;
I strongly recommend you learn the C [not C++] programming language first. It's super simple, and you won't get bogged down by all the bells and whistles which complicate C++. Plus, most of the complicate C++ language features won't be used in a data structures course.
The C Programming Language, K&R
The book is about C, not C++. However, the C programming language is incredibly simple, and you'll learn the core concepts without all complexity of C++. This book is a quick read [185 pages, not including the reference section]. As you're coming from Python you'll need to understand types, memory allocation, pointers, and headers.
The Google C++ Style Guide
Google's C++ style guide is battle tested. It offers than mere style recommendations, but also many lessons in avoiding pitfalls in C++ code.
Effective Modern C++, Scott Meyers
Read this book 5 years ago. Can't recommend it enough. It covers more advanced features and pitfalls. So you can read it after you have a basic grasp.
C++ Reference
Incredibly dense technical reading, but the more you read the easier it becomes.
I took that class at UCF years ago, and honestly it was horribly taught. Hopefully the current batch of instructors are better. Fortunately you can still do pretty well with a copy of K&R and a free GCC compiler (I recommend Cygwin if you're on Windows).
C is not the easiest programming language...far from it. But it's the most fundamental by a wide margin, and worth learning for understanding, even though comparatively few jobs will actually use it for day-to-day development. (Few, not none...hold your flames :-)
Did you know Amazon will donate a portion of every purchase if you shop by going to smile.amazon.com instead? Over $50,000,000 has been raised for charity - all you need to do is change the URL!
Here are your smile-ified links:
K&R
---
Never forget to smile again | ^^i'm ^^a ^^friendly&nbsp;bot
Encapsulation is really a mechanism in Object-Oriented languages, of which c is not a member. C++ is object-oriented and has encapsulation, and C++ can be compiled to run on AVRs because C and C++ both compile to assembly.
OP: read this if you really want to learn about C. It's an incredible language that has stood the test of time. It's absolutely necessary with Arduino/AVR projects.
Edit: linkify
Use this, aka "K&R C". I'm not sure if I can post a direct link, but if you google for "K&R C" you'll find a PDF so you don't have to spend £30 and find out you hate C.
It's a great and classic book, an completely relevant.
Also, if you want to make your own OS, skip C and try doing it in assembly and on a raspberry PI. You'll learn a lot, and learning assembly will help you out when you start to learn C. My programming education started with making an OS on ARM using assembly, so I can't see why yours can't :P
I would suggest that the carlh programming guides is not a bad idea then!
I would heavily suggest learning C well - this is a language that was designed to stay close to the hardware while being portable, and is a very small language. So, buy a copy of the K&R Book, ever C programmer has one.
Then, Patterson's book is a tome for computer engineering. It'll show you assembly, all the way down to NAND gates.
I would suggest you start by watching and working through Berkeley's CS61C course. It's the logically second course in CS, and after a quick overview of C it dives into the machine itself. Website here, videos here. Also, Dan Garcia is an excellent lecturer.
Once you have all the machine details down, you'll probably feel hampered by your actual program wizardry. This is where you start looking into algorithms and data structures. Your go-to guide here is probably Cormen's Introduction to Algorithms since it handles both data structures and algorithms. It's definitely more of a theoretical/CS-ey book, so if this is not what you want, then Head First Java will teach you a new language (and learning more languages is one of the best ways to grow as a programmer!) and also do many data structures. In fact, you can get both those books and have the light side and the serious side of programming books.
At this point you should be well equipped to go off in whatever direction you want with programming. Start contributing to open source projects! Find things that interest you and try to solve problems! Being a part of the programming community will be your biggest aid in both learning programming and starting to make money through it. People pay for programmers that they know can deliver, and success in the open source world means a lot, and you don't need to go to school for it to get to this point!
Lastly, many CS/programming folks hang out on IRC. If you have questions, find the appropriate IRCS channels and go talk to people. Good luck and welcome to programming!
C in this modern world has become the standard for one step above assembly language. I was once told by an embedded devices professor, "Generally the next step after developer a completely new microprocessor is to write a C compiler for it."
This language was written by Kernighan and Ritchie way back before I was born, and thus the number 1 way to learn C is to read their book The C Programming Language
Many developers have respect for individuals who know C. It allows you to see into your computer with more depth, as K&R stated simply, "We built this language for writing operating systems".
Learning C# is a good way to get into programming, as is Python, and so many other languages. Just remember your roots. "Can't know where you're going unless you know where you're from." As they say.
I was a physics major with a deep seated hatred for programming until forced into doing it for my undergrad research. Started in C with Kernighan and Ritchie's C Programming Language (The guys who invented C) http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628 and work from there. Starts from a low enough level where later, when you move onto higher languages like Python or Matlab you'll understand some of the underlying algorithms and work.
This book. Its pretty much the standard C book written by the language's developers. You'll need it later anyway.
I bought The C Programming Language book in 1999 and have not found a better book for learning C. This may be due to the fact that one of the authors was also the creator of the C language. I highly recommend it.
You can also find a guide to functions at the links below:
Try The C Programming Language or The C++ Programming Language then. Those should cover the guts of C and C++ that he'll need. The C Programming Language, commonly called K&R due to the authors' names, is probably the best reference guide out there for C. To give you an idea, when I took the class that covered C in my undergrad years, I used my mom's copy of the book from when she was in undergrad. It's still used to this day.
Still a C noob, but I originally started it by studying The C Programming Language. http://www.amazon.com/The-Programming-Language-Brian-Kernighan/dp/0131103628
Is this a bad place to start? I thought since it was well approved of historically it would be a good base. Thoughts?
I think your plan is just fine. You may be distracted by the large amounts of choices you find along your way -- this thread is clear proof of that. Stay focused.
If you intend on starting with C I suggest a reading list kinda like this.
And then begin Java study. The first two may be a bit heavy at times... Work your way through and do your best, but don't except to get everything.
You could start with Java. There's a fine community and great resources. I say go for the C -> Java route and get a taste of some low level fundamentals.
There is a lot of good stuff already posted, but I'll chime in. Formal education doesn't mean much if you can become a capable programmer on your own. A good interviewer will recognize your ability to produce quality work, period. However, If you are truly serious about becoming a developer you will need to educate yourself and it won't all be fun. If you can buckle down and teach yourself what you would have otherwise learned in college, there is no reason that you'll be less skilled that a college educated programmer. Some employers may view you as less qualified but you can prove them wrong during an interview.
I would suggest a bottom-up approach:
First, learn some of the Comp Sci. nitty gritty. Get familiar with data structures (Heap, Stack), and understand how computers use memory at the most basic level. A lot of this will be painful at first, but it's necessarily to fully grasp what and why we do certain things when programming.
Second, Learn C. The K&R (http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628) is going to be the best way to to this. The reason C is great to start with is because it runs on nearly all hardware out there, and it will teach you very important concepts, such as pointers, that will mitigate confusion as you move forward. Also, without learning about memory in the previous step, pointers will be difficult to fully grasp.
Third, Learn another language, and another. The funny thing about programmers is that we are essentially linguists. The main difference is that we speak to computers rather than people. With this in mind, it's important to learn multiple languages, rather than attempting to master one. Pick a language that helps you solve the problems you want to solve. Wanna make iOS/OSX apps? Dive into Objective C. Open Source guy? Learn Java. The more you learn, the easier it gets since most languages share similar syntax, keywords, etc. This is why learning C first was a good plan, because lots of other languages borrow heavily from C.
Finally, write code every day. Writing code, compiling it, debugging it, compiling it again, and then watching it run properly is the ONLY way to truly learn. Keep reference books close at hand, and push your comfort level by writing programs that do more and more sophisticated operations. Don't try to memorize everything about a language, and don't get discouraged if you need to re-read sections of a book. It's a fools errand to try and memorize everything about a language, and even decades-long programmers keep reference books on their desks.
I've been going through this one
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1289594838&amp;sr=1-1
I'm not extremely worried about the actual language I'm learning at this point, I've read through a few python books, but I like the fact that C is such a low level language, I figure it'll help out in the long run, especially since most of these languages (C++,Java,C#) are based off C in the first place.
I learned C through a class, not a website, so unfortunately I don't know of any specific good ones from experience (at UVic, our first programming class is in C. I already knew how to code in other languages, although for about 90% of people there it was their first coding experience). Some quick Googling shows a lot of sites are unfortunately not great for bare beginners (even though some of them try to be).
This one seems okay: http://aelinik.free.fr/c/
There's also this one, but it seems to jump in a little too quickly, so it's maybe a little better-suited to people who already know another language (unless you're good at learning that way): http://www.cprogramming.com/tutorial/c-tutorial.html
But actually, the best tutorial I know of is in a book rather than online: The C Programming Language (Dennis Ritchie, one of the authors, is actually the guy who created C in the first place). Even if you do want to do an online tutorial it could still be a useful resource to have. Yes it's a little expensive (unless you're fine with a pdf copy you "found" somewhere, wink wink nudge nudge), but if you become a serious C programmer then you might want to have a copy anyway - a lot of C programmers will have this book next to them as they code because it's a great reference resource.
If you want to learn C, you start with this book. If you want to learn Python, you should start with this e-book.
The book I used in college.
The C Programming Language https://www.amazon.com/dp/0131103628/ref=cm_sw_r_cp_awd_cVUywbF5RQDKC
I suggest that you start reading The C programming language to have a clear knowledge
Harvards CS50 program and learning basic C was the best thing I did when I started, at least in terms of understanding how computing works. It's hard-going, but having a firm foundation in the fundamentals of how computing works makes everything else down the road so much easier.
C# is a way less complex language than C. It's more strait forward to debug. Also it's object oriented. If you think you know C you'll be cranking out C# in a few hours. Also C# also requires you to be less anal about memory.
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
https://www.amazon.com/21st-Century-Tips-New-School/dp/1449327141
K&R C on Amazon (or there are PDFs everywhere):
http://www.amazon.com/C-Programming-Language-2nd-Edition/dp/0131103628
Ohio State University's honors engineering intro series uses the Handyboard programmed in Interactive C.
Sample code is largely going to be dependent on the circuits you've actually connected; what your motor configuration is, etc.
You'll probably have more success looking for broader resources on robotics. Interactive C itself is very similar to ANSI C, except that it has some weird libraries most people wouldn't be useful. If you're having trouble with the language itself, pick up a book on C, or programming in general. K&R C can be kind of rough, and there are down-right factual inaccuracies in many editions, but it might give you a jumping off point.
Beyond that, you may want some books on robotics. I don't have any recommendations, but have you tried asking your professors? Ask the grad students TAing your class too! Students often ignore these resources, but you shouldn't trust some random guys on the internet over trained professionals with every interest in your success.
If you want a C book to use as a reference/refresher, the classic C book is The C Programming Language a.k.a K&R.
Get a used or new copy of the Kernigan and Ritchie book.
For books, there is only one place to start: The C Programming Language by Kernighan and Ritchie.
Will knowing C# make learning C easier? Possibly, but it may also make it difficult, like trying to unlearn a bad habit. C is much less forgiving of errors, and it doesn't hide the von neumann architecture underneath like C# does.
Sure.
Harvard and MIT are releasing courses for free, with certification.
https://www.edx.org
Standford has created a similar program.
https://www.coursera.org
Udacity also came from Stanford. Sebastian Thrun, head of research at google, has started offering courses for free, with certificates. I took their intro course, and am taking Steve Blank's entrepreneurship course at the moment.
http://www.udacity.com
Codecademy has free coding lessons.
http://www.codecademy.com
Follow + search Hacker News, and you'll find answers on how to get started.
http://news.ycombinator.com
I began by following The C Programming Language, by Kernighan and Ritchie. One of the best tutorials I've ever used (though tough at first). http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
None of this is easy. But it's all easy compared to getting into and graduating from an Ivy League law school.
Meanwhile, Ramit Sethi has excellent tips for how to make money on the side, or to get a raise at your current job (or a better job). http://www.iwillteachyoutoberich.com/home/
The Four Hour Workweek does the same:
http://www.amazon.com/The-4-Hour-Workweek-Anywhere-Expanded/dp/0307465357
Those last two sound super-scammy, but trust me, they're full of really good, actionable advice.
Again, the underlying idea here is that if you're competent enough to get into an Ivy League Law School, it's easy enough to figure out alternative ways to make more money.
I use matlab on a daily basis, and something which has saved my bacon more times than I can count is a standard header at the top of each of your script files (i.e., the *.m files). This header will tell you, down the road when you couldn't possibly remember, what your script does, what the input and output variables are, when you did it, the course and (a carryover from when I needed to hand in code for course assignments), my name/student it.
From a more general perspective, if you have no programming experience, a book on C programming ("The C Programming Language" or wikibooks if you're short on cash (I'm sure other people here have their own favourite programming reference books) will give you an introduction to variables, functions, and in general how you break down a multi-step, complicated problem into series of smaller problems which you can code up. I'm biased in favor of C, given that it was my first language, but another language (fortran, for instance) might not be a bad choice, either.
Once you get a handle on this problem-solving approach to coding, learning a new language will come much faster; it becomes less "How do I solve this given problem?" and more "What is the syntax in this given language for a 'for' loop" or "Where do I need to declare variables?".
Nice price on the link you posted. On Amazon, a new copy is currently $52.76. Pretty nuts!
get this book dawgy
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
i would focus on one language at a time. a real world scenario - imagine trying to learn japanese and chinese at the same time if you never studying languages before.... you'd be in a for a world of hurt. can it be done? sure, it's just a lot harder and will take more time.
if you're not sure about C or scheme, try watching the first lectures on mit sicps on youtube. If you like it, continue with scheme. Scheme will make learning javascript a cinch. If you want to develop games, I would go with C.
if you're learning C, you should be reading this book - http://www.amazon.com/The-Programming-Language-2nd-Edition/dp/0131103628. Makre sure to complete ALL the exercises before moving ahead to next section. I use to think exercises were a waste of time but they are extremely important! You can learn the rules of Chess in a day. Does that mean I know how to really play the game? The exercises will train you to apply what you've learned so you can actually create real working programs.
Or you can just start with C++ instead of C.
Then I would read Code Complete 2nd edition and Effective C++.
Get a copy of K&R, start on page one, work as slowly as you need to, do most of the exercises.
Start with C. Start with this book: https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
Come back and ask me your next question once you have typed out each of the problem sets in that book.
Why? Look in the link
blog
and to learn C, the greatest book is one and only
amazon link
This book will teach you everything about C. and the examples includes some of the functions of standard library so you'll also know how functions of standard library are/can be implemented
I did IOS for my first course (non-CS engineering undergrad, mostly Python and JavaScript programming, limited C). I worked through the bulk of The C Programming Language (https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628) before taking the course and, on that basis, it was manageable. Hard, but manageable. I also learned a tonne and enjoyed it a lot, though the second project nearly killed me.
I think IOS is a great introduction to the program, iff you can get through some C programming beforehand...
Why? The still sell it at Amazon for a reasonable price. That's where I bought my copy a few years back.
It really depends on what you want to do, if your focus is more on web development, then javascript is probably a good next choice for you. However...
If you want to get into more low-level engineering, C is a great tool for that. I learned C a long time ago and it was painful most of the way so expect that. One of the books that gets tossed around a lot is K&R C which I haven't used personally, but I've heard a lot of recommendations for.
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
As far as what you want to get started, I'd say a linux box (or virtual machine), gcc, and a good text editor. My personal favorite is emacs.
I can't tell you much about R, but C is very sensible to learn at least a little. It's basically what everything comes from nowadays, (hell, Python itself is written in C), and will get you to be very intimate with your computer... But there are a lot of bad ways to learn it. If you start, definitely use this book.
Do you have any experience with the C programming language? That's where you start. I think the differences between C and Arduino's version of C++ are irrelevant for the beginning programmer.
I was lucky; I learned C back in the 80's from the K&R Bible. It's more reference than tutorial, but a great book to get started with.
Once you have the basics down, then the best way to learn is to take apart some interesting code. Want to know how arrays work? There's dozens of code segments using them, for driving LED matrices, storing sensor inputs, etc.
Do you guys own this book?
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
A few hours practicing with it will have you up to par with C in no time.
The book in the first link in my previous comment (The C Programming Language) is widely regarded as the best introduction to C programming. I would recommend doing the exercises because, well, reading about programming doesn't really help as much as actually programming.
However, I would check if there are courses on C at your school first (not C++) because learning C on your own could be hard.
Once you've learned C - this course at my school follows the second textbook that I linked to, and it's a very thorough introduction to a lot of systems concepts. What I really love about the course website is that it has links to all previous exams (and their solutions) for the past ten years, so you have all the practice problems you could possibly want. The course has 6 labs, and if you're interested in doing them I could send you the starter code.
I've been thinking about C and its practical implementation after
learning the basics. And to organize the information I tried making
a skill tree as you would find in the game Skyrim or Kerbal Space Program,
where you complete tasks to get points to advance in the skill tree. I hope
the low quality of the image provides enough context that this is not a complete
work and something I'm poking around with, feel free to suggest nodes or resources
for anyone the nodes as the rest of this post will be me trying to provide
some context and resources for each node.
Basic C
It's right there in the sidebar for anyone to get started.
C Programming Language
Pretty much go through this first, generally suggest using a minimal
text editor and the command line to compile programs.
Intermediate C
This has been marked as optional, as a general stepping stone for
using a few more materials to learn or reference before jumping into
any projects. Books like Modern C, practice books, or understanding
pointers could go here. Let me know if you have any suggestions for
books, youtube, websites.
Sockets
Sockets is marked as optional to separate the group. But in general this section
resolves around the concepts of tcp and udb and sending signals between computers.
Example projects for this group are things like making a basic http server
on the http side, or programming with bluez on the bluetooth side. I threw in game server on the end as there are several open source projects that create the back end for games that don't have online services any more. This seems like a good way to get familiar with a specific set of structs and packets, maybe someone can leave some examples if there are anyones that are a good place to get started.
GPIO
General Purpose Input/Output, such as turning an LED light on or off. I haven't gotten into gpio myself very much, and most of the tutorials for it
seem to use python. But this seems like a pretty good use-case for a practical
implementation with C. I could provide some results from a search, but I only want to provide links to tutorials I can vouch for.
GUI (Gtk)
For making user applications with C, GTK seems to be the most common library for
implementing applications with widgets. The best resource for this pdf seems to be
An Introduction to C & GUI Programming, and
there are a few more examples posted in the gtk discorse.
Graphics
This is the node with the most sub-nodes and not the easiest node to organize as
there are a lot of libraries that can be used. For libraries there is GLUT/GLFW/SDL/GTK+/Raylib/EGL. In general GLUT and GLEW seem to have the least features with them being mostly focuses on getting and window and providing OpenGL context. Freeglut provides a decent wiki for getting started, and while the examples are in C++ it's not too bad to translate them back into C. GLFW seems to be the libary that the OpenGL Red Book currently uses.
SDL is a really common and popular library that's been used for a lot of games,
including Open Tyrian. While it's popular, the only strictly C resource I've found for it so far is this blog , which provides a 2D Shoot 'em Up tutorial. Though the most well known tutorials are written by Lazyfoo, and are provided in C++, while these tutorials have probably been ported to other languages I don't know of any C-only examples out there.
The GTK+ library provides the GTKGLArea widget which allows for an OpenGL 3.0 and above context to be created. So it might be a decent choice to work with if you want to create applications that allow for toggles and widgets, along with a 3d view port. A few example applications for GTK can be found here.
For Raylib I haven't tried it, it often gets suggested here and on forums pretty fequently. So maybe someone can provides links, and maybe provide some context of some comparison between Raylib and some of these other libraries. EGL is an option that I've seen pop up here and there, but it looks like it allows you to write directly to the framebuffer for embedded computers without needing to start a desktop. There's a really good series of tutorials that can be found here.
Summary
So this is what I have for resources that I've found so far that fit into the skill tree. I think there are a few more honorable mentions like libpng, or file compression, or POSIX coding and terminal games and applications. And are there any other nodes that you would add to the skill tree?
The C Programming Language. Get it used on Amazon.
Here ya go. K and r for the authors' last initials. http://www.amazon.com/gp/aw/d/0131103628?pc_redir=1408940727&amp;robot_redir=1
This could probably explain it better than I could:
http://www.cprogramming.com/declare_vs_define.html
I work full time, so I can't afford to answer your questions except on my own schedule, sorry. I highly recommend you read The C Programming Language, it's very approachable for beginners.
can't go wrong with K&R C to learn the low level stuff (pointers) first, then The C++ Programming Language to learn the rest
Get the book: intro to c
Seriously. Do it.
However all the main IDEs are good, those are Eclipse, Netbeans and IntelliJ (as far as I am aware). At university you will probably be learning with Eclipse, BlueJ (which I have never used, but is supposed to be educational) or maybe even notepad. If they give you a choice I'd use Eclipse to learn with since it is used by a lot of companies and open source projects.
==
operator. The==
operator in Java compares memory address and not content of the strings, a quick google search turns up this blog post with some details on Strings in Java. Basically you should usestring1.equals(string2)
when comparing strings in Java.I taught myself it following various tutorials online but the books teach you better practices than those most of the time and are more in depth. Java a Beginners Guide seems highly rated on Amazon and has been kept up to date. When I was at university I saw a few copies of Thinking in Java around but it's a tad out of date now, Head First Java might also be worth a look.
The videos I used to learn Java were a combination of thenewboston videos (these don't encourage good practices but show a basic way of getting started) and some Java games programming related videos by thecodinguniverse.
Once you have the basics of Java down, might I also suggest completing the challenges on /r/dailyprogrammer to help get you more comfortable with it.
I suggest that Oracle's tutorials together with this book is good starting point
http://www.amazon.com/Thinking-Java-Edition-Bruce-Eckel/dp/0131872486
Also check out this video tutorials: https://www.youtube.com/playlist?list=PLE7E8B7F4856C9B19
Not the op
If you are also new to OO programming in general, I would get these books and work on the examples. They will provide you with an excellent foundation for programming in Java.
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1251928378&amp;sr=8-1
http://www.amazon.com/Thinking-Java-4th-Bruce-Eckel/dp/0131872486/ref=pd_sim_b_54
http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1251928591&amp;sr=1-1
i agree. books and tinkering are the very best way to get introduced to programming.
i read my first programming book the summer between my sophomore and junior years in high school. (i don't recall how old that made me at the time. 16? bah, i'm getting old.) anyway, that book was Herbert Schildt's The Complete Reference: C++. i found it really interesting, but knowing what i know now Python (The Quick Python Book and Learning Python are good) or Java (I learned on Thinking in Java, but Effective Java is supposed to be good, too) are probably better places to start.
hopefully your parents support your desire to learn programming. $30-$50 for a programming book and access to a computer are a small price to pay for starting a child on a hobby that could turn into a good career!
good luck, and keep us posted! :)
First, I would say don't focus too much (at first) on whether you are coding in OO, but whether or not you are building or structuring your application for readability, scalability, and maintainability. Do you have code that repeats in multiple places? Do you have functions that are too long? Learned to detect code smell and refactor them properly. Once you are developing good programming practice, then start learning what OO and design patterns are all about - and how they will help you design your applications even better.
Laravel is a framework built using OO principles and good design patterns. Because it is a framework providing all the scaffolding, you can quickly build good and maintainable applications without a lot of design and forethought. However, when you are creating a new model or a new controller, you are creating a class. For example, when you create a new Laravel controller extending the base Controller class, you are doing OOP. Of course, that doesn't mean you understand what OO is.
PHP was never designed with OO from the ground up. It was an afterthought and honestly not a very good one. It doesn't force you to think and write in OO. For example, a lot of the base functions and methods are not OO. If you want to understand OOP, I suggest you start with a high-level book and then move on to a true OO programming language that forces you to write and think in OO and nothing else. I am not saying you should abandon PHP/Laravel and switch to a new language, but learn OO with a OO programming language. Once you understand OO, then come back to PHP/Laravel and then you can appreciate what the language provides and what it doesn't in terms of OO.
I highly suggest you read this high-level book first. It is a quick read and you can get an older version for like 25 cents in paperback. It does a really good job explaining what OO is to people who aren't even programmers: https://www.amazon.com/Object-Oriented-Technology-Managers-Taylor-1991-11-06-dp-B01F9FU6OK/dp/B01F9FU6OK/ref=mt_mass_market_paperback?_encoding=UTF8&me=&qid=
Then move on to a OO language like Java or C#. Don't use C, C++, Python, Javascript, or Ruby for this because again, they don't force you to write in OO. The latter ones allow you to write non-OO code, so it won't be as effective trying to learn OO with them. I recommend Java because it is built in OO from the ground up. There are tons of resources, tutorials, books, and videos.
I highly recommend this book to learn both OO and Java. It is an oldie but goodie. I even attended one of the author's design camp a while back: https://www.amazon.com/Thinking-Java-4th-Bruce-Eckel/dp/0131872486. I am sure there are other great books and resources but I haven't picked up a Java book in a long while.
Good luck and feel free to reach out if you have more questions,
Ben
I suggest that Oracle's tutorials together with this book is good starting point
http://www.amazon.com/Thinking-Java-Edition-Bruce-Eckel/dp/0131872486
Also check out this video tutorials: https://www.youtube.com/playlist?list=PLE7E8B7F4856C9B19
ok so at school we worked with Big Java . Good book for beginners but it doesn't seem as comprehensive. Thinking in Java is the best book in my opinion, it is covers an insane amount of topics, but it is more of a challenge in case you have a short attention span (it tends to be more serious than the others, rendering it more boring in return).
Now in case you want something more playful Head First Java is a fun one, it uses pictures , and jokes and uses day to day examples in order to make things stick better to your brain. In case you find that kind of stuff better, than it is recommended, but it does cover less than both of the predecessors.
For later inquires, you can check out the books on this list
Thinking in Java is an excellent resource.
The short answer:
Try this book
Oracle's Java site is a pretty good resource too.
Now the long answer, you probably do not want to hear:
The amount of time and effort you will invest in your education will probably reflect on the level of professional you will become. Learning a programming language is just a small part of the knowledge you need to acquire to become a good software developer. Just like learning to operate a video camera will not make you a successful filmmaker.
Although school is not the only way to become a programmer, it forces you to visit a vast pool of concepts including design, testing, analysis, algorithms, data structures, memory management, concurrency and many more. This exploratory process forces you to take a peek on many areas of software development that you will likely never visit otherwise; this is an important exercise not only to be successful at this trade, but it will also help you discover new areas of interest.
If time is not on your side, at least try to emulate a college curriculum when doing your online self training. Do not stop at learning the language, dig much deeper.
I learned Java when it first came out, and I had a good background in C++. Back then, there weren't a lot of tutorials on the web, but there were books, and most of them were oriented to C++ programmers. You might want to look at Thinking in Java.
Is it this one?
&#x200B;
Thinking in Java by Bruce Eckel on Amazon.
Different people have different learning styles.
I used this one: http://www.amazon.ca/Fundamentals-Analysis-Applications-Engineering-Mathematics/dp/0139078746
That's probably enough Calc to get started with it, but you haven't had a proof-oriented course yet so the way the material is approached, the progression, and the style of problems you'll have to solve may be a little foreign to you.
Reviews on Amazon point to this book as a good introduction, but it doesn't get to analytic continuation. You'll need to be familiar with the techniques taught in an analysis course before diving into a deeper book.
It may be hard to find but The AWK programming language is good, but from late 1980s:
http://www.amazon.com/AWK-Programming-Language-Alfred-Aho/dp/020107981X/ref=sr_1_3/179-0702435-4816249?ie=UTF8&amp;qid=1457304935&amp;sr=8-3&amp;keywords=awk
If you're open to learning a little
awk
, it can handle this in a breeze with a one-liner:awk '/^\s*$/{next}{arr[$1]++}END{for (a in arr) print a, arr[a]}' test.log
Breaking it down:
/^\\s*$/{next}
means if the line is empty, ignore it{arr[$1]++}
means make an array that holds your counts. `$1` means the first fieldNR&gt;1{arr[$1]++}
END{for (a in arr) print a, arr[a]}
means at the end of processing, loop through the array you made and print the resultsawk is super powerful, and a lost art. This book is a great read if you can pick up a used one.
This is still the definitive work on the subject.
if you are going to be programming awk, you need to get the book on it from A, W and K. Once you get a grasp of how AWK processes files, I think you'll go clear from there.
One Book
MIT used to, not sure if they still do.
Scheme is a surprisingly good choice for CS101 precisely because it doesn't distract with lots of syntax or details of internal workings of the computer.
I'm going to go against the grain here with my recommendation. I'm a guy who was in a similar position years ago. I've since transitioned from web development to game programming and have working knowledge of 7+ languages.
Dude, don't sweat these feelings you're having. You're just at a wall. We all reach different kinds of walls in this career and they're really the best thing ever. It means you're about to jump ahead in skill by at least 10x. You just got to find the trigger for it. Be patient and try different things. Go check out Udacity and do some courses on there. Also this is the time to start reading books. Not just any cheap book you find. Good books that will give you the perspective of an industry professional. Books like JavaScript: The Good Parts, Code Complete, The Pragmatic Programmer, or The Little Schemer. Also it doesn't matter what language the books are in to enjoy it. 98% of all programming languages are the same anyways, which you'll soon learn. For the most part, they just have moderately different ways and syntax to do the same thing.
I would recommend not switching platforms from the web. One of the most important skills guys like us can have is seeing where technology is heading and betting on the right horse. It's very clear that webapps are going to be even more important in the future. You can already make desktop apps with web technology naively in pretty much all major OSs now.
I say learn JavaScript front and back. Read JavaScript: The Good Parts and JavaScript: The Definitive Guide cover to cover. Once you learn JavaScript it'll be very easy to transition to any C-based language, which is most of them. In fact I credit JavasScript for giving me the basics to jump to just about any language comfortably and pick it up in a few weeks.
After that, learn a good server side language like Java, Python, or C#. (C# is in very high demand, and has many applications) Or learn all three and you'll be very well positioned career wise. Well, make sure to get some experience with SQL too for good measure.
Also if you want to have a good challenge instead of being bored on those easy things, like drawing shapes, why don't you try Udacity's fine WebGL course? Jumping in the deep end isn't bad as long as you don't expect it to be easy.
If you are new to programming I can't recommend python enough. I was able to pick up the language in a couple of weeks in high school and now I use it every day at work.
If you are feeling a little more adventurous get the book The Little Schemer. The book kickstarted my love of computer science.
Yes, it is, and is listed here: https://www.ai-class.com/resources. Besides, Sebastian's style is similar to The Little Schemer(http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992): The author presented you with numerous examples, and you'll see the key concepts emerge.
right on, for lisp or scheme I recommend the little lisper or the little schemer
Some great books for learning Scheme are The Little Schemer and The Seasoned Schemer by Daniel P. Friedman.
I agree with the recommendations for SICP - it's great.
In addition to the MIT videos, there are videos from Brian Harvey's SICP class at UC Berkeley. They're available both on YouTube and in iTunes.
However, I'll admit that I found SICP a bit overwhelming at first. For context, I'd been programming (primarily Python) for a couple years, but it was my first exposure to Lisp. I ended up taking a brief break from it to work my way through The Little Schemer and The Seasoned Schemer. It only took a week or two and at the end I was much more comfortable diving into SICP.
Not everyone likes the Schemer books - they're quite distinctive - but I loved them. I found them particularly helpful in really groking recursion and continuations.
This is the example that helped me understand recursion.
def sumlist(xs=[]):
if xs == []:
return 0
else:
return xs[0] + sumlist(xs[1:])
This is a recursive summation function. There are better ways to do it, but this is the most readable. Basically, it will return
0
if the list is empty; otherwise, it adds the current headof the listxs[0]
to the value returned by the application of the function to the tail of the listxs[1:]
.x = sumlist([1, 2, 3]) # 0 - Initial call.
xs == []? nope # 1 - Check terminal condition.
1 + sumlist([2, 3]) # 1 - Add current head (1) to value of next call.
xs == []? nope # 2 - Check terminal condition.
2 + sumlist([3]) # 2 - Add current head (2) to value of next call.
xs == []? nope # 3 - Check terminal condition.
3 + sumlist([]) # 3 - Add current head (3) to value of next call.
xs == []? yes # 4 - Check terminal condition.
0 # 4 - Return 0.
3 + 0 # 3 - Higher frame: add 3 to 0.
3 # 3 - Return 3.
2 + 3 # 2 - Higher frame: add 2 to 3.
5 # 2 - Return 5.
1 + 5 # 1 - Higher frame: add 1 to 5.
6 # 1 - Return 6.
x = 6 # 0 - Assign the result of the recursion to x.
If you're interested in this, the book The Little Schemer is pretty good.
I would recommend "The Little Schemer".
Hello, this book will make you smarter, I promise
https://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992
Source: I program professionally for almost a decade now
This is really interesting. I just finished The Little Schemer recently, and I'm also new to Arduino, would be great if I fuck around with both.
Newbie question. Does this compile the Lisp program into machine code? I don't think I understand the way compiling works in Arduino.
read "The Little Schemer":
http://www.amazon.com/The-Little-Schemer-4th-Edition/dp/0262560992/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1341278967&amp;sr=1-1&amp;keywords=the+little+schemer
It'll turn your brain inside-out, and you'll learn more about recursion in this short book than I think you will in most other places
Anyone else notice the thinly veiled Little Schemer reference?
If you're on OS X, you should also check out Clozure, not that SBCL isn't a fine choice. But Clozure has a functional Objective-C bridge that let's you write native applications on OS X. Both have a vastly superior debugging environment running under SLIME in emacs. Chicken debugging is unfortunately not much fun in comparison. That aside, Chicken's egg repository is a treasure trove and it's trivial to install and use them. The same cannot be said for ASDF[-INSTALL]. Depending on what Lisp libraries you're trying to install, you can easily end up in a mire of abandoned software. And while Cliki makes it appear like there's a lot of choice, I find that choice somewhat misleading: there's often 13 different libraries to wade through but only one or two that are still being maintained, if you're lucky. It takes a lot of time to vet the dependencies. On the other hand, I've found the quality of Chicken eggs to be much higher on average. This is not meant in any way to disparage any of the Lisp libraries, it's just that so many of them are no longer being actively developed and since so much of what we write these days depends on evolving Internet standards, having stale libraries is a real impediment. Chicken is a labor of love and it shows. It's also embeddable in C which is just insanely useful if you ever were to need it.
There are significantly worse things in life than working your way through The Little Schemer or SICP. Stick with Scheme though if you're going to be doing either. While the exercises can be expressed in Lisp, they're no fun to write in Lisp for reasons that are beyond the scope of a reddit comment. Once you know either you can switch back and forth fairly easily, though porting code between them, not so much.
Try Little Schemer.
I just started reading Effective Java about 2 days ago and am already 1/3rd through it. Very good stuff even though I've been doing Java for a good 8 years or so. Depending on your level some of it might be over your head but you can skip a section and come back to it later. Knowing some good habits is better than knowing none! I also got the Java Puzzlers: Traps, Pitfalls, and Corner Cases book and man that's a tough book. It's very easy to read and understand but so far I haven't figured out any of the puzzles on my own although I'm only about 10 in. So far I can't imagine encountering any of these situations in the real world (or at least my office) but it's good to know and understand them because I'm sure at least one will eventually happen.
If you think you know Java, then read Effective Java.
Once you're through reading that, and you think that now you really know Java, read Java Concurrency in Practice.
There may be something more than these that's worth reading, but I haven't found it yet.
Buy this book: http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601 read chapters 1-5. Then read chapters 1-5 again.
Edit: it'll be the best $35 you'll ever spend on a Java book. When I interview people for position on my (Android dev) team, I specifically ask them concurrency questions. Knowing and understanding Java concurrency is an absolute must for professional Android development.
http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
> But it is still a lot more complicated that just letting the computer handle multithreading for you like you would in Java, C#, python
Not at all. Java Concurrency In Practice is 384 pages long for a reason. The way Node does concurrency is way simpler than using threads with manual synchronization.
https://www.amazon.com/Functional-Programming-Java-Harnessing-Expressions/dp/1937785467
https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
First book deals with Functional Programming in Java, which is another way of doing things compared to the Object-Oriented Paradigm.
Second book deals with Concurrency, which is a really important topic imo.
Java Concurrency In Practice
http://www.amazon.com/Trading-Systems-Development-Portfolio-Optimisation/dp/1905641796
and the elements of statistical learning in the sidebar
C++ for dummies
Java for dummies
http://www.amazon.ca/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601
I started programming in Java few months ago to develop Android applications. These are the resources I used:
All of these books except for the first are near 400 pages each. However, most of them do not require you to read all of it. It would be great to read them entirely, but you can still make do by reading the sections you need the most. A lot of the books listed as classics are books I found that a lot of universities use as I was browsing some curricula. This list focuses upon general programming as I believe mobile development and web development are just learning how to use frameworks which I consider trivial to learn generally since a lot of people say that if they work a place that uses framework X, their workplace gives them some time to brush up or get up-to-speed with the framework and how to use it over a few days unless you require a niche or complex solution to a problem.
If you are not a huge fan of books, searching these titles will probably provide online tutorials or videos. The Amazon links can provide great reviews and suggestions. I like the books even if they are a bit long because of their professionalism, review, and rigor associated with the publication process of these textbooks that inhibits the rise of bad habits which might be introduced by online sources.
I do not know your background with these topics, so you may already know the, but these are the resources I think which really helps people transition from just knowing syntax as "knowing a language" which they translate to "I'm proficient in X because I can write a program which allows you to save text to a file" to knowing a language regarding software engineering concepts which helps you work properly on projects medium to large projects you would find in a workplace as an intern maybe entry-level employee (but more formal education might be required).
However, I'm pretty much like a high school student (took a year off before starting college to recover from an illness), so take my advice with a lot of salt, but these books which I couldn't apply 100% helped me make a small-medium sized Android application: https://github.com/jparkie/Aizoban which was designed enough to allow me to manage refractoring to introduce new features or fix issues which I believe would have been impossible if I hacked my way through to write around 35,000 lines of code.
Highly recommend learning it right the first time by reading Java Concurrency in Practice.
In short, unless you spend all of your time writing boring, vanilla business logic, you will spend a lot of time with your fact in this book "Java Concurrency in practice" by Brian Goetz, which is a good book, but at some point you may wonder just what the hell you are doing with your life and if programming with thread has to be so complicated.
Pretty sure Rich already did this and we can learn from his journey.
If you want to program in Java, I would also suggest IntelliJ Idea. Community edition^[1] is free. Oracle docs are fine^[2], javadocs^[3] are great and the source is free for OpenJDK and if you want to go pro I highly recommend Effective Java^[4] by Joshua Bloch. There is also Findbugs^[5] which is cool for static analysis and most of the popular IDEs have plugins for it. You should also check Concurrency In Practice^[6] for multithreaded programming. If you are into web programming, I highly suggest Head First Servlets and JSP^[7]. There are also very good libraries such as Google Guava, Apache Commons etc.
This book https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601 is really helpful.
Do you have anything specific you want to improve on?
Here's a few that I liked that are specific to Java:
I can't help with MATLAB much, but with Java I'd recommend a couple things.
For books, The Java Programming Language, from the creators of Java is an excellent resource. Another book that is not specifically Java related that I recommend is The Pragmatic Programmer: From Journeyman to Master, as it is a great book on programming practices and good things to know. I've read or looked at a bunch of the books by the Pragmatic guys and they are all really good if you ever get into other languages as well.
In general though for all programming, the most practical way to learn is to start with simple problems that interest you, or maybe ones from sites like Project Euler and just learn by doing. There are lots of great tutorials online, and if you ever get stuck, Google and Stack Overflow are your friends.
Yes, you'll need the book. It is a great HTML/CSS book though. If you check the reviews on Amazon you'll see that it's highly regarded.
If you need to wait a few days for the book to arrive, you can order it soon and you should still have plenty of time to catch up in the class. It's not going to be too time-consuming.
I completely understand how you feel. I was in the same shoes. I picked up the following two books very recently & finished them cover to cover. I would strongly recommend them to you. Both books are very easy read & should not be a problem to finish them in weeks.
2 Bulletproof web design - Dan Cederholm - This is bit advanced & shows best practices in CSS. Again a very good read.
Finally, my own blog article on HTML & CSS authoring that I wrote a few days ago if you care to read.
If you want some really good textbooks, check these out:
http://www.amazon.com/Bulletproof-Web-Design-flexibility-protecting/dp/0321509021/ref=pd_bxgy_b_img_c
http://www.amazon.com/Handcrafted-CSS-Bulletproof-Edition-Essentials/dp/0321658531
http://www.amazon.com/Transcending-CSS-The-Fine-Design/dp/0321410971/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1333849421&amp;sr=1-1
Try C programming: A modern approach K&R is the classic, but it only covers up to the ANSI C (C89) standard.
You can't go wrong with these two books:
http://www.amazon.com/Java-Puzzlers-Traps-Pitfalls-Corner/dp/032133678X/
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683
Joshua Bloch is a good author and was involved in implementing the Java API (collections API, etc.) early on...
You can also find several talks he's done online for Java puzzlers.
Some good presentations online (including some puzzler ones):
https://www.youtube.com/results?search_query=joshua+bloch
The C Programming Language (aka K&R)
Everyone should have a copy of this book on the shelf. Sure there's arguably better books for learning C, and K&R hasn't even been updated in 28 years (the code in the book is not valid c99). But it's like the holy bible of programming books.
Hackers: Heroes of the Computer Revolution is worth a read.
All of Kevin Mitnick's books are good.
I'd honestly not really bother buying any books for learning actual programming from, since most stuff moves so fast, and there's so much material online to learn from.
This book teaches you how to program in C! It does not hit theory hard. It is considered one of the premier programing books. Full of practical knowledge.
C Programming Language, 2nd Edition by Brian W. Kernighan et al. http://www.amazon.com/dp/0131103628/ref=cm_sw_r_udp_awd_eJWltb0PHPQFQ
I recommend if you want to learn programming concepts
Google: python the hard way
I hope that is sarcasm, if not, here's some bed time reading.
http://www.amazon.com/Hackers-Computer-Revolutio-Steven-Levy/dp/0385312105
http://www.amazon.com/Lions-Commentary-Unix-John/dp/1573980137/
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/
Unix is more than a simplified Multric knock off and C is more than some language cobbled together.
I highly recommend using this book: "C The Programming Language"
https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628
It was my first book for learning C. And I think great for someone starting out. It has plenty of problems and is very informational. Use Youtube tutorials by people like Derek Banas and TheNewBoston to help start programming in C.
Shit, my copy of "The C Programming Language" was $50 like 20 years ago, and that was an important and dense book even at ~270 pages.
That better be some quality documentation on what is essentially a GNU project.
https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/ :3
This book.
You don’t have to be on Reddit. You could be reading this book instead: https://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
Hello there,
I can really suggest reading C Programming Language, 2nd Edition for questions related to the C-programming-language! Other than that this interactive tutorial pretty much points out the most important subjects you need to know to master the language.
Everyone is giving some conflicting advice so here's my also conflicting two cents.
Here are some of the books I learned with:
https://www.amazon.ca/Programming-Language-2nd-Brian-Kernighan/dp/0131103628
https://www.amazon.ca/How-Program-10th-Paul-Deitel/dp/0134448235/ref=sr_1_1?ie=UTF8&amp;qid=1501953321&amp;sr=8-1&amp;keywords=deitel+how+to+program
"C is quirky, flawed, and an enormous success." — Dennis M. Ritchie.
Look it up: C Programming Language
If you're mainly interested in Java, I would recommend Effective Java by Joshua Bloch. It's a great guide with recommendations for best practices in the language.
For C, the best book is The C Programming Language by Kernighan and Ritchie. I would recommend that you read that before ever looking at C++ because C++ is based on C. In fact, it's such a great book that I would recommend reading it before you read anything else on any language. You can skip the file system and Unix stuff though.
For C++, I have never found a good beginner book, so my suggestion would be that after you read the above C book, read the stuff in this tutorial and then read Effective C++ by Scott Meyers. It's another best practices book.
For Python, I've heard good things about Learning Python but I don't really know. I actually found it more useful to just go through the Python tutorial and then start making fun little scripts.
Hope that helps!
So is this one. That doesn't make it any less good.
To add to what others have been saying, if you choose to learn C, I would suggest that you pick up a copy of The C Programming Language, by Brian Kernighan and Dennis Ritchie - one of the go-to books for learning how to program in C.
And, perhaps one of the reasons this book is one of the first you should check out when it comes to learning C, Dennis Ritchie was one of the guys who created the C programming language itself!
Best of luck with learning C and/or C++ and I hope this helped you!
C++ is not what you need to learn then, you need just plain old ANSI-C. Yes, there is a difference.
Amazon link: The C Programming Language
You might be able to find a book in your local library.
How about
http://www.amazon.co.uk/Thinking-Java-introduction-object-oriented-programming/dp/0131872486/ref=sr_1_1?ie=UTF8&amp;qid=1311757403&amp;sr=8-1
Takes awhile to read though!
This is called "Learn C the Hard Way," but I think a better name is "C Programming for Idiots." Just dive in with the real stuff.
http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628/ref=sr_1_1?ie=UTF8&amp;qid=1317921424&amp;sr=8-1
http://www.amazon.com/Linux-Programming-Interface-System-Handbook/dp/1593272200/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1317921571&amp;sr=1-1
You should not look the source code of the libs if you want to learn how C works, their code it's full of complex concepts of C programming like a lot of preprocessor, abstract structures and complex algorithms (dynamic programming, divide and conquer, backtracking, etc).
If you don't know how UNIX programming works you should start there, like process control, file and dir management, threading, networking. A lot more useful to learn pure C than the standard libs implementations.
For UNIX programming read this: Stevens
To improve your knowledge in C: K&R and as a complement king.
If you insist in reading library implementation take a look at OpenBSD libs implementation (much clutter-less than GNU).
Oh, and also do yourself a big favor and learn Vim reading learning vim.
Knowing the basics of C language and UNIX programming is the way to become a true programmer/hacker.
You could try learning scheme. Try out the little schemer .
Then graduate to SICP
Start with a language like Python. After that it is easier for you to learn C, because you will know at least the basic programming constructs like If-statements, loops, variables etc.
I would learn C with the book The C Programming Language. It's the standard bible for C, short and to the point, and one of the best technical books ever. A good C knowledge is IMHO necessary and useful, because sooner or later you have to use C libraries or at least fall back to the C interfaces of Mac OS or iPhone OS to do certain things that aren't there in the Objective-C abstraction layers.
After you have a solid C knowledge, you can learn about Object Oriented Programming and Objective-C. Apple has a good introduction to both topics: Introduction to The Objective-C Programming Language.
After you know the language, you can learn about Cocoa in the Cocoa Fundamentals Guide and do your first graphical Cocoa application with Xcode and Interface Builder with the Cocoa Application Tutorial.
Then buy the book Cocoa Programming for Mac OS X by Aaron Hillegass. You will learn to use some of the most important Cocoa classes. After that you can stay with the Apple docs and reference.
When you know Cocoa, you can do your first steps with iPhone development very easily by watching the peepcode.com introduction videos IPHONE VIEW CONTROLLERS PART I and IPHONE VIEW CONTROLLERS PART II - oh, peepcode has even a Objective-C introduction video OBJECTIVE-C FOR RUBYISTS but it's very ruby-centric...
Look at me, everyone! I'm smarter than the authors of:
http://amzn.com/0131103628
Please lecture us. After all, those men are only a Harvard graduate decorated by the president of the United States and a Princeton professor with a PhD in Electrical Engineering.
Go out and buy K&R's "The C Programming Language". It's about 50 bucks on Amazon, and it's the definitive guide to C.
C++ is a derivation (and in fact, a strict superset) of C. So, anything that works in C works in C++. The book will get you acquainted with pointers, structs, and all the things that make C totally different than Java.
The best way I can describe C++ is if Java and C had a bastard child-a lot of the concepts from Java (object orientation, a class library, etc.) translate pretty directly, but a lot of stuff (pointers, memory allocation/deallocation, structs, unions) come from C. I find that these topics are much easier to learn through C rather than C++.
C doesn't contain much resemblance to Java because it has no object orientation (i.e. you can't have "objects", nor can you have "object methods" which only act upon the data in that object) which makes it a very weird experience for someone with only Java programming experience, but being able to program in straight ANSI C is an invaluable skill and it will put you WAY ahead in 225.
Here's a link. Trust me, don't rent this book, BUY it. You will use it for years to come.
Also, if you want a book that strictly covers C++ (I would only recommend this after you go through all of K&R), go ahead and get this one. It's easily the best C++ reference I know of.
>How do I go about installing libraries?
You don't install libraries. Either you compile them in as source code or you call them using your operating system or include them with your build command.
>Is there a package manager?
For what? This has nothing to do with the language. There are no "packages".
The rest of your questions are based on lack of fundamental knowledge and things learned from sources that have nothing to do with C. You need to find a very simple intro to get you going. Even though it's old and not modern, the very best book as an intro to C is "the white book". Easy to read by the author of C himself. Over 30 years later, I still have it sitting on my shelf as a homage if nothing else.
EDIT: As always, I'm not surprised about redditors inability to read what I wrote and insert words I never said.