Question about teaching myself C

<p>Despite what I have read on here about learning C as a first language and how difficult it is, and little syntax errors, im finding the language a lot of fun and im also finding its useful applications in CS. Im using 2 different books right now. One is "Beginning C" by Ivor Horton, its slow paced and great for an intro. The other book is considered a beginner book but I think it entails some previous C knowledge because it jumps into pointers and arrays right at page 50. Ive been reading Horton's book along with this book. Its teaching to write basic C code then stepping through it with debuggers and looking into memory along with learning basic x86 processor ASM. The book is "Hacking, The Art of Exploitation, second edition" by Erickson. My question is if this stuff is way too advanced for me and if i shouldn't be learning both these books at the same time. I mainly just use the C book to help me understand the C code in the other book. Should i continue learning this way??</p>

<p>Since you seem to be learning and understanding the material, and it’s fun for you, why not? Just remember to be patient in case you run into problems. Also, there are people online who are willing and able to help.</p>

<p>If it’s working out so far, then by all means, go for it!</p>

<p>I have “Hacking, The Art of Exploitation.” Drop that book, right now. That book is not for beginners, and will give you an horrible introduction to computer science. It does not talk about software development at all.</p>

<p>Starting out with C was a bad idea, too, to be honset. C is a procedural language, but object orientated programming is a huge part of software development. You will have hard time trying to adjust to OOP later on. C does not support inheritance, polymorphism, or custom objects with constructors, which all are used heavily in the real world…</p>

<p>You might want to switch over to C++</p>

<p>If learning C is a breeze for you, consider yourself lucky. Many people struggle with pointers and things like that.</p>

<p>If you feel like you’re mastered C, you can move onto C++. C++ is a very deep language, and most people who consider themselves “expert” C++ programmers are not.</p>

<p>After that, you can move on to functional programming languages like Haskell or Lisp/Scheme. Or you can try teaching yourself languages used in scientific computing and statistics like Matlab and R.</p>

<p>Ok i will take your advice and will take a look at that book later on in my CS degree, but i was having fun with it. and although i understand i obviously need a very in depth knowledge of computer languages i dont plan on being a software engineer. I would rather specialize in something along the lines of security and maybe one day if i’m ever good enough i would like to work with pentesting.</p>

<p>While I favor the component-based software design approach using C++, since you are doing so well with C and assembly (I still haven’t taken the assembly class so you are ahead of me on that!) I wouldn’t be in any hurry to switch just yet. I very very much doubt you’ll develop any “bad habits” or anything from studying C first and then moving onto C++. There is a lot you can do with just C. Most operating systems, for example, are written in C. So you can do anything you want in C.</p>

<p>If, however, you aren’t happy with the books you’re reading, I can recommend a few for you:</p>

<p>[Amazon.com:</a> Engineering Problem Solving with C (3rd Edition) (9780131429710): Delores M. Etter: Books](<a href=“http://www.amazon.com/Engineering-Problem-Solving-3rd-Edition/dp/013142971X]Amazon.com:”>http://www.amazon.com/Engineering-Problem-Solving-3rd-Edition/dp/013142971X)
[Amazon.com:</a> Engineering Problem Solving with C++ (3rd Edition) (9780132492652): Delores M. Etter, Jeanine A. Ingber: Books](<a href=“http://www.amazon.com/Engineering-Problem-Solving-3rd-Edition/dp/0132492652/ref=pd_sim_b_1]Amazon.com:”>http://www.amazon.com/Engineering-Problem-Solving-3rd-Edition/dp/0132492652/ref=pd_sim_b_1)</p>

<p>Bear in mind that before learning assembly, most CS students get an introduction to algorithms and data structures, like trees and linked lists and different sorting and search methods (quicksort, heapsort, hashing, etc.) and formal language stuff (context-free grammars). I’m not saying you’re doing it the wrong way or the right way, but keep in mind you just might want to switch to a book that covers these topics instead of the more advanced assembly book.</p>

<p>The C introduction within the art of exploitation is a must read for anyone remotely interested in system design or security, which only presumes syntactical familiarity with C. I highly recommend getting the book if not just for that section.
[beginning</a> C for hackers](<a href=“http://www.scribd.com/doc/61812819/beginning-C-for-hackers]beginning”>http://www.scribd.com/doc/61812819/beginning-C-for-hackers)</p>

<p>I’ll be honest, a CS education has very little to do with tying you down with any language, and unless you specialize in PL, very little to do with programming languages in general. If you aren’t working with C regularly, it doesn’t matter if you eventually pursue a Ph.D in software security, you’re not going to become any more familiar with writing programs in C. The main obstacle in learning new topics in CS isn’t the difficulty of the subject, it’s the lack of interest. If the interest is there, there’s no reason not to pursue it, especially when you’re not bogged down by school work.</p>