10 Replies - 467 Views - Last Post: 15 March 2019 - 03:17 AM

#1 135246357   User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 27-February 19

Which books for starting computer science?

Posted 27 February 2019 - 08:45 PM

Hello,
I am wanting to learn computer science.
My experience is nothing.

I obviously need several books, but as this is a new subject I need some advice on what books, and the order that each sub-subject should be studied.

After some online research, I found that the most important sections are algorithms, data structures, discrete mathematics, and then the language.
However, there have been conflicting opinions on what's important and in what order so I'm not too sure on this either.

Another thing I found is that there are books, say for learning algorithms, that are in 'alternative' languages, such as Java and Python; Is this a waste of time for me if I want to totally understand C++? Are these other languages limited to just particular uses or beginners?

Also, what type of maths is generally involved?

Is This A Good Question/Topic? 0
  • +

Replies To: Which books for starting computer science?

#2 135246357   User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 27-February 19

Re: Which books for starting computer science?

Posted 27 February 2019 - 08:53 PM

Would anybody know what books, and in what order, are learned at a good university? I really tried to research this, but came back with nothing. I want a total all rounded knowledge, so I guessed a university curriculum would be good, but I just can't find one?
Was This Post Helpful? 0
  • +
  • -

#3 jon.kiparsky   User is online

  • Beginner
  • member icon


Reputation: 11505
  • View blog
  • Posts: 19,576
  • Joined: 19-March 11

Re: Which books for starting computer science?

Posted 27 February 2019 - 10:33 PM

Interesting approach. Have you considered online courses? There are some good ones out there for free. For example, MIT's Open Courseware offers a few versions of their discrete math course, which seem to be pretty good. This includes the course lectures, a good text, and some problem sets, and it's free, so might be worth a try for your discrete math needs. If nothing else, if you find that course you'll be able to find a free discrete math textbook which is pretty good.
To be honest, there are a ton of decent textbooks for discrete math and probably most of them are as good as any other, so there's not a lot of guidance I can give you there.

For algorithms, Cormen et al, often abbreviated to CLRS, is becoming the standard treatment of the subject. It's language-independent, meaning it's written in a pseudocode that bears a suspicious resemblance to python but I'm sure that's coincidental. It's a pretty advanced text, but it covers a hell of a lot of ground. Since you're interested in C++ you might consider looking for an older edition of Sedgewick's text, which used C. It's in the ballpark at least (but of course C and C++ are quite different)

Quote

Another thing I found is that there are books, say for learning algorithms, that are in 'alternative' languages, such as Java and Python; Is this a waste of time for me if I want to totally understand C++? Are these other languages limited to just particular uses or beginners?


Java was the standard first language for at least a decade in much of the world, and is still commonly taught. Most of the classic software engineering literature uses Java for its code examples, because it was a lingua franca for so long. (Fowler, the Gang of Four book, etc). I mostly see people using it for high-performance back-end programming these days. Python is becoming a dominant language in many domains, and it's taking over from Java as a dominant language of instruction at many schools. Python is very popular in scientific computing and the web, but it's really used for just about anything you can think of. Neither is particularly limited - they're both serious general purpose languages, widely deployed in the industry, and worth learning.
Was This Post Helpful? 0
  • +
  • -

#4 135246357   User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 27-February 19

Re: Which books for starting computer science?

Posted 28 February 2019 - 10:52 AM

Thanks for the reply.
Yes, I did keep seeing cormens book pop up with my research.
Would the old sedgewicks text confuse me though as C isn't really the same as C++? Also, could you tell me what uses each programming languages have? I am new to this after all so maybe there are some things I am misunderstanding. I presumed that C++ is the most complete programming language, and that once you know C++, other languages are easy if ever needed?
My main goal to learn all this is project management for application design on Mac/Windows and iOS, as well as any other 'consumer based' projects - aka - I won't be working on things like enterprise security systems or business solution software etc, if that makes any difference.

However, I still obviously need a good span of knowledge, probably even on parts that are not directly orientated to my goal.

Thanks for letting me know about the discrete math course, I'll definitely be looking into that.

This post has been edited by macosxnerd101: 28 February 2019 - 07:39 PM
Reason for edit:: Removed quote. There is no need to quote the post above yours.

Was This Post Helpful? 0
  • +
  • -

