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

Blogs - Gadgets - Netzwerk - Consumer - Sicherheit - Entertainment - Technik - Kuriositäten - Emulatoren - iphone - Galerie Promis - Software-Downloads



10 Konzepte, dass jeder Software-Ingenieur muss wissen,

Jul 23, 2008 (15:02) | Bücher, Sicherheit, Software | Geschrieben von: viperEF

Die Zukunft der Software-Entwicklung geht es um gute Handwerker. Mit Infrastruktur wie Amazon Web Services und eine große Anzahl von grundlegenden Bibliotheken, nicht mehr hat ein Dorf, um ein gutes Stück Software.

In diesen Tagen, ein Paar von Ingenieuren, die wissen, was sie tun können komplette Systeme. In diesem Post, wir sprechen über Konzepte der Top 10 Software-Ingenieure wissen sollte, um erfolgreich

Der Erfolg eines Software-Ingenieur kennt und nutzt Design Patterns, Code aktiv refactors, schrieb Essays und religiöse Einheit der Suche nach Einfachheit. Jenseits des grundlegenden Methoden, Konzepte gibt es, dass eine gute Software-Ingenieure wissen. Sie über Programmiersprachen und Projekte - Wer sind keine Design Patterns, sondern große Bereiche, müssen Sie sich vertraut mit. Die 10 wichtigsten Konzepte sind:

  1. Schnittstellen
  2. Konventionen und Vorlagen
  3. Layers
  4. Die algorithmische Komplexität
  5. Hashing
  6. Caching
  7. Intersection
  8. Cloud Computing
  9. Security
  10. Relational Database

10. Relational Database

Relationale Datenbanken haben in letzter Zeit immer einen schlechten Ruf, weil sie kann nicht Maßstab auch auf die massive Unterstützung von Web-Services. Dies war jedoch eine der wichtigsten of Computing, dass hat uns mehr als zwei Jahrzehnten und bleibt für lange Zeit Relationale Datenbanken sind hervorragend für Order-Management-Systeme, Firmen-Datenbanken und P & L Daten.

Jeder Datensatz wird in einer Tabelle, die definiert die Art von Informationen. Die Datenbank bietet eine Möglichkeit zur Suche in die Protokolle über eine Query Language, SQL ist jetzt. Die Datenbank bietet eine Möglichkeit, korrelieren Informationen mehrere Tabellen.

Die Technik von Daten über die Normalisierung der richtige Weg ist, Partitionierung von Daten zwischen den Tabellen zu minimieren Daten Redundanz und maximieren die Geschwindigkeit der Erholung.

9. Sicherheit

Sicherheit ist ein breites Thema, die Authentifizierung, Autorisierung, und die Übermittlung von Informationen.

Authentifizierung ist die Überprüfung der Identität des Benutzers. Eine typische Web-Site Anweisungen für ein Passwort. Authentifizierung tritt in der Regel auf über SSL (Secure Socket Layer), eine Möglichkeit zur Übertragung von verschlüsselten Informationen über HTTP. Die Ermächtigung umfasst Genehmigungen und ist wichtig, in Unternehmen, insbesondere diejenigen, Workflows definieren. Die neu entwickelte OAuth Protokoll hilft Web-Services, damit Nutzer freien Zugang zu seinem privaten Informationen. So wie Flickr ermöglicht den Zugriff auf einzelne Bilder oder Gruppen von Datenfeldern.

Ein weiterer Bereich der Sicherheit ist der Schutz des Netzes. Dies bezieht sich auf Betriebssysteme, Konfiguration und Überwachung zu vereiteln Hacker. Nicht nur das Netzwerk verwundbar ist, hat jede Software. Firefox-Browser, den Verkehr gebracht als die sicherste, müssen Sie ständig die Patch-Code. So schreiben Sie sicheren Code für Ihr System erfordert das Verständnis der Details und mögliche Probleme.

8. Cloud Computing

In unserem letzten Post an Reach Durch Der Himmel Wolken der Berechnung wir davon gesprochen, wie Wolken of Computing verändert die Art, wie wir liefern umfangreiche Web-Anwendungen. Massively Parallel Computing billiger Wolke senkt die Kosten und die Zeit bis zur Markt.

