Follow

How many of you so-called Computer Scientists out there have "The Art of Computer Programming" by Knuth on your bookshelves? If not please but the series all 4 books!

@MutoShack I agree, though sadly most programmers learned from 5 minute tutorials and it shows.

I've worked with a lot of developers over the years and 95% of them shouldn't be professional programmers, hobbyists at best.

I have met *University CompSci majors* who have no idea what they're talking about. It's insane!

I really wanted to attend University when I was like, 17. I looked at every local program available. The most "advanced" course taught Java, and a bit of C++. I doubt it talked at all about serious procedure optimization or lowlevel program analysis.

@MutoShack I find its a double edged sword.. if you just have purely theoretical knowledge your code will be horribly unmanagable and hard to work with. On the flip side if you have practical expiernce but lack the theoretical it will be slow and unable to properly address many technical problems.

You need both.

Do these books focus on any certain language? I'm not a programmer, but want to start volunteering with an open source project. I've heard of TAOCP, but what is SICP?

What language do you feel a programming newbie should tackle first?

TAOCP is not specific to any language. It uses a bare-bones imaginary assembly language.

SICP uses Scheme (Lisp), but the book was written by Gerald Sussman, the co-author of Scheme, so it works well. It's not a tutorial on Scheme per se, it just uses Scheme as a language to portray the ideas (of course, it starts off with an intro to Scheme).

I guess it depends on what you want to do and what sort of programmer you want to be.

There are classes of problems, bugs, and performance issues, you could never hope to solve as a computer scientist without a math background. At the same time there are plenty of classes of problems you can approach with a logical mind and minimal math.

I would say that any well rounded top of his class computer programmer needs to know math and computer theory. But if you lack those skills you can still be of help to a team and be productive, albeit at a diminished capability.

The issue is that if you dont know the math and theory, and no one else on your team does either, it can be hard for you to tell the difference. I often have programmers without a math/algorithms background propose solutions that sound perfectly feasable but due to my background I can immediately recognize that the proposed design will be impossible (perhaps due to performance limitations). I can likewise distinguish between solvable problems and unsolvable ones where someone without the background cant.

With that said I think if you have a logical mind and can understand mathy concepts even without the actual math, then yes you can probably get through an algorithms book and learn something. I would however suggest if you dont have a decent foundation in math you work on that as well.

Good feedback, thanks! Maybe I'll have to refresh my math on Khan Academy or something. I'm almost afraid to see how much I've completely forgotten.

It's not so much I don't have the foundation. I made it through Calculus 2, but I haven't used it in 15ish years after a career change from computers to healthcare. I suppose you could say I'm a little... behind the curve when it comes to math π€£

I'd like to consider myself somewhat logically inclined, but it's all relative to whom I compare it.

Maybe I'll order the books, and if they're way out of my league (quite possible) set them down while I refresh/increase my math skills. I wish I found learning math as fun as what those skills can eventually be used to create.

Math is a bit of a weird topic... they use all sorts of crazy vocabulary and personally I think its just not needed. Most concepts to read them on wikipedia will make you go cross eyed, but if someone explains the ideas in plain english they often are so trivial you laugh at the fact that you never understood it in the first place.

Khan academy really does a great job at addressing that problem IMO.

All that said I suspect the math will come back to you really fast. It also helps if you try to do actual tasks rather than just learn the theory. I always learn the most math when I try to build things with math, rather than reading from a text book.

This is a really excellent discussion and a background in mathematics is pretty much helpful in *any* field.

If I could recommend one more book, it would be "Concrete Mathematics", co-authored by Knuth (the TAOCP guy). It's written for programming and is pretty much a companion to TAOCP. I only have it on digital but I really enjoyed it. It starts off by turning very simple algorithms into mathematical equations. It's not only informative and concise, it's *fun*!

I started out in Zoology and then moved into a MS in CS later in my career. The advice @freemo is giving is solid. Anyone with a decent logical mind can do well at the practice of programming (writing good code, working with other developers, etc) but you'll be limited on the design side without brushing up on your math. If you've made it through Cal2 then you should have a strong enough grounding to pick most of the other stuff up. Discrete math and Linear Algebre would be good courses to look for online as supplements.

SCIP is a very good intro book but TAoCS is extremely dense and you'll most likely miss most of the nuance without the equivalent of an intro to algorithms course.

Yeah, I looked at some of TAOCP, I'd definitely agree, it appears to be a fairly challenging read for someone new to programming. I'm seeing a couple books targeting math for CS, which might be a better option since it's targeted toward's my intended future use.

Based on your comment, do you feel someone new to the field would be wise to start with a computer math book (Concrete Mathematics), then move to SCIP, and then finally tackle TAOCP? It just seems like a lot of reading/study before studying the languages that are predominantly used today, but I do understand the need for a solid foundation.

Thanks!

I dont think the order is quite so critical as just making sure you cover it all.

If you really want to start and make the first thing you do a computer program before you know any math, do it, if your having fun who cares. But know your limits.

What i suggest is you try to dive in over your head, thats what works for me. You quickly learn what you cant do and why, and then when you circle back to learn the math so you can actually do it since you have explored the actual problem already the math makes a lot more sense.

So in short, I'd say, do it all at once. Pick math problems that are really really challenging, ones you know you probably cant solve, and try to do it anyway. Failure is the greatest teacher.

To this day I still work on "impossible" problems I first tried to tackle in my early days of coding.. some of the impossible problems I've solved, others I keep learnign more and more math and come at them again.. Even if I never solve them, even if they arent even solvable, every cylce I learn more math, i learn more programming, and I learn better design.

Success is a waste of time, failure is where its at :)

"[Computer science] is not really about computers -- and it's not about computers in the same sense that physics is not really about particle accelerators, andΒ biologyΒ is not about microscopes and Petri dishes...and geometry isn't really about using surveying instruments. Now the reason that we think computer science is about computers is pretty much the same reason that the Egyptians thought geometry was about surveying instruments: when some field is just getting started and you don't really understand it very well, it's very easy to confuse the essence of what you're doing with the tools that you use." - Hal Ableson (author of SICP).

SICP will show you how CS people 'think' about programming problems and teach you your first language (a semi-toy language, useful for instruction) so it's a great first book. I haven't read the Concrete Math book so I can't really comment on it but I'd definitely encourage you to seek out a good algorithms course after that. I think Harvard has some free courses online. Then you'll want to learn a very high level language like Python for general applications. After that, what tools you learn will be more specific to what you want to end up doing.

@freemo on my list. not gonna buy it til i have time to at least start it tho

muto :3@MutoShack@functional.cafe@freemo

I'll try not to sound like a gatekeeper here, so I'll put it this way...

If you're an aspiring computer scientist, or a professional / expert computer scientist, TAOCP and SICP are some of the most amazing books in the field. If you have not read them, they should be on the VERY TOP of your wishlist!

"For Dummies" books are cheap for a reason: because they're, well... For dummies.

Also any "Teach yourself X in Y hours" bullcrap.