CS théorique et mathématiques - recommandations d'autoformation

14

Je suis un diplômé non-CS et mon domaine d'études n'est pas lié à CS. Cependant, dans le cadre d'un projet plus vaste visant à devenir informaticien, je souhaite obtenir une solide formation en informatique théorique et en mathématiques en ce qui concerne la CS. J'ai fait de nombreuses recherches et sélectionné les meilleurs / très bons livres suivants sur le thème de la science et de la science et des mathématiques et j'aimerais vous demander votre avis sur:

  • Exhaustivité des sujets traités (veuillez recommander tout ce que j'ai oublié)
  • Chevauchement du matériel couvert / zone de surpuissance (veuillez recommander les livres qui devraient être retirés de la liste)
  • Ordre d'étudier les livres (j'ai énuméré dans l'ordre que je pense qu'ils devraient être étudiés)

La liste semble excessivement longue, donc j'apprécierais les recommandations pour supprimer certains livres, sans la perte des connaissances de base requises pour CS.

Donc, les livres sont:

  1. Délice du mathématicien par WW Sawyer
  2. Comment le prouver: une approche structurée par Daniel J. Velleman
  3. Comment le résoudre: un nouvel aspect de la méthode mathématique par G. Polya
  4. Une introduction à la programmation fonctionnelle par le calcul lambda par Greg Michaelson
  5. Fondements de l'informatique par Al Aho et Jeff Ullman (http://i.stanford.edu/~ullman/focs.html)
  6. Mathématiques concrètes: une fondation pour l'informatique par Graham, Knuth et Patashnik
  7. Introduction à la théorie du calcul par Michael Sipser
  8. Introduction à la théorie des automates, aux langages et au calcul par John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman
  9. Complexité informatique: une perspective conceptuelle par Oded Goldreich
  10. Complexité informatique: une approche moderne par Sanjeev Arora, Boaz Barak
  11. Un cours de combinatoire par JH van Lint, RM Wilson
  12. Calculabilité: une introduction à la théorie de la fonction récursive par Nigel Cutland
  13. Ordinateurs et intractabilité: un guide de la théorie de la complétude NP par MR Garey, DS Johnson
  14. Théorie des fonctions récursives et calculabilité efficace par Hartley Rogers
  15. Inégalités de GH Hardy, JE Littlewood, G. Polya
  16. Logique mathématique: un cours avec des exercices (partie I): calcul propositionnel, algèbres bookéennes, calcul des prédicats par René Cori, Daniel Lascar
  17. Logique mathématique: un cours avec des exercices (partie II): théorie de la récursivité, théorèmes de Godel, théorie des ensembles, théorie des modèles par René Cori, Daniel Lascar
CSLover
la source
Veuillez vous référer à cette question cstheory.stackexchange.com/questions/3253/…
Bartosz Przybylski
Commencez avec un livre d'algorithmes connu si vous n'avez pas encore d'expérience dans ce sujet.
AJed
@Bartek: Merci, mais c'était l'une des questions que j'ai examinées auparavant pour compiler la liste en premier lieu. Ma question est plus sur la façon de lire pratiquement tous les grands documents là-bas. Le temps est toujours une contrainte, donc je veux savoir quels livres je ne dois "pas" lire pour éviter les répétitions, etc.
CSLover
@AJed: Suggérez-vous de commencer par le livre n ° 5 sur la liste au lieu de certains des livres de mathématiques n ° 1-4? Je crois que le numéro 5 donne une introduction en douceur aux algorithmes et aux structures de données.
CSLover
Trop ici. J'en choisirais un et j'irais, puis je m'inquiéterai de ce qui va suivre lorsque vous y arriverez. Je pourrais recommander Sipser de commencer pour un débutant qui veut une solide expérience dans les fondations de CS.
usul

Réponses:

10

Votre liste est extrêmement problématique.