#5 hexagod   User is offline

  • 😂😂😂
  • member icon

Reputation: 31
  • View blog
  • Posts: 577
  • Joined: 29-October 16

Re: Which books for starting computer science?

Posted 28 February 2019 - 03:57 PM

There is no "complete" language really... they all have different uses, advantages and disadvantages.

C++ is, however, practically universal and can be used to create a wide variety of types of software, but it's often not the most time efficient way of doing so. That's why we find common uses for a lot of these languages, practicality in speed of creating applications.

I'm beginner intermediate (4 total years programming) so others may have to correct me but:

C++ is generally used for portable (multiple platforms) high performance software where no expense can be sparred in making the application run as fast as possible. It's generally used for desktop software and frameworks, gaming engines, backend systems, cryptocurrencies, linux, windows, iOS, chromebook etc. Mobile apps can be created aswell but usually it's for advanced programmers who want to get as close as possible to their hardware without going the assembly route

Java is used for all different types of applications from desktop to web. It doesn't have the performance of C++ but it's a heck of a lot easier to write code (IMO) and programming on a desktop, webapp, cell phone, tablet are virtually identical (other than different libraries). Java is a very good choice for pragmatic programming. It is used for everything from gaming engines to desktop software to some of your favorites apps already on your phone.

C# is my personal favorite. It can be used for everything from desktop apps, games to mobile apps. It doesn't have the performance of C++ but in my experience has better performance than Java when running in windows, and worse performance than Java when running on mobile devices. C# combines the power of .NET with the simplicity of Java (comparable simplicity) and is very versatile. I find that Java is less geometric in physical look than C#. C# code blocks tend to look a little cleaner IMO but old school programmers who know Java probably could care less.

Python can be used to quickly create desktop apps, webapps, background services, scripting ... but it usually requires an interpreter AFAIK. It is a high level language which means that in some cases the performance isn't as good as C++, but it is a heck of a lot simpler than many other languages and is very very popular.

Javascript is used for programming software that runs through a browser and integrates well with HTML.

If I were you I'd start with a simpler language like Java, C# or Python because it will help you learn the basics while building cool apps easily and you won't get as overly caught up in syntax. If you really want to learn C++ then go for it! There's lots of awesome C++ coders on here (not me lol) who will be most likely glad to help. I started in TI Basic and I'm glad I did because it was so simple that I was able to quickly learn how input, calculation, output works.

If I had tried to learn C++ before TI Basic I think I would have given up.
Was This Post Helpful? 0
  • +
  • -

#6 jon.kiparsky   User is online

  • Beginner
  • member icon


Reputation: 11505
  • View blog
  • Posts: 19,576
  • Joined: 19-March 11

Re: Which books for starting computer science?

Posted 01 March 2019 - 08:18 AM

Quote

I presumed that C++ is the most complete programming language,


"Most complete programming language" is an interesting phrase.
When we talk about completeness of a programming language, the most obvious thing we could mean is "Turing completeness". This just means that the language is sufficient to do the things a Turing machine can do, which is to say, it can compute any computable result. This is a relatively low bar, however, and apart from some DSLs and markup languages, pretty much everything you call a "language" is complete, and in this sense no language can be more complete than any other. In principle, if you can write it in C++, you can write it in python, java, lisp, BASIC, brainfuck, ook, or whatever.

So this is probably not what you mean. Maybe what you mean is the most general language? That would be, the language that you can use for the most different things. Here, I think we're into the realm of opinion, but I would argue that python holds this title today. Python is not "the best language" in any sense, and there are often good reasons to deploy other languages, but one thing that python has going for it is a mind-bending ecosystem of libraries and a community ethos and toolset which mean that if anyone has ever solved a problem in some domain, there is probably some library support for that domain, that library support will be easy to install, it will work in a pretty intuitive way (it'll be "pythonic"), and it might even be well maintained. So for generality, python really is a Swiss army language. It's not the best tool for most jobs, but for many people it's the first one they reach for, and often it does the job well enough that you don't reach for a second one.

What some people point to in C++ is the notion that it is in some sense "faster" than other languages - meaning, I think, that code in C++ will take fewer cycles than equivalent code in most other languages, and hence will typically run in less time on the same machine. This is a reasonable notion, and it's why people look to C++ for performance-critical applications, but for many people the developer-time costs of creating and maintaining a C++ codebase are sufficiently high that they will demand convincing proof that the application is performance-critical in a way that C++ can help with before they reach for the C++. And to be honest, I see Java deployed for a lot of performance-critical back-end work, more than I see C++. This is an *extremely* unscientific sample, though, and probably exposes only the limits of my personal experience.


