====== Documentation ======
//(page originale par **angel59** pour [[http://www.terranux.net/wiki/doku.php|Terranux]] et [[http://wiki.alionet.org/|Alionet]])//

===== Introduction =====

Dans cette section, vous pourrez trouver des références consacrées à la programmation. Ces références bibliographiques seront divisées en trois sections : les livres, les sites Internet et l'indispensable.

Toutes ces références s'adressent principalement aux développeurs et aux étudiants en Informatique, mais toute personne voulant apprendre à programmer trouvera également ce dont elle a besoin.
\\
\\

===== Livres =====

==== Programmation système en C sous Linux ====

**Auteur :** Christophe Blaess\\
**Editeur :** Eyrolles\\
**Date de parution :** mars 2005\\
**ISBN :** 2212116012\\
\\
**Description :**\\
//Comment tirer le meilleur parti de l'environnement Linux ? La possibilité de consulter les sources du système, de la bibliothèque glibc et de la plupart des applications qui tournent sur cet environnement représente une richesse inestimable aussi bien pour les passionnés qui désirent intervenir sur le noyau, que pour les développeurs curieux de comprendre comment fonctionnent les programmes qu'ils utilisent quotidiennement. Sans équivalent en langue française, l'ouvrage de Christophe Blaess constitue une référence complète de la programmation système sous Linux, y compris dans les aspects les plus avancés de la gestion des processus, des threads ou de la mémoire. Les programmeurs travaillant sous d'autres environnements Unix apprécieront tout particulièrement l'attachement de l'auteur au respect des standards (C Ansi, glibc, Posix...), garant d'une bonne portabilité des applications.

La deuxième édition a été entièrement actualisée selon le noyau Linux 2.6 et les nombreuses évolutions de la bibliothèque C.//

<note>Un très bon bouquin, écrit par un habitué de Linux, puisque Christophe Blaess est l'un des traducteurs des pages de manuel Linux.</note>
\\
\\

==== La bible du programmeur C, C++, C# ====

**Auteur :** Kris A. Jamsa\\
**Editeur :** Reynald Goulet Eds\\
**Date de parution :** janvier 2004\\
**ISBN :** 2893772854\\
\\
**Description :**\\
//La Bible du Programmeur en C/C++/C# est la référence la plus complète traitant du langage de programmation C/C++/C#. Écrite par un programmeur à l'intention des programmeurs, ce livre examine des concepts clés tels que :

° Le polymorphisme, les fonctions virtuelles et les conteneurs
° Les fonctions génériques et les classes
° L'utilisation de la bibliothèque de modèles standard (STL)
° La programmation sous Windows et d'autres environnements 32 bits
° Le multi-threading
° La gestion des exceptions pour créer du code prêt à répondre à toutes les situations
Le CD-ROM d'accompagnement contient le code source de 1045 programmes prêts à l'emploi en plus du compilateur Borland C++ 5.5.

Le CD-ROM contient 1045 routines et le compilateur Borland C++ 5.5.//

<note> Certes, plus orienté Win$ :-x , mais l'essentiel des fonctions et méthodes standards du C et du C++ y sont. Donc on y retrouve ses petits.</note>
\\
\\

==== Linux - L'essentiel du code et des commandes ====

**Auteur :** Scott Granneman\\
**Editeur :** Campuspress\\
**Date de parution :** novembre 2006\\
**ISBN :** 2744021253\\
\\
**Description :**\\
//Ce Guide de survie est le compagnon indispensable pour ne jamais se sentir perdu dans un environnement Linux. Vous y trouverez en un clin d'œil les principales commandes et lignes de code utilisées au quotidien pour mener à bien vos tâches des plus simples aux plus complexes.
\\
\\
Simple à transporter simple à utiliser c’est un outil de poche parfaitement maniable qui propose plus de 100 fragments de code et commandes personnalisables pour gérer et manier Linux dans toutes les situations.
//

<note> Idéal pour apprendre les principales commandes Linux et ainsi écrire des scripts shell avec ces commandes.</note>
\\
\\

==== Linux Device Drivers ====