Cloud Computing die sich aus dem parallelen Rechnens, ein Konzept, dass viele Probleme gelöst werden können, schneller Sie die Berechnungen parallel.

Dann kam der Algorithmen parallel Grid-Computing, die parallel zu den Berechnungen der Inaktivität Desktop. Eines der frühesten Beispiele ist SETI @ home-Projekt in Berkeley, die verwendet ungenutzte CPU-Zyklen zu Crunch Daten kommen aus dem Weltraum. Grid-Computing wird allgemein angenommen Finanzierung von Unternehmen, die werden, die von einem massiven Berechnungen Das Konzept der vernachlässigte Ressourcen, zusammen mit der Erhöhung der J2EE-Plattform, führte zu der Grundstoffe der Wolke Computing: Die Virtualisierung von Server-Anwendungen. Idee war die Ausführung von Anwendungen-on-Demand und verändern, was zur Verfügung steht, abhängig von der Tageszeit und Benutzer-Tätigkeit.

Heute, mehr lebendige Beispiel für Wolke Computing ist Amazon Web Services, ein Paket über API. Amazons Angebot umfasst eine Wolke-of-Service (EC2), eine Datenbank für die Speicherung und die Verarbeitung sehr umfangreicher Multimedia-Dateien (S3) ein Indexing Service (SimpleDB), und der Schwanz-of-Service (SQS). Diese ersten Blocks und Autonomie in einem noch nie da gewesenen Form, um große Rechenleistung, und ohne Zweifel das Beste ist noch zu kommen.

7. Intersection

Der Wettbewerb ist sehr Ingenieure sich verschlechtern, und understandibly so, weil das Gehirn nicht jonglieren viele Dinge auf einmal und in den Schulen linearen Denken ist hervorgehoben. Allerdings ist die Concurrency ist wichtig, in jedem modernen System.

Concurrence über die parallel ist, und zwar innerhalb der Anwendung. Die meisten Sprachen haben einen eingebauten in der modernen Konzept der gleichzeitigen; in Java, wird umgesetzt durch Threads.

Ein klassisches Beispiel hierfür ist die Zustimmung des Herstellers / Verbraucher, wenn der Erzeuger erzeugt Daten oder Aufgaben, und Orte, an denen die Fäden der Arbeitnehmer zu essen und zu laufen. Die Komplexität in concurrent Programmierung ergibt sich aus der Tatsache, Threads oft hat die Arbeit an der gemeinsamen Datenbank. Jeder Thread hat seine eigene Reihenfolge der Ausführung, aber der Zugang von gemeinsamen Daten. Eines der modernsten Concurrency-Bibliothek wurde von Doug Lea und jetzt ist der Kern von Java.

6. Caching

Nr. modernen Betriebssystem ohne ein Web-Cache, das ist ein in-Shop-Speicher ist eine Untermenge von Informationen normalerweise in der Datenbank gespeichert. Die Notwendigkeit für das Caching rührt aus der Tatsache, dass die Generation der Ergebnisse auf der Grundlage der Datenbank ist teuer. Zum Beispiel, wenn Sie eine Website haben, dass Listen von Büchern, die beliebten letzte Woche, dann würden Sie berechnen wollen, sobald diese Informationen und stellt sie im Cache. Die Anforderungen der Nutzer Suche nach Daten aus dem Cache statt Schlagen der Basis Daten und Regeneration der gleichen Informationen.

Caching wird mit einer Kosten. Nur einige Teilmengen von Informationen können gespeichert werden. Die häufigsten Beschneiden Strategie ist die Vertreibung der Fragen, die sich am wenigsten vor kurzem verwendet (LRU). Die prunning hat sich als effizient, um nicht zu schmälern das Tempo der Umsetzung.

Eine große Menge von modernen Web-Anwendungen, darunter Facebook, haben ein verteiltes System mit dem Namen zwischengespeichert Memcache, entwickelt von Brad Firzpatrick bei der Arbeit auf LiveJournal. Die Idee war die Schaffung eines Systems, das den Cache-Speicher, der freie Kapazitäten im Netz . Heute gibt es Memcache Bibliotheken für viele gängige Sprachen, darunter Java-und PHP.