Quote

and that once you know C++, other languages are easy if ever needed?


This phrase makes me think you mean that C++ in some way "encapsulates" other languages in some way. That it's the purest language of computation, or something like that, and learning it teaches you how to program in general, so other languages are really just specialized versions of C++. And this is actually not a bad notion. Wrong, but not a bad notion. Straight C is very close to assembly language, and writing straight C does feel a lot like you're expressing a computation in its most teeth-grindingly mechanical way possible. You're really talking to the machine on something very close its own level. This is useful in some interesting ways, one of which is that it makes you think a lot about individual cycles, and exactly where your program is spending its time. On the other hand, it makes you think a lot about individual cycles and exactly where your program is spending its time - and often, you want to be solving the problem and getting on with it!
C++ is technically a low-level language (in the sense that it allows you to address memory directly) so it shares some of these characteristics, and it allows you to think right down at the machine's level if you want, so it does give you some of that. But for a lot of purposes, people prefer high-level languages because they tend to allow you to spend your time on the problem you're trying to solve, rather than thinking about the machine's-eye view of the world.

So yes, learning C++ will certainly help you learn other languages. But you can probably learn those languages directly if you want.
Was This Post Helpful? 1
  • +
  • -

#7 hexagod   User is offline

  • 😂😂😂
  • member icon

Reputation: 31
  • View blog
  • Posts: 577
  • Joined: 29-October 16

Re: Which books for starting computer science?

Posted 01 March 2019 - 08:59 AM

jon.kiparsky very interesting post, thanks for sharing

One very advantageous aspect of learning C++ right out of the gate is that other languages, libraries, assemblies will seem breezy after you've managed to stomach C++. I'm not saying that you can't create good software as a beginner with C++, but the difficulty level is a lot higher when it comes to making useful software, and I find the other languages a lot easier to understand. Also, if you use templates (very useful for beginners), templates for other languages are a LOT easier to understand and reverse engineer. IMO
Was This Post Helpful? 0
  • +
  • -

#8 jimblumberg   User is online

  • member icon

Reputation: 5726
  • View blog
  • Posts: 17,531
  • Joined: 25-December 09

Re: Which books for starting computer science?

Posted 01 March 2019 - 09:09 AM

Quote

C++ is technically a low-level language (in the sense that it allows you to address memory directly) so it shares some of these characteristics, and it allows you to think right down at the machine's level if you want, so it does give you some of that.

But you can also use C++ high level features to avoid most of the complexity of the low level world of C++, if you want. The biggest problem with C++, IMO, is that it doesn't have any standard library for working with GUI interfaces and you must rely on third party libraries for a lot of other things as well.

Jim
Was This Post Helpful? 0
  • +
  • -

#9 DarenR   User is offline

  • D.I.C Lover

Reputation: 602
  • View blog
  • Posts: 3,993
  • Joined: 12-January 10

Re: Which books for starting computer science?

Posted 01 March 2019 - 09:18 AM

google tends to be the best
Was This Post Helpful? -1
  • +
  • -

#10 jon.kiparsky   User is online

  • Beginner
  • member icon


Reputation: 11505
  • View blog
  • Posts: 19,576
  • Joined: 19-March 11

Re: Which books for starting computer science?

Posted 01 March 2019 - 10:33 AM

View Postjimblumberg, on 01 March 2019 - 11:09 AM, said:

But you can also use C++ high level features to avoid most of the complexity of the low level world of C++, if you want.


Absolutely. I say C++ is low-level because it allows the low-level access to the machine memory, which is the classical definition of the term, but this does not imply that C++ programs are inherently low-level or in any way inferior to other programs.
Was This Post Helpful? 1
  • +
  • -

#11 NyornBub   User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 2
  • Joined: 15-March 19

Re: Which books for starting computer science?

Posted 15 March 2019 - 03:17 AM

I've just started studying Computer Science at Uni and one book i read as pre-reading that i found really quite interesting is Algorithmics the spirit of computing, it was something i read a few pages of each day on public transport and such, a good read.
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1