**Auteur :** Alessandro Rubini\\
**Editeur :** O'Reilly\\
**Date de parution :** ???\\
**ISBN :** ???\\
\\
**Description :**\\
//This book is for anyone who wants to support computer peripherals under the Linux operating system or who wants to develop new hardware and run it under Linux. Linux is the fastest-growing segment of the UNIX market and is winning over enthusiastic adherents in many application areas. This book reveals information that heretofore has been passed by word-of-mouth or in cryptic source code comments, showing how to write a driver for a wide range of devices. You don't have to be a kernel hacker to understand and enjoy this book; all you need is an understanding of C and some background in UNIX system calls. Drivers for character devices, block devices, and network interfaces are all described in step-by-step form and are illustrated with full-featured examples that show driver design issues, which can be executed without special hardware. For those who are curious about how an operating system does its job, this book provides insights into address spaces, asynchronous events, and I/O. Portability is a major concern in the text. The book is centered on version 2.0, but also covers 1.2.13 and experimental versions up to 2.1.43. You are also told how to maximize portability among hardware platforms. Contents include:\\ \\

     * Building a driver and loading modules\\

     * Complete character, block, and network drivers\\

     * Debugging a driver\\

     * Timing\\

     * Memory management and DMA\\

     * Interrupts\\

     * Portability issues\\

     * Peripheral Component Interconnect (PCI)\\

     * A tour of kernel internals\\
//

<note> Sous licence //Creative Commons Attribution-ShareAlike 2.0//, disponible sur [[http://lwn.net/Kernel/LDD3/|LWM.net]] dans sa 3ème édition.</note>
\\
\\

==== Qt4 et C++ - Programmation d'interface GUI ====

**Auteurs :** Jasmin Blanchette & Mark Summerfield\\
**Editeur :** Pearson Education France\\
**Collection :** CampusPress Référence\\
**Date de parution :** 2007\\
**ISBN :** 978-2-7440-2140-4\\
\\
**Description :**\\
//Grâce au framework Qt de Trolltech, vous pouvez créer des applications C++ de niveau professionnel qui s'exécutent en natif sous Windows, Linux/UNIX, Mac OS X et Linux intégré sans qu'aucune modification dans le code source soit nécessaire.
Ce guide complet vous permettra d'obtenir des résultats fantastiques avec la version la plus puissante de Qt jamais créée : Qt 4.1. En s'appuyant sur des exemples réalistes, il présente des techniques avancées sur divers sujets depuis le développement de l'interface graphique de base à l'intégration avancée de XML et des bases de données.

     * Couvre l'ensemble des éléments fondamentaux de Qt, depuis les boîtes de dialogue et les fenêtres jusqu'à l'implémentation de la fonctionnalité d'une application

     * Présente des techniques avancées que vous ne retrouverez dans aucun autre ouvrage, comme la création de plugins d'application et pour Qt, ou la création d'interfaces avec les API natives

     * Contient des annexes détaillées sur la programmation C++/Qt destinée aux développeurs Java expérimentés
//

<note> Livré avec un CD-Rom contenant les sources des exemples du livre, mais également le framework Qt à installer sur vos machines Win$, Mac OS, Linux et de nombreux autres OS UNIX (Solaris, HP-UX...).
Il est des livres que je conseille d'avoir dans sa bibliothèque. Et bien celui-ci en fait parti. Pour apprendre à programmer en Qt, en complément de la documentation du framework, ce livre vous amènera là où vous n'auriez jamais pensé mettre les pieds ;-) .</note>
\\
\\