5. Hashing

Die Idee hinter Hashing ist schnell Zugang zu den Daten. Wenn die Daten gespeichert werden in der Reihenfolge, Zeit zu finden, die Position ist proportional zur Größe der Liste. Für jedes Element, berechnet ein Hash-Zahl, die verwendet wird als Index in der Tabelle. Angesichts der Tatsache, eine gute Hash-Funktion, die sich die Daten gleichmäßig entlang der Tabelle finden Sie in der Follow-up-Zeit ist konstant. Raffination und Hashing ist es schwierig, sich mit Implementierungen, dass die Unterstützung HashTable Kollision Entschließung.

Neben den grundlegenden Daten Lagerung, Hashes sind auch wichtig, in verteilten Systemen. Die so genannte einheitliche Hash wird verwendet, um einen einheitlichen Datenaustausch zwischen Computern in einer Wolke von Datenbanken. Ein Geschmack von dieser Technik ist ein Teil der Google-Indexing Service, jeder URL ist Hash bestimmten Computer.

Hash-Funktionen können komplexe und anspruchsvolle, moderne Bibliotheken, sondern haben eine gute Default-Wert. Wichtig ist, wie Hashes funktionieren und wie sie zu tune für maximale Leistung profitieren.

4. Die algorithmische Komplexität

Es gibt nur eine Handvoll Sachen, die Ingenieure müssen wissen, über die algorithmische Komplexität. Wenn etwas ist O (n) ist linear in der Größe der Daten. O (n ^ 2) ist quadratischen . Mit dieser Notation, müssen Sie wissen, wie sich durch eine Liste ist O (n) und binäre Suche (durch eine geordnete Liste) ist log (n). Und die Einstufung der Posten hätte n n * log (n) Zeit.

Ihr Code (fast) nie über mehrere verschachtelte Schleife (eine Schleife innerhalb einer Schleife innerhalb einer Schleife). Die meisten der Code geschrieben heute sollten Hash-Tabellen, einfache Listen getrennt und Nested Loops.

Aufgrund der Fülle von hervorragenden Bibliotheken, wir sind nicht so konzentriert sich auf die Effizienz in diesen Tagen. Das ist in Ordnung, da kann passieren, Tonhöhe später, nach der sich das Recht Design.

Elegant Algorithmen und Leistung ist etwas, was wir sollten nicht außer Acht lassen. Schreib lesbar und kompakt Code hilft, um sicherzustellen, dass ihre Algorithmen sind sauber und einfach.

3. Layers

Schichten ist wahrscheinlich der einfachste Weg, um Software-Architektur. Erstens, er erhielt große Aufmerksamkeit, wenn John Lakos veröffentlicht sein Buch auf der Skala von C + +. Das Buch führt den Begriff der Schichten. Das Verfahren ist wie folgt. Für jedes Stück Software, die Anzahl der anderen basiert auf Das ist der Indikator für die, wie komplex die Komponente.

Lakos beibehalten eine gute Software folgt die Form einer Pyramide, dh, eine schrittweise Erhöhung der cummulative Komplexität der einzelnen Komponenten, aber nicht in die komplexe sofort. Mit anderen Worten, eine gute Software-System besteht Kleine wiederverwendbare Bausteine, die jeweils unter ihrer eigenen Verantwortung. In einem guten System, keine zyklische Abhängigkeiten zwischen den Komponenten vorhanden sind und das ganze System ist ein Stapel von Schichten von Funktionalität, die eine Pyramide.

Lakos der Arbeit war ein Vorläufer der vielen Entwicklungen in Software-Engineering, insbesondere Refactoring. Die Idee hinter Refactoring ist ständig Sculpt die Software, um sicherzustellen, IT'IS strukturell solide und flexibel. Ein weiterer wichtiger Beitrag wurde von Dr. Robert Martin von Object Mentor, der schrieb über dependecies azyklische und Architekturen

Unter den Werkzeugen, mit deren Hilfe Ingenieure Bewältigung der System-Architektur baut 101 Software, die von Headway, und SA4J entwickelt von meinem ehemaligen Unternehmens-, Labor-Informationen, und jetzt auch von IBM.

