-= [EdadFutura] =- v.6.0 - [beta]

Blogs - Gadgets - Mise en réseau - des consommateurs - Sécurité - Entertainment - Technologie - Curiosités - Emulateurs - Iphone - Galeria Famosas - Téléchargements de logiciels

Entries Comments



10 concepts que chaque ingénieur doit savoir

23 juillet 2008 (15:02) | Livres, Sécurité, Software | Rédigé par: viperEF

L'avenir du développement de logiciels est sur de bons artisans. Avec l'infrastructure comme Amazon Web Services, et un grand nombre de bibliothèques de base, n'a plus un village pour construire un bon morceau de logiciel.

Ces jours-ci, un couple d'ingénieurs qui savent ce qu'ils font peut fournir des systèmes complets. A ce poste, on parle de concepts des 10 ingénieurs logiciels ont besoin de savoir pour obtenir

Le succès d'un ingénieur logiciel connaît et utilise des modèles de conception, code refactors activement à écrire des essais et de recherche de l'unité religieuse de simplicité. Au-delà des méthodes de base, il ya des concepts que de bons ingénieurs en logiciel savoir. Transcender ces langages de programmation et des projets - qui ne sont pas des modèles de conception, mais plutôt de nombreux domaines que vous avez besoin de se familiariser avec. Le top 10 des concepts sont:

  1. Interfaces
  2. Conventions et modèles
  3. Couches
  4. Complexité algorithmique
  5. Hashing
  6. Caching
  7. Concurrency
  8. Cloud Computing
  9. Sécurité
  10. Relational Database

10. Relational Database

Bases de données relationnelles ont été récemment faire une mauvaise réputation, car ils ne peuvent bien s'adapter à l'appui massif des services Web. Mais cela a été l'un des la plupart des informations de base qui nous a conduit pendant deux décennies et le restera pour longtemps Bases de données relationnelles sont excellentes pour la commande des systèmes de gestion de bases de données et P & L de données.

Dans chaque enregistrement est ajouté à une table qui définit le type d'informations. La base de données offre un moyen de rechercher les documents en utilisant un langage de requête SQL aujourd'hui. La base de données offre un moyen de corréler l'information plusieurs tables.

La technique de normalisation des données est la manière correcte de partitionnement des données entre les tables afin de réduire au minimum la redondance des données et de maximiser la vitesse de récupération.

9. Sécurité

La sécurité est un vaste sujet qui englobe l'authentification, l'autorisation, et la transmission de l'information.

L'authentification est la vérification de l'identité de l'utilisateur. En général, le site Web d'instructions pour un mot de passe. L'authentification se produit généralement sur le protocole SSL (Secure Socket Layer), une façon de transmettre des informations cryptées sur HTTP. L'autorisation porte sur les permis et est importante dans les systèmes d'entreprise, en particulier celles qui définissent des workflows. Les récemment développé OAuth protocole aide de services Web pour permettre aux utilisateurs un accès gratuit à ses informations privées. Alors comme Flickr permet d'accéder à des photos individuelles ou les ensembles de données.

Une autre zone de sécurité est de protéger le réseau. Il s'agit de systèmes d'exploitation, la configuration et de surveillance pour contrecarrer les pirates informatiques. Non seulement du réseau est vulnérable, tout logiciel. Navigateur Firefox, qui sont commercialisés comme les plus sûrs, il a continuellement patch pour le code. Pour écrire du code sécurisé pour votre système il faut comprendre les détails et les problèmes potentiels.

8. Cloud Computing

Dans notre récent post Getting Through Heaven Cloud computing a parlé de la façon dont les nuages de calcul est en train de changer la façon dont nous fournissons à grande échelle des applications Web. Massively parallel computing bon nuage de réduire les coûts et le temps de marché.

Cloud computing a augmenté de calcul parallèle, un concept que de nombreux problèmes peuvent être résolus plus rapidement lancer les calculs en parallèle.

l'issue des algorithmes parallèles sont venus l'informatique en grille, qui était parallèle à l'inactivité, les calculs de bureau. L'un des premiers exemples est du projet SETI @ home à Berkeley, qui utilise les cycles CPU rechange à croquer les données provenant de l'espace. Grid computing est largement adopté par les sociétés financières, qui vont des risques énormes calculs Le concept de sous-ressources, avec l'augmentation de la plate-forme J2EE, a donné naissance à l'ancêtre du nuage de calcul: la virtualisation des applications serveur. idée a été à l'exécution d'applications à la demande et de changer ce qui est disponible, en fonction de l'heure et de l'activité de l'utilisateur.

Aujourd'hui, plus bel exemple en est le calcul de nuage Amazon Web Services, un paquet disponible à travers l'API. Amazon offre comprend un nuage service (EC2), une base de données pour le stockage et le service des grands dossiers de médias (S3) service d'indexation (SimpleDB), et la queue de Service (SQS). Ces premiers blocs déjà habiliter une manière sans précédent de faire de l'informatique à grande échelle, et sûrement le meilleur est encore à venir.