Pour commencer, je sauterais carrément les livres 6, 11, 12, 14, 15, 16, 17: les livres 6, 11 et 15 sont des mathématiques générales qui ne sont vraiment nécessaires que si vous devenez un chercheur théorique . Les livres 12 et 14 couvrent la théorie de la récursivité qui n'est pas de l'informatique (même si elle traite de la calculabilité!). Les livres 16 et 17 couvrent des sujets avancés en logique, alors que vous n'avez besoin que de connaître une logique très basique.

Sur les livres 1, 2, 3, je choisirais un seul pour servir d'introduction générale aux mathématiques et aux preuves.

Les livres 5, 7, 8, 9, 10, 13 couvrent plusieurs sujets: la théorie des automates, les algorithmes et la théorie de la complexité. Permettez-moi de vous suggérer de suivre Sipser (Livre 7) pour la théorie des automates et la théorie de la complexité, et Introduction to Algorithms par Cormen, Leiserson, Rivest et Stein ("CLRS") pour les algorithmes.

Le livre 4 traite de la programmation fonctionnelle. Bien que ma formation en informatique n'ait jamais inclus de cours sur ce sujet, il est juste de dire que de nombreux chercheurs en informatique théorique considèrent la programmation fonctionnelle comme faisant partie des fondements essentiels.

En résumé: ce avec quoi vous restez est

  • Un des livres 1 à 3 (ou tout texte comparable "d'introduction à la preuve")
  • CLRS
  • Livre 4 (programmation fonctionnelle)
  • Livre 7 (théorie des automates et théorie de la complexité)
Yuval Filmus
la source
Merci beaucoup pour une réponse aussi complète. Je savais que la liste était excessive, mais en lisant toutes sortes de recommandations de livres pour les informaticiens, vous vous retrouvez avec une longue liste. Votre recommandation est très pratique, et c'est ce que je recherche. Grand merci!!
CSLover
1
Je ne suis pas d'accord avec l'avis selon lequel "les mathématiques ne sont pas nécessaires". Choisissez n'importe quel aspect de l'informatique et je vous montrerai comment les mathématiques sont nécessaires. Plus vous apprenez de mathématiques, mieux vous êtes. D'un autre côté, il est presque impossible d'apprendre seul de vraies mathématiques sans aller à l'école. Il vaut donc mieux se concentrer sur l'informatique, c'est plus facile à apprendre.
Andrej Bauer
5

Vous pourriez également envisager de profiter de certains des nombreux cours en ligne disponibles. Par exemple, Stanford et le MIT proposent des cours en ligne (gratuits) en informatique, et je pense qu'il y en a beaucoup d'autres également.

En ce qui concerne les livres, j'appuie la plupart des recommandations de Yuval, sauf que CLRS est une excellente référence, mais un peu écrasante comme livre d'introduction pour s'asseoir et lire. Pour un premier passage à la partie algorithmes, je pourrais recommander les algorithmes de Dasgupta et al. . Le lien précédent est vers la préimpression en ligne gratuite, mais il est également assez bon marché d'acheter en livre de poche.

Joe
la source
D'accord. J'apprécie votre réponse. Merci beaucoup.
CSLover
2

Les références que vous proposez feraient un informaticien "très" théorique. mais honnêtement, je ne trouve aucun avantage à lire tous ces livres si vous êtes d'un diplôme non-CS. Bien sûr, tout dépend de ce dont vous avez besoin.

Je trouve que certains livres tels que les livres 14, 15, 16, 17 ne sont pas destinés aux informaticiens. Le livre 3 est détaillé. C'est juste général pour tout étudiant. Par conséquent, je suppose que les livres 1 et 2 sont identiques.

Pour moi - étant dans votre même situation que pas à l'origine un informaticien (mais plutôt un ingénieur électricien / informaticien) - je propose deux directions initiales:

  • conception et analyse d'algorithmes, (beaucoup de gens suggèrent le CLRS Introduction to Algorithms . C'est une excellente référence, mais je ne suis vraiment pas fan d'elle et au départ c'était un pari plus difficile à comprendre et parfois très verbeux. Je suggère cependant que vous suivez sa table des matières, et de là vous consultez les cours en ligne pour des références plus claires).