2. Konventionen und Vorlagen

Namenskonventionen und grundlegende Vorlagen sind die meisten übersehen Muster von Software, aber wahrscheinlich der mächtigste.

Lassen Sie die Namenskonventionen der Automatisierungs-Software. Zum Beispiel, Java Beans-Rahmen basiert auf einem einfachen Konvention zu benennen Absorbentien und Setter. Und in del.icio.us kanonische URL: http://del.icio.us/tag/software nehmen Sie die Benutzer auf eine Seite, die alle Elemente getaggt Software.

Viele Social Software mit Namenskonventionen in einer Art ähnlich zum Beispiel, wenn Sie Ihren Benutzernamen johnsmith ist dann wahrscheinlich Ihren Avatar ist johnsmith.jpg und seine RSS-Feed ist johnsmith.xml.

Konventionen Namen werden auch in den Prüfungen, zum Beispiel, JUnit erkennt automatisch alle Methoden der Art, die mit dem Präfix test.

Vorlagen sind C + + oder Java-Sprachelemente. Wir sprechen von Template-Dateien, die Variablen enthalten, und lassen Sie Objekte verbindlich, die Entschließung zu entnehmen sind, und das Ergebnis für den Kunden.

Cold Fusion ist eine der ersten zu popularisieren die Vorlagen für Web-Anwendungen. Java gefolgt mit JSP, Apache und vor kurzem entwickelt eine praktische Allzweck-Vorlagen für Java genannt Velocity. PHP kann als seine eigene Template-Engine, welche die Rolle eval (seien Sie vorsichtig mit Sicherheit). Für die Programmierung XML-Standard ist die Verwendung von XSL-Templates zu machen.

Von der Erzeugung von HTML-Seiten für das Senden von E-Mails standardisierte Unterstützung, Personal Unterstützung sind unerlässlich in jeder modernen System-Software.

1. Schnittstellen

Das wichtigste Konzept in der Software ist die Schnittstelle. Jedes gute Software ist das Modell eines realen (oder imaginären) System. Verstehen Sie, wie nach Muster das Problem in Bezug auf Gute und einfache Schnittstellen ist von entscheidender Bedeutung. Viele Systeme leiden unter den Extremen: clumped, lange Code Abstraktionen mit wenig oder übermäßig entwickelt ein System mit unnötiger Komplexität und ohne die Verwendung von Code.

Unter den vielen Büchern, Agile Programming von Dr. Robert Martin betont, sich auf die Korrektur der Modellierung Schnittstellen.

Erstens, niemals fügen Sie die Methoden, der nützlich sein könnte in der Zukunft. Ist minimalistisch, so dass so wenig wie möglich. Zweitens, die nicht davor zurückschrecken, heute zugeben, dass das, was Sie haben gestern war nicht richtig. Seien Sie bereit, die Dinge ändern. Drittens, etwas Geduld und genießen Sie den Vorgang abzuschließen. Bis dahin, halten Iteration und nicht gelöst.

Fazit

Moderne Software-Engineering ist anspruchsvoll und kraftvoll, mit jahrzehntelanger Erfahrung, Millionen von Zeilen Code und Unterstützung von unprecidented Zugriff auf die Wolke Computing. Heute, nur ein paar intelligente Menschen können Software, die zuvor die erforderlichen Anstrengungen, die Dutzende von Menschen. Aber ein guter Handwerker muss noch wissen, welche Werkzeuge man benutzen, wann und warum.

In diesem Beitrag haben wir diskutiert Konzepte, die für Software-Ingenieure. Und jetzt sagen Sie uns bitte, was Sie in diese Liste. Teilen Sie Ihre Erinnerungen mit uns finden Sie es für unverzichtbar Konzepte in seiner täglichen Fahrten Software-Engineering.

Magen Kredit: cbtplanet.com

Via: ReadWriteWeb

Aktie:
  • e-mail
  • Meneame
  • Digg
  • MisterWong
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • BarraPunto
  • Live
  • Slashdot
  • Technorati
  • TwitThis

Verwandte Artikel:

Schreiben Sie einen Kommentar





Tags:
Separate einzelnen Tags durch Kommas