7. Concurrency

La concurrence est très mauvaise pour les ingénieurs et les understandibly est parce que le cerveau ne jongler avec beaucoup de choses à la fois, et dans les écoles, l'accent est mis sur la pensée linéaire. Toutefois, le la participation est importante dans tout système moderne.

Concurrence sur le parallèle, mais dans l'application. La plupart des langues modernes sont construits sur une notion de concurrence en Java, est mis en œuvre par Threads.

Un exemple classique est la présence de producteurs / consommateurs, lorsque le producteur génère des données ou des tâches, et les endroits où les fils de travailleurs de manger et de courir. La complexité de la programmation de la concurrence vient du fait souvent de fil à travailler sur la base de données commune. Chaque thread possède sa propre séquence d'exécution, mais accède à des données communes. L'un des plus sophistiqués concurrency bibliothèques a été mis au point par Doug Lea et fait maintenant partie de la base de Java.

6. Caching

N ° web moderne système fonctionne sans un cache, qui est un magasin en mémoire que c'est un sous-ensemble d'informations généralement stockées dans la base de données. La nécessité d'une cache dans le fait que la production de résultats de base de données est coûteux. Par exemple, si vous avez un site web qui liste les livres qui ont été un succès la semaine dernière, vous voulez calculer une fois cette information et la mettre en cache. Les exigences des utilisateurs de données de recherche de la mémoire cache au lieu de frapper la base données et de la régénération de la même information.

La mise en cache est livré avec un coût. Seuls certains sous-ensembles d'informations stockées dans la mémoire. Le plus souvent, la stratégie est de taille pour expulser les éléments qui sont les moins récemment utilisé (LRU). Le prunning doit être efficace, de ne pas ralentir la demande.

Un grand nombre d'applications Web modernes, y compris sur Facebook, ont un système de cache distribué appelé Memcached, développé par Brad Firzpatrick quand on travaille sur LiveJournal. L'idée était de créer un système qui utilise la mémoire cache de capacité dans le réseau . Aujourd'hui, Memcached bibliothèques populaires pour de nombreux langages tels que Java et PHP.

5. Hashing

L'idée derrière le hachage est l'accès rapide aux données. Si les données sont stockées dans l'ordre, le temps de trouver l'élément est proportionnelle à la taille de la liste. Pour chaque élément, une fonction de hachage calcule un nombre qui est utilisé comme un indice dans le tableau. Étant donné une bonne fonction de hachage qui se répand de façon uniforme le long de la table de données, voir le suivi du temps est constante. Le perfectionnement de hachage est difficile et pour faire face HashTable implémentations de soutenir la résolution des collisions.

Au-delà de la base de stockage de données, tables de hachage sont aussi importantes dans les systèmes distribués. Le soi-disant uniforme de hachage est utilisée pour répartir uniformément les données entre des ordinateurs dans un nuage de bases de données. Un avant-goût de cette technique fait partie du service d'indexation de Google, à chaque URL est haché à l'ordinateur en particulier.

Les fonctions de hachage peut être complexe et sophistiquée, moderne, de bibliothèques, mais ils ont une bonne valeur par défaut. La chose importante est de savoir comment le travail de hachage et la façon de régler les prestations pour des performances maximales.

4. Complexité algorithmique