--- assurez-vous de maîtriser un langage de programmation pour IMPLÉMENTER les algorithmes et les structures de données que vous apprenez - par conséquent, je suggère la série des algorithmes, de Sedgewick (incroyable!)

--- AJOUTÉ: Je suggère également ce livre: Algorithmes combinatoires: génération, énumération et recherche par D. Kreher. Ceci est un très beau livre. Vous donnera une perspective différente de nombreux problèmes d'algorithmes.

  • combinatoire (en particulier la théorie des graphes), un cours de combinatoire par JH van Lint, RM Wilson , est bon. Il existe de nombreuses autres références. Habituellement, n'importe quel livre sur la combinatoire bien connu suffit - tout ce que vous obtiendrez de références supplémentaires sur Internet. J'ai personnellement aimé: la combinatoire peter j cameron et la théorie des graphes Bondy et Murty.

  • un pari de probabilité (toujours nécessaire). Il est frappant de constater que de nombreux domaines scientifiques n'utilisent pas la probabilité. Mais croyez-moi, tout ce que vous devez savoir, ce sont les bases.

Ensuite: De nombreux chercheurs se faisant appeler des informaticiens théoriques se concentrent tellement sur la théorie du calcul (automota et autres). Il y a de bons livres pour ça (Voir le post de Yuvul Filmus),

Aho et Ullman est bon (en fait, tous les livres d'Ullman sont bons). Mettez-vous à l'aise avec la conception du compilateur (voir http://infolab.stanford.edu/~ullman/ullman-books.html ).

Après cela: tout dépend de ce que vous voulez faire. Différentes directions que vous pouvez prendre: 1) bases de données, 2) reconnaissance de formes et exploration de données, 3) algorithmes distribués, 4) fondation de langages de programmation, 4) algorithmes de randomisation et bien d'autres. [dont chacun nécessite un autre post] mais essayez d'avoir une idée de tout!

* L'idée générale: si vous êtes nouveau sur CS, alors familiarisez-vous avec autant de sous-domaines CS que possible. Vous limiter à la "théorie" vous fera perdre beaucoup de créativité CS! * (mon avis)

AJed
la source
Pour moi une programmation fonctionnelle. N'utilisez pas un livre hérité comme celui que vous avez cité. Les langages fonctionnels sont actuellement requis dans l'industrie. Il existe des didacticiels sur Internet sur des langues telles que Scheme, Haskel et Erlang. Ne soyez pas très théorique, c'est mon conseil.
AJed
Tous les bons commentaires. Mon objectif est de concevoir un programme d'autoformation complet et cette question ne concerne qu'une section du programme, que je pensais être la plus difficile à organiser. Les autres domaines comprennent: les structures et algorithmes de données, l'architecture informatique, les systèmes d'exploitation, les réseaux, la sécurité et la cryptographie, le parallélisme, les méthodes formelles, l'intelligence artificielle, les graphiques et la simulation, les bases de données, les langages de programmation, les compilateurs, l'ingénierie logicielle et enfin la philosophie et l'administration d'Unix. La plupart de ceux-ci, je pense, sont assez fondamentaux pour CS, mais mériteraient une question distincte
CSLover
Votre meilleur truc est une base solide dans la conception et l'analyse d'algorithmes. - chaque autre domaine est un sous-domaine de conception et d'analyse d'algorithmes.
AJed
Souhaitez-vous être gentil et préciser quel livre d'algorithmes de Sedgewick vous avez recommandé? Il en a un appelé "Algorithmes" mais ce n'est pas une série. Il a également "Algorithms in C ++" (ou d'autres langages) qui est 2 livres je crois avec un total de 5 parties.
CSLover
Celui que j'ai utilisé était celui en C ++. Je les ai cependant utilisés comme références. Ceci est son site Web cs.princeton.edu/~rs
AJed