===== Sites Internet =====

  - [[http://www.developpez.com/]] : Site généraliste comportant de nombreux cours, tutoriels et codes sources, et ce pour de nombreux langages de programmation : //C/C++//, //Java//, //.NET//, //Pascal//...\\ \\
  - [[http://www.siteduzero.com/]] : Comme le sous-titre le laisse présager : "Ici, on apprend tout à partir de zéro", ce site est destiné aux débutants qui souhaitent se lancer dans la programmation.\\ \\
  - [[http://www.codes-sources.com/]] : Tout comme //[[http://www.developpez.com/|developpez.com]]//, ce site contient de nombreux codes sources, tutoriels sur la majeure partie des langages de programmation. Sa particularité est sa ramification. Chaque langage (ou presque) dispose de son propre site. Par exemple, pour le //C/C++//, il faut aller sur [[http://www.cppfrance.com/|cppfrance.com]]. Mais il n'est pas nécessaire de connaître les liens par coeur, un seul suffit : [[http://www.codes-sources.com/|codes-sources.com]].\\ \\
  -  [[http://www.qtfr.org/]] : "Le site //Qtfr// est né du besoin d'avoir un espace d'entre-aide francophone autour de cette bibliothèque. Dans un premier temps sous la forme d'un simple forum (à l'époque ProgQt), il a évolué pour être maintenant le site de la communauté francophone Qt." (Présentation provenant de [[http://www.qtfr.org/|Qtfr]])

\\
\\

===== Le salon Programmation =====

Il existe un salon Jabber consacré à la programmation. Pour y accéder, il vous faudra un compte Jabber, ainsi que d’un logiciel de messagerie instantanée qui accepte le protocole Jabber/XMPP (Kopete, Gajim, Pidgin...).

Pour en savoir plus, rendez-vous sur [[http://news.jabberfr.org/?p=26|jabberfr.org]]
\\
\\ 

===== Les magazines =====

==== Developpez Magazine ====

Le site [[http://www.developpez.com|developpez.com]] a créé son magazine qu’il vous est possible de télécharger gratuitement au format PDF, ou de le recevoir sur votre boîte mail.

Il s’agit d’une forme enrichie de la newsletter que reçoivent les membres, vous y retrouverez de nombreux tutoriels, les nouveaux articles parus sur le site...

Bien sûr, il ne se concentre pas uniquement sur Linux, mais certains articles sont consacrés à notre environnement préféré.

Lien : [[http://magazine.developpez.com/]]
\\

==== Programmez ! ====

Mensuel destiné à tous les développeurs (que vous développiez en C/C++, Java, PHP...), vous y trouverez des articles sur les technologies à venir (par exemple PHP6, MySQL6 ...), mais également tout ce dont vous avez besoin pour mener à bien vos différents projets.

Lien [[http://www.programmez.com]] 
\\

==== Linux Developer's Journal ====

Un magazine consacré au développement sous notre environnement préféré.

Lien : [[http://linuxdevjournal.com/fr/ldj.html]] 
\\
\\

===== L'indispensable =====

Un wiki consacré à la bibliographie informatique (et plus particulièrement au développement informatique) ne serait complet sans parler des pages de manuel Linux. 

==== Définition de la commande man (Wikipedia) ====

  man est une commande disponible sur les systèmes d'exploitation de type Unix. Elle permet de visionner le manuel
  d'une commande.

Les pages de manuels sont divisées en plusieurs sections :

   1. Commandes utilisateur
   2. Appels système
   3. Fonctions de bibliothèque
   4. Fichiers spéciaux
   5. Formats de fichier
   6. Jeux
   7. Divers
   8. Administration système
   9. Interface du noyau Linux

Les sections qui vont nous intéresser le plus sont les sections 1 et 3 (respectivement //Commandes utilisateur// et //Fonctions de bibliothèque//). Vous me direz pourquoi la section 1. Tout simplement parce que les scripts shell sont des développements et font appel aux commandes UNIX/Linux de base.

==== Utilisation de la commande man ====

Pour voir le manuel d'une commande ou d'une fonction (nommée //commande// ci-après), il suffit de saisir dans une console :

  man commande

Par exemple, pour voir le manuel de la commande ls, il vous suffit de saisir :

  man ls


Dans le cas où vous connaissez également la section dans laquelle se trouve la commande dont vous voulez visualiser le manuel, vous pouvez saisir :

  man <num_section> commande

où <num_section> est le numéro de la section à laquelle appartient la commande //commande//.

Mais il arrive que nous ne connaissions pas exactement la commande à utiliser. Dans ce cas, vous pouvez employer l'option -k suivi d'un mot-clé (utilisé comme expression régulière). Par exemple :

  man -k printf

va rechercher toutes les descriptions et les pages de manuel pour les commandes et fonctions comportant //printf// dans leur nom ou dans leur description.

Pour plus d'informations sur la commande man, n'hésitez pas à consulter son manuel :

  man man
\\
\\

===== Conclusion =====

A travers ce wiki, tous les développeurs, étudiants en Informatique et toutes les personnes désirant se lancer dans la programmation pourront trouver une mine d'informations sur le sujet. 

Si vous connaissez d'autres sources (livres, sites ...) et que vous voulez les partager avec la communauté, n'hésitez pas à compléter ce Wiki. Le domaine du développement est large et je ne peux malheureusement tout connaître :-D