Il ya seulement une poignée de choses que les ingénieurs doivent savoir sur la complexité algorithmique. Si quelque chose est O (n) est linéaire dans la taille des données. O (n ^ 2) est du second degré . L'utilisation de cette notation, il faut savoir que la recherche par le biais d'une liste est O (n) et des binaires de recherche (par le biais d'une liste triée) est log (n). Et de tri de n éléments se n * log (n).

Votre code (presque) jamais avoir de multiples boucles imbriquées (une boucle dans une boucle dans une boucle). La plupart du code écrit aujourd'hui doit utiliser hashtables simples listes séparément et boucles imbriquées.

En raison de l'abondance d'excellentes bibliothèques, nous ne sommes pas aussi porté sur l'efficacité de ces journées. C'est très bien, comme le réglage peut se produire plus tard, après avoir obtenu le droit de conception.

Elegant algorithmes et la performance est quelque chose que nous ne devrions pas ignorer. De rédaction et de la lisibilité du code compact permet de vous assurer que vos algorithmes sont propres et simples.

3. Couches

Couche est probablement le moyen le plus facile de discuter de l'architecture logicielle. Tout d'abord, il a reçu une attention particulière lorsque John Lakos publié son livre sur le grand C + +. Ce livre introduit la notion de couches. La méthode est la suivante. Pour chaque composant logiciel, le nombre d'autres éléments, est basé C'est l'indicateur de la complexité de la composante.

Lakos valoir un bon logiciel suit la forme d'une pyramide, c'est-à-dire une augmentation progressive de la complexité cumulative de chaque composant, mais pas dans le complexe immédiatement. En d'autres termes, un bon logiciel système Les petits blocs réutilisables, chacun apportant sa propre responsabilité. Dans un bon système, pas de dépendances entre les composants cycliques sont présents et l'ensemble du système est une pile de couches de fonctionnalité, de former une pyramide.

Lakos du travail a été un précurseur de nombreux développements en génie logiciel, en particulier Refactoring. L'idée derrière la refactorisation continue de veiller à ce logiciel de sculpture it'is structure solide et flexible. Une autre contribution importante a été faite par le Dr Robert Martin de Object Mentor, qui a beaucoup écrit sur dependecies acyclique et architectures

Parmi les outils qui aident les ingénieurs à traiter de l'architecture du système est construit 101 développé par Headway Software et SA4J développé par mon ancienne société, de l'information de laboratoire, et a maintenant IBM.

2. Conventions et modèles

Naming conventions et les modèles de base sont les plus négligés de logiciels modèles, mais probablement le plus puissant.

Autoriser les conventions de nommage des logiciels d'automatisation. Par exemple, les Java Beans cadre repose sur une simple convention de nommage pour les getters et setters. URL canonique et dans del.icio.us: http://del.icio.us/tag/software l'utilisateur vers une page qui a marqué tous les points de logiciels.

Beaucoup de conventions de dénomination sociale de logiciels utilisés de façon similaire, par exemple, si votre nom d'utilisateur est alors probable johnsmith votre avatar johnsmith.jpg et de flux RSS est johnsmith.xml.

Naming conventions sont également utilisés dans les essais, par exemple JUnit reconnaît automatiquement toutes les méthodes de la classe qui commence par préfixe de test.

Les modèles sont de C + + ou Java langage. Nous parlons ici de modèle de fichiers qui contiennent des variables, et ensuite l'objet contraignant, la résolution et de faire le résultat pour le client.

Cold Fusion est un des premiers à populariser les modèles pour les applications web. Java suivi avec JSP, Apache et, plus récemment développé des modèles à portée de la main d'usage général pour Java appelé Velocity. PHP peut être utilisé comme son propre moteur de template, qui soutient la fonction eval (attention à la sécurité). Pour la programmation XML standard est d'utiliser les modèles XSL.

De la génération des pages HTML pour envoyer des emails standard du personnel de soutien sont une aide essentielle dans n'importe quel logiciel.

1. Interfaces

Le concept le plus important dans le logiciel est l'interface. Tout bon logiciel est un modèle d'un réel (ou imaginaire) du système. Comprendre la façon de modéliser le problème en termes bonne et simple interface est indispensable. Beaucoup de systèmes souffrent de l'extrême: agglutiné, longue avec peu de code de l'abstraction, ou un système conçu avec trop de complexité inutile et sans utiliser de code.

Parmi les nombreux livres, Agile Programming par le Dr Robert Martin a souligné à se concentrer sur la modélisation correcte interfaces.

Tout d'abord, ne jamais ajouter des méthodes qui pourraient être utiles dans l'avenir. Être minimaliste, en laissant aussi peu que possible. Deuxièmement, il ne faut pas avoir peur de reconnaître aujourd'hui que ce que vous avez fait hier, c'est pas juste. Soyez prêt à changer les choses. Troisièmement, il faut être patient et profiter de ce processus. D'ici là, gardez itération et ne permettent pas de résoudre.

Conclusion

Modernes du génie logiciel est complexe et puissant, avec des décennies d'expérience, des millions de lignes de code et de soutenir l'accès à des nuages unprecidented informatique. Aujourd'hui, seul un couple de gens intelligents peuvent créer un logiciel qui exigeait des efforts de dizaines de personnes. Mais un bon artisan a toujours besoin de savoir quels outils utiliser, quand et pourquoi.

A ce poste, nous avons discuté des concepts qui sont essentiels pour des ingénieurs en logiciel. Maintenant, dites-nous s'il vous plaît, ce qui ajoute à cette liste. Partagez avec nous, vous trouverez qu'il est essentiel de concepts dans leurs déplacements quotidiens en génie logiciel.

Magen crédit cbtplanet.com

Via: ReadWriteWeb

Share:
  • e-mail
  • Meneame
  • Digg
  • MisterWong
  • del.icio.us
  • Facebook
  • Google
  • BarraPunto
  • Live
  • Technorati
  • TwitThis
  • E-mail this story to a friend!
  • MySpace

Articles connexes:

Articles connexes:

Ecrire un commentaire





Tags:
Séparez les différents tags par des virgules