Categories
Cloud DevOps History Software Engineering

Agile Manifesto – The Manifesto for Agile Software Development

See also: Agile software development and DevOps

The Manifesto for Agile Software Development

Agile software development values

“Based on their combined experience of developing software and helping others do that, the seventeen signatories to the manifesto proclaimed that they value:[5]” (WP)

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

That is to say, the items on the left are valued more than the items on the right.

As Scott Ambler elucidated:[21]

  • Tools and processes are important, but it is more important to have competent people working together effectively.
  • Good documentation is useful in helping people to understand how the software is built and how to use it, but the main point of development is to create software, not documentation.
  • A contract is important but is no substitute for working closely with customers to discover what they need.
  • A project plan is important, but it must not be too rigid to accommodate changes in technology or the environment, stakeholders’ priorities, and people’s understanding of the problem and its solution.

Some of the authors formed the Agile Alliance, a non-profit organization that promotes software development according to the manifesto’s values and principles. Introducing the manifesto on behalf of the Agile Alliance, Jim Highsmith said,

The Agile movement is not anti-methodology, in fact many of us want to restore credibility to the word methodology. We want to restore a balance. We embrace modeling, but not in order to file some diagram in a dusty corporate repository. We embrace documentation, but not hundreds of pages of never-maintained and rarely-used tomes. We plan, but recognize the limits of planning in a turbulent environment. Those who would brand proponents of XP or SCRUM or any of the other Agile Methodologies as “hackers” are ignorant of both the methodologies and the original definition of the term hacker.— Jim Highsmith, History: The Agile Manifesto[22]

Agile software development principles

The Manifesto for Agile Software Development is based on twelve principles:[23]” (WP)

  1. Customer satisfaction by early and continuous delivery of valuable software.
  2. Welcome changing requirements, even in late development.
  3. Deliver working software frequently (weeks rather than months)
  4. Close, daily cooperation between business people and developers
  5. Projects are built around motivated individuals, who should be trusted
  6. Face-to-face conversation is the best form of communication (co-location)
  7. Working software is the primary measure of progress
  8. Sustainable development, able to maintain a constant pace
  9. Continuous attention to technical excellence and good design
  10. Simplicity—the art of maximizing the amount of work not done—is essential
  11. Best architectures, requirements, and designs emerge from self-organizing teams
  12. Regularly, the team reflects on how to become more effective, and adjusts accordingly

Categories

Sources:

Fair Use Sources:

Categories
Software Engineering

ISP – Interface segregation principle of SOLID object-oriented design

In the field of software engineering, the interface-segregation principle (ISP) states that no client should be forced to depend on methods it does not use.[1] ISP splits interfaces that are very large into smaller and more specific ones so that clients will only have to know about the methods that are of interest to them. Such shrunken interfaces are also called role interfaces.[2] ISP is intended to keep a system decoupled and thus easier to refactor, change, and redeploy. ISP is one of the five SOLID principles of object-oriented design, similar to the High Cohesion Principle of GRASP.[3]” (WP)

SOLID
Principles of Object-Oriented Design
SSingle responsibility principle – SRP
OOpen–closed
LLiskov substitution principle – LSP
IInterface segregation principle – ISP
DDependency inversion – DI

” (WP)

Sources:

Fair Use Sources:

Categories
Software Engineering

LSP- Liskov substitution principle of SOLID object-oriented design

” (WP)

Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e., an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of the program (correctness, task performed, etc.). More formally, the Liskov substitution principle (LSP) is a particular definition of a subtyping relation, called (strongbehavioral subtyping, that was initially introduced by Barbara Liskov in a 1987 conference keynote address titled Data abstraction and hierarchy. It is a semantic rather than merely syntactic relation, because it intends to guarantee semantic interoperability of types in a hierarchy, object types in particular. Barbara Liskov and Jeannette Wing described the principle succinctly in a 1994 paper as follows:[1]

Subtype Requirement: Let {\displaystyle \phi (x)}\phi (x) be a property provable about objects {\displaystyle x}x of type T. Then {\displaystyle \phi (y)}{\displaystyle \phi (y)} should be true for objects {\displaystyle y}y of type S where S is a subtype of T.

In the same paper, Liskov and Wing detailed their notion of behavioral subtyping in an extension of Hoare logic, which bears a certain resemblance to Bertrand Meyer‘s design by contract in that it considers the interaction of subtyping with preconditionspostconditions and invariants.

SOLID
Principles of Object-Oriented Design
SSingle responsibility principle – SRP
OOpen–closed
LLiskov substitution principle – LSP
IInterface segregation principle – ISP
DDependency inversion – DI

” (WP)

Sources:

Fair Use Sources:

Categories
Software Engineering

Open–closed principle of SOLID object-oriented design

” (WP)

In object-oriented programming, the open–closed principle states “software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification“;[1] that is, such an entity can allow its behaviour to be extended without modifying its source code.

The name open–closed principle has been used in two ways. Both ways use generalizations (for instance, inheritance or delegate functions) to resolve the apparent dilemma, but the goals, techniques, and results are different.

Open–closed principle is one of the five SOLID principles of object-oriented design.

SOLID
Principles of Object-Oriented Design
SSingle responsibility principle – SRP
OOpen–closed
LLiskov substitution principle – LSP
IInterface segregation principle – ISP
DDependency inversion – DI

” (WP)

Sources:

Fair Use Sources:

Categories
Software Engineering

SRP – Single-responsibility principle of SOLID object-oriented design

“The single-responsibility principle (SRP) is a computer-programming principle that states that every moduleclass or function in a computer program should have responsibility over a single part of that program’s functionality, and it should encapsulate that part. All of that module, class or function’s services should be narrowly aligned with that responsibility.[1]” (WP)

Robert C. Martin, the originator of the term, expresses the principle as, “A class should have only one reason to change,”[1] although, because of confusion around the word “reason” he more recently stated “This principle is about people.”[2]” (WP)

SOLID
Principles of Object-Oriented Design
SSingle responsibility principle – SRP
OOpen–closed
LLiskov substitution principle – LSP
IInterface segregation principle – ISP
DDependency inversion – DI

” (WP)

Sources:

Fair Use Sources:

Categories
Software Engineering

SOLID (object-oriented design)

This article is about the SOLID principles of object-oriented programming. For the fundamental state of matter, see Solid. For other uses, see Solid (disambiguation).

SOLID
Principles of Object-Oriented Design
SSingle responsibility principle – SRP
OOpen–closed
LLiskov substitution principle – LSP
IInterface segregation principle – ISP
DDependency inversion – DI

“In object-oriented computer programmingSOLID is a mnemonic acronym for five design principles intended to make software designs more understandable, flexible, and maintainable. The principles are a subset of many principles promoted by American software engineer and instructor Robert C. Martin,[1][2][3] first introduced in his 2000 paper Design Principles and Design Patterns.[2][4]” (WP)

The SOLID concepts are:

The SOLID acronym was introduced later, around 2004, by Michael Feathers.[11]

“Although the SOLID principles apply to any object-oriented design, they can also form a core philosophy for methodologies such as agile development or adaptive software development.[3]” (WP)

See also

References

  1. ^ Robert C. Martin“Principles Of OOD”butunclebob.com. Retrieved 2014-07-17.. (Note the reference to “the first five principles”, although the acronym is not used in this article.) Dates back to at least 2003.
  2. a b Robert C. Martin. “Getting a SOLID start”objectmentor.com. Retrieved 2013-08-19.
  3. a b Sandi Metz (May 2009). “SOLID Object-Oriented Design”. Retrieved 2019-08-13. Talk given at the 2009 Gotham Ruby Conference.
  4. a b c Martin, Robert C. (2000). “Design Principles and Design Patterns” (PDF). Archived from the original (PDF) on 2015-09-06.
  5. ^ “Single Responsibility Principle” (PDF). objectmentor.com. Archived from the original (PDF) on 2 February 2015.
  6. ^ Martin, Robert C. (2003). Agile Software Development, Principles, Patterns, and Practices. Prentice Hall. p. 95. ISBN 978-0135974445.
  7. ^ “Open/Closed Principle” (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.
  8. ^ “Liskov Substitution Principle” (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.
  9. ^ “Interface Segregation Principle” (PDF). objectmentor.com. 1996. Archived from the original (PDF) on 5 September 2015.
  10. ^ “Dependency Inversion Principle” (PDF). objectmentor.com. Archived from the original (PDF) on 5 September 2015.
  11. ^ Martin, Robert (2018). Clean Architecture: A Craftsman’s Guide to Software Structure and Design. p. 58. ISBN 9780134494166.

Categories

Sources:

Fair Use Sources:

Categories
Software Engineering

DI – Dependency inversion principle of SOLID object-oriented design

“In object-oriented design, the dependency inversion principle is a specific form of loosely coupling software modules. When following this principle, the conventional dependency relationships established from high-level, policy-setting modules to low-level, dependency modules are reversed, thus rendering high-level modules independent of the low-level module implementation details. The principle states:[1]” (WP)

  1. High-level modules should not depend on low-level modules. Both should depend on abstractions (e.g., interfaces).
  2. Abstractions should not depend on details. Details (concrete implementations) should depend on abstractions.
SOLID
Principles of Object-Oriented Design
SSingle responsibility principle – SRP
OOpen–closed
LLiskov substitution principle – LSP
IInterface segregation principle – ISP
DDependency inversion – DI

“By dictating that both high-level and low-level objects must depend on the same abstraction, this design principle inverts the way some people may think about object-oriented programming.[2]” (WP)

“The idea behind points A and B of this principle is that when designing the interaction between a high-level module and a low-level one, the interaction should be thought of as an abstract interaction between them. This not only has implications on the design of the high-level module, but also on the low-level one: the low-level one should be designed with the interaction in mind and it may be necessary to change its usage interface.” (WP)

“In many cases, thinking about the interaction in itself as an abstract concept allows the coupling of the components to be reduced without introducing additional coding patterns, allowing only a lighter and less implementation-dependent interaction schema.” (WP)

“When the discovered abstract interaction schema(s) between two modules is/are generic and generalization makes sense, this design principle also leads to the following dependency inversion coding pattern.” (WP)

Traditional layers pattern

In conventional application architecture, lower-level components (e.g., Utility Layer) are designed to be consumed by higher-level components (e.g., Policy Layer) which enable increasingly complex systems to be built. In this composition, higher-level components depend directly upon lower-level components to achieve some task. This dependency upon lower-level components limits the reuse opportunities of the higher-level components.[1]

Traditional Layers Pattern.png

The goal of the dependency inversion pattern is to avoid this highly coupled distribution with the mediation of an abstract layer, and to increase the re-usability of higher/policy layers.

Dependency inversion pattern

With the addition of an abstract layer, both high- and lower-level layers reduce the traditional dependencies from top to bottom. Nevertheless, the “inversion” concept does not mean that lower-level layers depend on higher-level layers. Both layers should depend on abstractions that draw the behavior needed by higher-level layers.

DIPLayersPattern.png

In a direct application of dependency inversion, the abstracts are owned by the upper/policy layers. This architecture groups the higher/policy components and the abstractions that define lower services together in the same package. The lower-level layers are created by inheritance/implementation of these abstract classes or interfaces.[1]

The inversion of the dependencies and ownership encourages the re-usability of the higher/policy layers. Upper layers could use other implementations of the lower services. When the lower-level layer components are closed or when the application requires the reuse of existing services, it is common that an Adapter mediates between the services and the abstractions.

Dependency inversion pattern generalization

In many projects the dependency inversion principle and pattern are considered as a single concept that should be generalized, i.e., applied to all interfaces between software modules. There are at least two reasons for that:

  1. It is simpler to see a good thinking principle as a coding pattern. Once an abstract class or an interface has been coded, the programmer may say: “I have done the job of abstraction”.
  2. Because many unit testing tools rely on inheritance to accomplish mocking, the usage of generic interfaces between classes (not only between modules when it makes sense to use generality) became the rule.

If the mocking tool used relies only on inheritance, it may become necessary to widely apply the dependency inversion pattern. This has major drawbacks:

  1. Merely implementing an interface over a class isn’t sufficient to reduce coupling; only thinking about the potential abstraction of interactions can lead to a less coupled design.
  2. Implementing generic interfaces everywhere in a project makes it harder to understand and maintain. At each step the reader will ask themself what are the other implementations of this interface and the response is generally: only mocks.
  3. The interface generalization requires more plumbing code, in particular factories that generally rely on a dependency-injection framework.
  4. Interface generalization also restricts the usage of the programming language.

Generalization restrictions

The presence of interfaces to accomplish the Dependency Inversion Pattern (DIP) has other design implications in an object-oriented program:

  • All member variables in a class must be interfaces or abstracts.
  • All concrete class packages must connect only through interface or abstract class packages.
  • No class should derive from a concrete class.
  • No method should override an implemented method.[1]
  • All variable instantiation requires the implementation of a creational pattern such as the factory method or the factory pattern, or the use of a dependency-injection framework.

Interface mocking restrictions

Using inheritance-based mocking tools also introduces restrictions:

  • Static externally visible members should systematically rely on dependency injection making them far harder to implement.
  • All testable methods should become an interface implementation or an override of an abstract definition.

Future directions

Principles are ways of thinking. Patterns are common ways to solve problems. Coding patterns may be missing programming language features.

  • Programming languages will continue to evolve to allow them to enforce stronger and more precise usage contracts in at least two directions: enforcing usage conditions (pre-, post- and invariant conditions) and state-based interfaces. This will probably encourage and potentially simplify a stronger application of the dependency inversion pattern in many situations.
  • More and more mocking tools now use dependency-injection to solve the problem of replacing static and non virtual members. Programming languages will probably evolve to generate mocking-compatible bytecode. One direction will be to restrict the usage of non-virtual members. The other one will be to generate, at least in test situations, bytecode allowing non-inheritance based mocking.

Implementations

Two common implementations of DIP use similar logical architecture but with different implications.

A direct implementation packages the policy classes with service abstracts classes in one library. In this implementation high-level components and low-level components are distributed into separate packages/libraries, where the interfaces defining the behavior/services required by the high-level component are owned by, and exist within the high-level component’s library. The implementation of the high-level component’s interface by the low-level component requires that the low-level component package depend upon the high-level component for compilation, thus inverting the conventional dependency relationship.

Dependency inversion.png

Figures 1 and 2 illustrate code with the same functionality, however in Figure 2, an interface has been used to invert the dependency. The direction of dependency can be chosen to maximize policy code reuse, and eliminate cyclic dependencies.

In this version of DIP, the lower layer component’s dependency on the interfaces/abstracts in the higher-level layers makes re-utilization of the lower layer components difficult. This implementation instead ″inverts″ the traditional dependency from top-to-bottom to the opposite, from bottom-to-top.

A more flexible solution extracts the abstract components into an independent set of packages/libraries:

DIPLayersPattern v2.png

The separation of each layer into its own package encourages re-utilization of any layer, providing robustness and mobility.[1]

Examples

Genealogical module

A genealogical system may represent relationships between people as a graph of direct relationships between them (father-son, father-daughter, mother-son, mother-daughter, husband-wife, wife-husband, etc.). This is very efficient and extensible, as it is easy to add an ex-husband or a legal guardian.

But some higher-level modules may require a simpler way to browse the system: any person may have children, parents, siblings (including half-brothers and -sisters or not), grandparents, cousins, and so on.

Depending on the usage of the genealogical module, presenting common relationships as distinct direct properties (hiding the graph) will make the coupling between a higher-level module and the genealogical module much lighter and allow one to change the internal representation of the direct relationships completely without any effect on the modules using them. It also permits embedding exact definitions of siblings or uncles in the genealogical module, thus enforcing the single responsibility principle.

Finally, if the first extensible generalized graph approach seems the most extensible, the usage of the genealogical module may show that a more specialized and simpler relationship implementation is sufficient for the application(s) and helps create a more efficient system.

In this example, abstracting the interaction between the modules leads to a simplified interface of the lower-level module and may lead to a simpler implementation of it.

Remote file server client

Imagine you have to implement a client to a remote file server (FTP, cloud storage …). You may think of it as a set of abstract interfaces:

  1. Connection/Disconnection (a connection persistence layer may be needed)
  2. Folder/tags creation/rename/delete/list interface
  3. File creation/replacement/rename/delete/read interface
  4. File searching
  5. Concurrent replacement or delete resolution
  6. File history management …

If both local files and remote files offers the same abstract interfaces, any high-level module using local files and fully implementing the dependency inversion pattern will be able to access local and remote files indiscriminately.

Local disk will generally use folder, remote storage may use folder and/or tags. You have to decide how to unify them if possible.

On remote file we may have to use only create or replace: remote files update do not necessarily make sense because random update is too slow comparing local file random update and may be very complicated to implement). On remote file we may need partial read and write (at least inside the remote file module to allow download or upload to resume after a communication interruption), but random read isn’t adapted (except if a local cache is used).

File searching may be pluggable : file searching can rely on the OS or in particular for tag or full text search, be implemented with distinct systems (OS embedded, or available separately).

Concurrent replacement or delete resolution detection may impact the other abstract interfaces.

When designing the remote file server client for each conceptual interface you have to ask yourself the level of service your high level modules require (not necessary all of them) and not only how to implement the remote file server functionalities but maybe how to make the file services in your application compatible between already implemented file services (local files, existing cloud clients) and your new remote file server client.

Once you have designed the abstract interfaces required, your remote file server client should implement these interfaces. And because you probably restricted some local functionalities existing on local file (for example file update), you may have to write adapters for local or other existing used remote file access modules each offering the same abstract interfaces. You also have to write your own file access enumerator allowing to retrieve all file compatible systems available and configured on your computer.

Once you do that, your application will be able to save its documents locally or remotely transparently. Or simpler, the high level module using the new file access interfaces can be used indistinctly in local or remote file access scenarios making it reusable.

Remark: many OSes have started to implement these kind of functionalities and your work may be limited to adapt your new client to this already abstracted models.

In this example, thinking of the module as a set of abstract interfaces, and adapting other modules to this set of interfaces, allows you to provide a common interface for many file storage systems.

Model View Controller

Example of DIP

UI and ApplicationLayer packages contains mainly concrete classes. Controllers contains abstracts/interface types. UI has an instance of ICustomerHandler. All packages are physically separated. In the ApplicationLayer there is a concrete implementation that Page class will use. Instances of this interface are created dynamically by a Factory (possibly in the same Controllers package). The concrete types, Page and CustomerHandler, don’t depend on each other; both depend on ICustomerHandler.

The direct effect is that the UI doesn’t need to reference the ApplicationLayer or any concrete package that implements the ICustomerHandler. The concrete class will be loaded using reflection. At any moment the concrete implementation could be replaced by another concrete implementation without changing the UI class. Another interesting possibility is that the Page class implements an interface IPageViewer that could be passed as an argument to ICustomerHandler methods. Then the concrete implementation could communicate with UI without a concrete dependency. Again, both are linked by interfaces.

Related patterns

Applying the dependency inversion principle can also be seen as an example of the adapter pattern, i.e. the high-level class defines its own adapter interface which is the abstraction that the other high-level classes depend on. The adaptee implementation also depends on the adapter interface abstraction (of course, since it implements its interface) while it can be implemented by using code from within its own low-level module. The high-level has no dependency on the low-level module since it only uses the low-level indirectly through the adapter interface by invoking polymorphic methods to the interface which are implemented by the adaptee and its low-level module.

Various patterns such as Plugin, Service Locator, or Dependency injection are employed to facilitate the run-time provisioning of the chosen low-level component implementation to the high-level component.

History

The dependency inversion principle was postulated by Robert C. Martin and described in several publications including the paper Object Oriented Design Quality Metrics: an analysis of dependencies,[3] an article appearing in the C++ Report in May 1996 entitled The Dependency Inversion Principle,[4] and the books Agile Software Development, Principles, Patterns, and Practices,[1] and Agile Principles, Patterns, and Practices in C#.

See also

References

  1. a b c d e f Martin, Robert C. (2003). Agile Software Development, Principles, Patterns, and Practices. Prentice Hall. pp. 127–131. ISBN 978-0135974445.
  2. ^ Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (eds.). Head First Design Patterns (paperback). 1. O’REILLY. ISBN 978-0-596-00712-6. Retrieved 2012-06-21.
  3. ^ Martin, Robert C. (October 1994). “Object Oriented Design Quality Metrics: An analysis of dependencies” (PDF). Retrieved 2016-10-15.
  4. ^ Martin, Robert C. (May 1996). “The Dependency Inversion Principle” (PDF). C++ Report. Archived from the original (PDF) on 2011-07-14.

External links

Categories

” (WP)

Sources:

Fair Use Sources:

Categories
Java Software Engineering

Joshua Bloch

Joshua Bloch is a professor at Carnegie Mellon University. He was formerly the chief Java architect at Google, a distinguished engineer at Sun Microsystems, and a senior systems designer at Transarc. He led the design and implementation of numerous Java platform features, including the JDK 5.0 language enhancements and the Java Collections Framework. He holds a Ph.D. in computer science from Carnegie Mellon University and a B.S. in computer science from Columbia University. He is the author of Effective Java.

Joshuabloch.jpg
Bloch in 2008

BornAugust 28, 1961 (age 59)
Southampton, New York
NationalityAmerican
Alma materColumbia University (B.S.)
Carnegie Mellon University (Ph.D.)
Scientific career
InstitutionsCarnegie Mellon University
Doctoral advisorAlfred Spector

Joshua J. Bloch (born August 28, 1961) is an American software engineer and a technology author, formerly employed at Sun Microsystems and Google. He led the design and implementation of numerous Java platform features, including the Java Collections Framework, the java.math package, and the assert mechanism.[1] He is the author of the programming guide Effective Java (2001), which won the 2001 Jolt Award,[2] and is a co-author of two other Java books, Java Puzzlers (2005) and Java Concurrency In Practice (2006).” (WP)

Bloch holds a B.S. in computer science from Columbia University and a Ph.D. in computer science from Carnegie Mellon University.[1] His 1990 thesis was titled A Practical Approach to Replication of Abstract Data Objects[3] and was nominated for the ACM Distinguished Doctoral Dissertation Award.[4]

Bloch has worked as a Senior Systems Designer at Transarc, and later as a Distinguished Engineer at Sun Microsystems. In June 2004, he left Sun and became Chief Java Architect at Google.[5] On August 3, 2012, Bloch announced that he would be leaving Google.[6]

In December 2004, Java Developer’s Journal included Bloch in its list of the “Top 40 Software People in the World”.[7]

Bloch has proposed the extension of the Java programming language with two features: Concise Instance Creation Expressions (CICE) (coproposed with Bob Lee and Doug Lea) and Automatic Resource Management (ARM) blocks. The combination of CICE and ARM formed one of the three early proposals for adding support for closures to Java.[8] ARM blocks were added to the language in JDK7.[9]

Bloch is currently an affiliated faculty member of the Institute for Software Research at Carnegie Mellon University, where he holds the title “Adjunct Professor of the Practice“.[10]

Bibliography

References

  1. a b “About the Author”Effective Java Programming Language Guide
  2. ^ 2002 Jolt & Productivity Award Winners Archived 2007-05-03 at the Wayback Machine. Dr. Dobb’s Portal.
  3. ^ A Practical Approach to Replication of Abstract Data Objects. Computer Science Department, School of Computer Science, Carnegie Mellon University. May 1990.
  4. ^ Books & Authors: Effective Java, accessed 16 April 2008
  5. ^ Heiss, Janet J. (2007). “Rock Star Josh Bloch”JavaOne. Archived from the original on 27 October 2007.
  6. ^ Joshua Bloch, After eight years at Google, the time has come for me to move on
  7. ^ Geelan, Jeremy (2004-12-21). “The i-Technology Right Stuff”Java Developer’s Journal.
  8. ^ Kreft, Klaus; Langer, Angelika (17 June 2008). “Understanding the closures debate”JavaWorld. Retrieved 2020-07-20.
  9. ^ Darcy, Joseph D. (28 August 2009). “Project Coin: The Final Five (Or So)”Joseph D. Darcy’s Oracle Weblog. Oracle. Retrieved 6 May 2014.
  10. ^ “Faculty”Institute for Software ResearchCarnegie Mellon University. Retrieved 31 August 2020.

External links

Categories

Sources:

Fair Use Sources:

Categories
Java Software Engineering

Simon Roberts

Simon started out working as a software engineer, specializing in industrial control systems, and had a sideline teaching for a local University in his then-home-town of Cambridge, England.

In 1995 he joined Sun Microsystems, Inc. as a senior instructor and course developer. Simon spearheaded the introduction of Java training by Sun Microsystems in the U.K. in 1995. He developed the first Java certification exams for Sun before he moved to the U.S. in 1998.

Since leaving Sun in 2004, Simon has developed and delivered training for clients around the world.

Simon believes that training should have an immediate purpose and application, and that the most effective training is usually “on the job” mentoring, helping to remove the immediate roadblocks to productivity that so often plague workers in fast moving environments.

Excellent classes:

Sources:

Fair Use Sources:

Categories
Java Software Engineering

Herbert Schildt

See also Java: The Complete Reference, Java Programming Language, Java Glossary, Java Bibliography, Java Reference materials

Herbert Schildt is an American computing author, programmer and musician. He has written books about various programming languages. He was also a founding member of the progressive rock band Starcastle.

Called “one of the world’s foremost authors of books about programming” by International Developer magazine, best-selling author Herbert Schildt has written about programming for over three decades. His books have sold millions of copies worldwide and have been widely translated. Featured as one of the rock star programmers in Ed Burns’ book “Secrets of the Rock Star Programmers”, Schildt is interested in all facets of computing, but his primary focus is computer languages. He is the author of numerous books on Java, C, C++, and C#. Schildt holds BA and MCS degrees from the University of Illinois, Urbana/Champaign.

Life

Schildt holds both graduate and undergraduate degrees from the University of Illinois at Urbana-Champaign (UIUC). He claims he was a member of the original ANSI committee that standardized the C language in 1989, and the ANSI/ISO committees that updated that standard in 1999, and standardized C++ in 1998.[1][unreliable source?] Other members of the ANSI C committee have drawn his presence in the committee and the quality of his committee efforts into question.[2][3]

Schildt has written books about DOS,[4] C, C++, C# and other computer languages. His earliest books were published around 1985 and 1986. (The book Advanced Modula-2 from 1987 says on the cover that it is his sixth book.) His books were initially published by Osborne, an early computer book publisher which concentrated on titles for the personal computer. After the acquisition of Osborne by McGraw-Hill, the imprint continued publishing Schildt’s work until the imprint was subsumed completely into the larger company.

Little C

One of Schildt’s most enduring projects is the Little C interpreter, which is a lengthy example of a hand-written recursive-descent parser which interprets a subset of the C language. The program was originally published in Dr. Dobb’s Journal in August, 1989 entitled “Building your own C interpreter”.[5] This example was included in the books Born to Code In C (Osborne, 1989), The Craft of C (Osborne, 1992),[6] and in a later edition of C: The Complete Reference.

Schildt’s book The Art of C++ similarly features an interpreter for a language called Mini-C++. (Mini-C++ does not support the “class” keyword, although minimal and artificial support for cin and cout has been added.) There is also a BASIC interpreter called Small BASIC in Turbo C: The Complete Reference, first edition, written in C, and another in The Art of Java (2003) written in Java.[7]

Code for all these is available for download from the McGraw Hill technical books website, under each book.[8]

Starcastle

In addition to his work as a computer scientist, Schildt is the original multi-keyboardist for the progressive rock band Starcastle, appearing on all of the group’s albums, most of which were produced from 1976-1978. His style is distinguished by extensive use of Oberheim analog sequencers to create ethereal washes of sound colors, a pioneering technique which was quite cutting-edge for the pre-digital synthesizer period. He is also featured on the band’s 2007 album “Song of Times.”[9]

Reception

Schildt is called “one of the world’s foremost authors of books about programming” by International Developer magazine.[10] He is featured as one of the rock star programmers in Ed Burns’ book Secrets of the Rock Star Programmers.[11] His books have sold in the millions, worldwide.[12]

Schildt’s books have a reputation for being riddled with errors.[13] Their technical accuracy has been challenged by many reviewers, including ISO C committee members Peter Seebach[2] and Clive Feather,[14] C FAQ author Steve Summit,[15] and numerous C Vu reviewers from the Association of C and C++ Users (ACCU).[16]

Other reviewers have been more positive, with one ACCU reviewer saying about Schildt’s C: The Complete Reference, Fourth Edition that Schildt “has learnt something, not enough to receive positive acclaim but enough to remove the ‘positively detrimental’ epithet”.[17]

Bibliography (of selected books)

References

  1. ^ “About Herb Schildt”official site. Retrieved 2010-04-25.
  2. a b Seebach, Peter. “C: The Complete Nonsense (4th Edition)”. Retrieved 2010-04-08.
  3. ^ Clive Feather (18 January 2008). “Re: To Richard Heathfield from spinoza1111”. Retrieved 28 September 2013.
  4. ^ Shannon, L.R. (August 6, 1991). “PERIPHERALS; MS-DOS: The Latest Literature Helps Out”The New York Times. New York, New York. Retrieved 2010-04-29.
  5. ^ Herb Schildt (August 1, 1989). “Building Your Own C Interpreter”Dr. Dobb’s Journal. Retrieved 2010-04-25.
  6. ^ Ian Ormesher (Sep 1993). “ACCU Reviews: The Craft of C”C VuACCU. Archived from the original on 2011-07-16. Retrieved 2010-04-25.
  7. ^ The Art of Java, page 88, online at Google Books.
  8. ^ “Free Downloads: Samples and Code” McGraw-Hill Professional website. Retrieved April 26, 2010.
  9. ^ “Starcastle History – Prog rock”Starcastle official site. Retrieved 2010-04-25.
  10. ^https://web.archive.org/web/20060820041249/http://internationaldeveloper.com/contact_us.htm
  11. ^ Burns, Ed (2008). Secrets of the Rock Star Programmers: Riding the IT CrestISBN 978-0071490832.
  12. ^ http://ridingthecrest.com/interviews.html
  13. ^ Seebach, Peter. “C: The Complete Nonsense (3rd Edition)”. Retrieved 2010-04-22.
  14. ^ Feather, Clive. “The Annotated Annotated C Standard”.
  15. ^ Summit, Steve (1996). C Programming FAQs. Addison-Wesley. pp. 169–170ISBN 0-201-84519-9Unfortunately, the book contains numerous errors and omissions, primarily in the annotations, and a few pages of the standard itself are missing. Many people on the Internet recommend ignoring the annotations entirely.http://c-faq.com/ansi/avail.html
  16. ^ “Schildt” Reviews in C Vu, from the ACCU, last updated 13 May 2001. Retrieved 2010-04-22.
  17. ^ Francis Glassborow. “Book Review: C: The Complete Reference 4ed”ACCU. Retrieved 28 September 2013.

External links

Categories

Sources:

Fair Use Sources:

Categories
Java Software Engineering

Java documentation

See also Java Programming Language, Java Glossary, Java Bibliography, Java Reference materials

Whether you are working on a new cutting edge app or simply ramping up on new technology, Java documentation has all the information you need to make your project a smashing success. Use the rich set of code samples, tutorials, developer guides, API documentation, and more to quickly develop your prototype and scale it up to a real world application.

Java Platform, Standard Edition (Java SE)

Java SE lets you develop and deploy Java applications on desktops and servers. Java SE and component technologies offer the rich user interface, performance, versatility, portability, and security that today’s applications require.Java SE Documentation

Java Embedded

Java ME Embedded is designed for resource-constrained devices like wireless modules for M2M, industrial control, smart-grid infrastructure, environmental sensors and tracking, and more.Java ME Embedded documentationOracle Java SE Embedded delivers a secure, optimized runtime environment ideal for network-based devices.Oracle Java SE Embedded and JDK for ARM documentationJava Card technology provides a secure environment for applications that run on smart cards and other devices with very limited memory and processing capabilities. Java Card documentation

Java Platform, Enterprise Edition (Java EE)

Java EE provides an API and runtime environment for developing and running large, multi-tiered, reliable, and secure enterprise applications that are portable and scalable and that integrate easily with legacy applications and data.

Java EE documentation

Sources:

Fair Use Sources:

Categories
Java Software Engineering

James Gosling

See also Java Programming Language, Java Glossary, Java Bibliography, Java Reference materials

James Arthur Gosling, often referred to as “Dr. Java”, OC (born May 19, 1955) is a Canadian computer scientist, best known as the founder and lead designer behind the Java programming language.[3]

James Gosling 2008.jpg
BornJames Gosling
May 19, 1955 (age 65)
CalgaryAlberta, Canada
NationalityCanadian
Alma materUniversity of Calgary
(BSc, 1977)
Carnegie Mellon University
(MAPhD, 1983)
Known forJava (programming language)
TitleDr. Java
Children2
AwardsOfficer of the Order of CanadaIEEE John von Neumann Medal The Economist Innovation AwardNAE Foreign Member
Scientific career
InstitutionsSun MicrosystemsOracle CorporationGoogleLiquid Robotics[1]Amazon Web Services
ThesisAlgebraic Constraints (1983)
Doctoral advisorBob Sproull and Raj Reddy[2

Early life

James Gosling received a Bachelor of Science from the University of Calgary [4] and his M.A. and Ph.D. from Carnegie Mellon University, all in computer science.[2][5][6] He wrote a version of Emacs called Gosling Emacs (Gosmacs) while working toward his doctorate. He built a multi-processor version of Unix for a 16-way computer system[7] while at Carnegie Mellon University, before joining Sun Microsystems. He also developed several compilers and mail systems there.

Career & contributions

Gosling was with Sun Microsystems between 1984 and 2010 (26 years). At Sun he invented an early Unix windowing system called NeWS, which became a lesser-used alternative to the still used X Window, because Sun did not give it an open source license.[citation needed]

He is known as the father of the Java programming language.[8][9] He got the idea for the Java VM while writing a program to port software from a PERQ by translating Perq Q-Code to VAX assembler and emulating the hardware. He is generally credited with having invented the Java programming language in 1994.[10][11][12] He created the original design of Java and implemented the language’s original compiler and virtual machine.[13] Gosling traces the origins of the approach to his early graduate student days, when he created a p-code virtual machine for the lab’s DEC VAX computer, so that his professor could run programs written in UCSD Pascal. In the work leading to Java at Sun, he saw that architecture-neutral execution for widely distributed programs could be achieved by implementing a similar philosophy: always program for the same virtual machine.[14] Another contribution of Gosling’s was co-writing the “bundle” program, known as “shar”, a utility thoroughly detailed in Brian Kernighan and Rob Pike‘s book The Unix Programming Environment.[15]

He left Sun Microsystems on April 2, 2010, after it was acquired by the Oracle Corporation,[8] citing reductions in pay, status, and decision-making ability, along with change of role and ethical challenges.[16] He has since taken a very critical stance towards Oracle in interviews, noting that “during the integration meetings between Sun and Oracle, where we were being grilled about the patent situation between Sun and Google, we could see the Oracle lawyer’s eyes sparkle.”[9] He clarified his position during the Oracle v. Google trial over Android: “While I have differences with Oracle, in this case they are in the right. Google totally slimed Sun. We were all really disturbed, even Jonathan [Schwartz]: he just decided to put on a happy face and tried to turn lemons into lemonade, which annoyed a lot of folks at Sun.”[17] However, he approved of the court’s ruling that APIs should not be copyrightable.[18]

In March 2011, Gosling joined Google.[19] Six months later, he followed his colleague Bill Vass and joined a startup called Liquid Robotics.[1] In late 2016, Liquid Robotics was acquired by Boeing.[20] Following the acquisition, Gosling left Liquid Robotics to work at Amazon Web Services as Distinguished Engineer in May 2017.[21]

He is an advisor at the Scala company Lightbend,[22] Independent Director at Jelastic,[23] and Strategic Advisor for Eucalyptus,[24] and is a board member of DIRTT Environmental Solutions.[25]

He is known for his love of proving “the unknown”[clarification needed] and has noted but later clarified to be untrue that his favorite irrational number is √2. He has a framed picture of the first 1,000 digits of √2 in his office.[26]

Awards

For his achievement, the National Academy of Engineering in the United States elected him as a Foreign Associate member.[27]

Books

  • Ken Arnold, James Gosling, David Holmes, The Java Programming Language, Fourth Edition, Addison-Wesley Professional, 2005, ISBN 0-321-34980-6
  • James Gosling, Bill JoyGuy L. Steele Jr.Gilad BrachaThe Java Language Specification, Third Edition, Addison-Wesley Professional, 2005, ISBN 0-321-24678-0
  • Ken Arnold, James Gosling, David Holmes, The Java Programming Language, Third Edition, Addison-Wesley Professional, 2000, ISBN 0-201-70433-1
  • James Gosling, Bill Joy, Guy L. Steele Jr., Gilad Bracha, The Java Language Specification, Second Edition, Addison-Wesley, 2000, ISBN 0-201-31008-2
  • Gregory Bollella (Editor), Benjamin Brosgol, James Gosling, Peter Dibble, Steve Furr, David Hardin, Mark Turnbull, The Real-Time Specification for Java, Addison Wesley Longman, 2000, ISBN 0-201-70323-8
  • Ken Arnold, James Gosling, The Java programming language Second Edition, Addison-Wesley, 1997, ISBN 0-201-31006-6
  • Ken Arnold, James Gosling, The Java programming language, Addison-Wesley, 1996, ISBN 0-201-63455-4
  • James Gosling, Bill Joy, Guy L. Steele Jr., The Java Language Specification, Addison Wesley Publishing Company, 1996, ISBN 0-201-63451-1
  • James Gosling, Frank Yellin, The Java Team, The Java Application Programming Interface, Volume 2: Window Toolkit and Applets, Addison-Wesley, 1996, ISBN 0-201-63459-7
  • James Gosling, Frank Yellin, The Java Team, The Java Application Programming Interface, Volume 1: Core Packages, Addison-Wesley, 1996, ISBN 0-201-63453-8
  • James Gosling, Henry McGilton, The Java language Environment: A white paperSun Microsystems, 1996
  • James Gosling, David S. H. Rosenthal, Michelle J. Arden, The NeWS Book : An Introduction to the Network/Extensible Window System (Sun Technical Reference Library), Springer, 1989, ISBN 0-387-96915-2

See also

Wikimedia Commons has media related to James Gosling.

References

  1. a b I’ve moved again : On a New Road. Nighthacks.com. Retrieved on 2016-05-17.
  2. a b James Gosling at the Mathematics Genealogy Project
  3. ^ “James Gosling – Computing History”Computinghistory.org.uk. Retrieved 2017-10-09.
  4. ^ “Archived copy”. Archived from the original on 2015-06-01. Retrieved 2015-05-13.
  5. ^ Gosling, James (1983). Algebraic Constraints (PhD thesis). Carnegie Mellon University. ProQuest 303133100.
  6. ^ Phd Awards By Advisor. Cs.cmu.edu. Retrieved on 2013-07-17.
  7. ^ James Gosling mentioned a multiprocessor Unix in his statement during the US vs Microsoft Antitrust DOJ trial in 1998 “DOJ/Antitrust”Statement in MS Antitrust case. US DOJ. Retrieved 1 February 2007.
  8. a b Guevin, Jennifer. “Java co-creator James Gosling leaves Oracle”CNET. Retrieved 13 June 2020.
  9. a b Shankland, Stephen. (2011-03-28) Java founder James Gosling joins Google. CNET Retrieved on 2012-02-21.
  10. ^ Allman, E. (2004). “Interview: A Conversation with James Gosling”Queue2(5): 24. doi:10.1145/1016998.1017013.
  11. ^ Gosling, J. (1997). “The feel of Java”. Computer30 (6): 53–57. doi:10.1109/2.587548.
  12. ^ “Sun Labs-The First Five Years: The First Fifty Technical Reports. A Commemorative Issue”Ching-Chih Chang, Amy Hall, Jeanie Treichel. Sun Microsystems, Inc. 1998. Retrieved 2010-02-07.
  13. ^ Gosling, James (2004-08-31). “A Conversation with James Gosling”ACM Queue. ACM. Retrieved 2014-07-03. At Sun he is best known for creating the original design of Java and implementing its original compiler and virtual machine.
  14. ^ McMillan, W.W. (2011). “The soul of the virtual machine: Java’s abIlIty to run on many dIfferent kInds of computers grew out of software devised decades before”. IEEE Spectrum48 (7): 44–48. doi:10.1109/MSPEC.2011.5910448S2CID 40545952.
  15. ^ Kernighan, Brian W; Pike, Rob (1984). The Unix Programming Environment. Prentice Hall. pp. 97-100ISBN 0-13-937681-X.
  16. ^ Darryl K. Taft. (2010-09-22) Java Creator James Gosling: Why I Quit Oracle. eWEEK.com
  17. ^ My attitude on Oracle v Google. Nighthacks.com. Retrieved on 2016-05-17.
  18. ^ “Meltdown Averted”Nighthacks.com. Retrieved 2017-03-13.
  19. ^ Next Step on the Road. Nighthacks.com. Retrieved on 2016-05-17.
  20. ^ “Boeing to Acquire Liquid Robotics to Enhance Autonomous Seabed-to-Space Information Services”. December 6, 2016.
  21. ^ Darrow, Barb (May 23, 2017). “Legendary Techie James Gosling Joins Amazon Web Services”Fortune.com. Retrieved 23 March 2018.
  22. ^ Typesafe — Company: Team. Typesafe.com. Retrieved on 2012-02-21.
  23. ^ James Gosling and Bruno Souza Join Jelastic as Advisers. InfoQ.com. Retrieved on 2014-11-24.
  24. ^ Eucalyptus Archived 2013-04-25 at the Wayback Machine. Eucalyptus.com Retrieved on 2013-04-22
  25. ^ “James Gosling”DIRTT Environmental Solutions Ltd.
  26. ^ UserGroupsatGoogle (29 November 2010). “James Gosling on Apple, Apache, Google, Oracle and the Future of Java”YouTube. Retrieved 20 January 2018.
  27. ^ “NAE Members Directory – Dr. James Arthur Gosling”NAE. Retrieved March 29, 2011.
  28. ^ The 2002 Economist Innovation Award Winner Archived 2012-04-22 at the Wayback Machine.
  29. ^ “Flame Award”Usenix.org. 6 December 2011. Retrieved 20 January 2018.
  30. ^ “Governor”. Archived from the original on February 7, 2008. Retrieved August 28, 2016.. February 20, 2007
  31. ^ ACM Names Fellows for Computing Advances that Are Transforming Science and Society Archived 2014-07-22 at the Wayback MachineAssociation for Computing Machinery, accessed 2013-12-10.
  32. ^ “IEEE JOHN VON NEUMANN MEDAL : RECIPIENTS” (PDF). Ieee.org. Retrieved 20 January 2018.
  33. ^ Computer History Museum names James Gosling a 2019 Fellow

Categories

Sources:

Fair Use Sources:

Categories
Java Software Engineering

Java Glossary

See also Java Programming Language, Java Bibliography, Java Reference materials

” (LerJav)

abstract:

Java abstract keyword: “The Java abstract keyword is used to declare Java abstract methods and Java classes. An abstract method has no implementation defined; it is declared with Java arguments and a Java return type as usual, but the body enclosed in curly braces is replaced with a semicolon. The implementation of a Java abstract method is provided by a Java subclass of the Java class in which it is defined. If an abstract method appears in a class, the class is also abstract. Attempting to instantiate an abstract class will fail at compile time.” (LerJav)

annotations

Metadata added to Java source code using the @ tag syntax. Annotations can be used by the compiler or at runtime to augment classes, provide data or mappings, or flag additional services.

Ant

An older, XML-based build tool for Java applications. Ant builds can compile, package, and deploy Java source code as well as generate documentation and perform other activities through pluggable “targets.”

Application Programming Interface (API)

An API consists of the methods and variables programmers use to work with a component or tool in their applications. The Java language APIs consist of the classes and methods of the java.lang, java.util, java.io, java.text, java​.net packages and many others.

application

A Java program that runs standalone, as compared with an applet.

Annotation Processing Tool (APT)

A frontend for the Java compiler that processes annotations via a pluggable factory architecture, allowing users to implement custom compile-time annotations.

assertion

A language feature used to test for conditions that should be guaranteed by program logic. If a condition checked by an assertion is found to be false, a fatal error is thrown. For added performance, assertions can be disabled when an application is deployed.

atomic

Discrete or transactional in the sense that an operation happens as a unit, in an all-or-nothing fashion. Certain operations in the Java virtual machine (VM) and provided by the Java concurrency API are atomic.

Abstract Window Toolkit (AWT)

Java’s original platform-independent windowing, graphics, and UI toolkit.

Boojum

The mystical, spectral, alter ego of a Snark. From the 1876 Lewis Carroll poem “The Hunting of the Snark.”

Boolean

A primitive Java data type that contains a true or false value.

bounds

In Java generics, a limitation on the type of a type parameter. An upper bound specifies that a type must extend (or is assignable to) a specific Java class. A lower bound is used to indicate that a type must be a supertype of (or is assignable from) the specified type.

boxing

Wrapping of primitive types in Java by their object wrapper types. See also unboxing.

byte

A primitive Java data type that’s an 8-bit two’s-complement signed number.

callback

A behavior that is defined by one object and then later invoked by another object when a particular event occurs. The Java event mechanism is a kind of callback.

cast

The changing of the apparent type of a Java object from one type to another, specified type. Java casts are checked both statically by the Java compiler and at runtime.

catch

The Java catch statement introduces an exception-handling block of code following a try statement. The catch keyword is followed by one or more exception type and argument name pairs in parentheses and a block of code within curly braces.

certificate

An electronic document using a digital signature to assert the identity of a person, group, or organization. Certificates attest to the identity of a person or group and contain that organization’s public key. A certificate is signed by a certificate authority with its digital signature.

certificate authority (CA)

An organization that is entrusted to issue certificates, taking whatever steps are necessary to verify the real-world identity for which it is issuing the certificate.

char

A primitive Java data type; a variable of type char holds a single 16-bit Unicode character.

class

The fundamental unit that defines an object in most object-oriented programming languages. A class is an encapsulated collection of variables and methods that may have privileged access to one another. Usually a class can be instantiated to produce an object that’s an instance of the class, with its own unique set of data.

The class keyword is used to declare a class, thereby defining a new object type.

classloader

An instance of the class java.lang.ClassLoader, which is responsible for loading Java binary classes into the Java VM. Classloaders help partition classes based on their source for both structural and security purposes and can also be chained in a parent-child hierarchy.

class method

See static method.

classpath

The sequence of path locations specifying directories and archive files containing compiled Java class files and resources, which are searched in order to find components of a Java application.

class variable

See static variable.

client

The consumer of a resource or the party that initiates a conversation in the case of a networked client/server application. See also server.

Collections API

Classes in the core java.util package for working with and sorting structured collections or maps of items. This API includes the Vector and Hashtable classes as well as newer items such as List, Map, and Queue.

compilation unit

The unit of source code for a Java class. A compilation unit normally contains a single class definition and in most current development environments is simply a file with a .java extension.

compiler

A program that translates source code into executable code.

component architecture

A methodology for building parts of an application. It is a way to build reusable objects that can be easily assembled to form applications.

composition

Combining existing objects to create another, more complex object. When you compose a new object, you create complex behavior by delegating tasks to the internal objects. Composition is different from inheritance, which defines a new object by changing or refining the behavior of an old object. See also inheritance.

constructor

A special method that is invoked automatically when a new instance of a class is created. Constructors are used to initialize the variables of the newly created object. The constructor method has the same name as the class and no explicit return value.

content handler

A class that is called to parse a particular type of data and convert it to an appropriate object.

datagram

A packet of data normally sent using a connectionless protocol such as UDP, which provides no guarantees about delivery or error checking and provides no control information.

data hiding

See encapsulation.

deep copy

A duplicate of an object along with all of the objects that it references, transitively. A deep copy duplicates the entire “graph” of objects, instead of just duplicating references. See also shallow copy.

Document Object Model (DOM)

An in-memory representation of a fully parsed XML document using objects with names like Element, Attribute, and Text. The Java XML DOM API binding is standardized by the World Wide Web Consortium (W3C).

double

A Java primitive data type; a double value is a 64-bit (double-precision) floating-point number in IEEE-754 (binary64) binary format.

Document Type Definition (DTD)

A document containing specialized language that expresses constraints on the structure of XML tags and tag attributes. DTDs are used to validate an XML document, and can constrain the order and nesting of tags as well as the allowed values of attributes.

Enterprise JavaBeans (EJBs)

A server-side business component architecture named for, but not significantly related to, the JavaBeans component architecture. EJBs represent business services and database components, and provide declarative security and transactions.

encapsulation

The object-oriented programming technique of limiting the exposure of variables and methods to simplify the API of a class or package. Using the private and protected keywords, a programmer can limit the exposure of internal (“black box”) parts of a class. Encapsulation reduces bugs and promotes reusability and modularity of classes. This technique is also known as data hiding.

enum

The Java keyword for declaring an enumerated type. An enum holds a list of constant object identifiers that can be used as a type-safe alternative to numeric constants that serve as identifiers or labels.

enumeration

See enum.

erasure

The implementation technique used by Java generics in which generic type information is removed (erased) and distilled to raw Java types at compilation. Erasure provides backward compatibility with nongeneric Java code, but introduces some difficulties in the language.

event

A user’s action, such as a mouse-click or keypress.

The Java object delivered to a registered event listener in response to a user action or other activity in the system.

exception

A signal that some unexpected condition has occurred in the program. In Java, exceptions are objects that are subclasses of Exception or Error (which themselves are subclasses of Throwable). Exceptions in Java are “raised” with the throw keyword and handled with the catch keyword. See also catch, throw, and throws.

exception chaining

The design pattern of catching an exception and throwing a new, higher-level, or more appropriate exception that contains the underlying exception as its cause. The “cause” exception can be retrieved if necessary.

extends

A keyword used in a class declaration to specify the superclass of the class being defined. The class being defined has access to all the public and protected variables and methods of the superclass (or, if the class being defined is in the same package, it has access to all nonprivate variables and methods). If a class definition omits the extends clause, its superclass is taken to be java.lang.Object.

final

A keyword modifier that may be applied to classes, methods, and variables. It has a similar, but not identical, meaning in each case. When final is applied to a class, it means that the class may never be subclassed. java.lang.System is an example of a final class. A final method cannot be overridden in a subclass. When final is applied to a variable, the variable is a constant — that is, it can’t be modified. (The contents of a mutable object can still be changed; the final variable always points to the same object.)

finalize

A reserved method name. The finalize() method is called by the Java VM when an object is no longer being used (i.e., when there are no further references to it) but before the object’s memory is actually reclaimed by the system. Largely disfavored in light of newer approaches such as the Closeable interface and try-with-resources.

finally

A keyword that introduces the finally block of a try/catch/finally construct. catch and finally blocks provide exception handling and routine cleanup for code in a try block. The finally block is optional and appears after the try block, and after zero or more catch blocks. The code in a finally block is executed once, regardless of how the code in the try block executes. In normal execution, control reaches the end of the try block and proceeds to the finally block, which generally performs any necessary cleanup.

float

A Java primitive data type; a float value is a 32-bit (single-precision) floating-point number represented in IEEE 754 format.

garbage collection

The process of reclaiming the memory of objects no longer in use. An object is no longer in use when there are no references to it from other objects in the system and no references in any local variables on any thread’s method call stack.

generics

The syntax and implementation of parameterized types in the Java language, added in Java 5.0. Generic types are Java classes that are parameterized by the user on one or more additional Java types to specialize the behavior of the class. Generics are sometimes referred to as templates in other languages.

generic class

A class that uses the Java generics syntax and is parameterized by one or more type variables, which represent class types to be substituted by the user of the class. Generic classes are particularly useful for container objects and collections that can be specialized to operate on a specific type of element.

generic method

A method that uses the Java generics syntax and has one or more arguments or return types that refer to type variables representing the actual type of data element the method will use. The Java compiler can often infer the types of the type variables from the usage context of the method.

graphics context

A drawable surface represented by the java.awt.Graphics class. A graphics context contains contextual information about the drawing area and provides methods for performing drawing operations in it.

graphical user interface (GUI)

A traditional, visual user interface consisting of a window containing graphical items such as buttons, text fields, pull-down menus, dialog boxes, and other standard interface components.

hashcode

A random-looking identifying number, based on the data content of an object, used as a kind of signature for the object. A hashcode is used to store an object in a hash table (or hash map). See also hash table.

hash table

An object that is like a dictionary or an associative array. A hash table stores and retrieves elements using key values called hashcodes. See also hashcode.

hostname

The human-readable name given to an individual computer attached to the internet.

Hypertext Transfer Protocol (HTTP)

The protocol used by web browsers or other clients to talk to web servers. The simplest form of the protocol uses the commands GET to request a file and POST to send data.

Integrated Development Environment (IDE)

A GUI tool such as IntelliJ IDEA or Eclipse that provides source editing, compiling, running, debugging, and deployment functionality for developing Java applications.

implements

A keyword used in class declarations to indicate that the class implements the named interface or interfaces. The implements clause is optional in class declarations; if it appears, it must follow the extends clause (if any). If an implements clause appears in the declaration of a non-abstract class, every method from each specified interface must be implemented by the class or by one of its superclasses.

import

The import statement makes Java classes available to the current class under an abbreviated name or disambiguates classes imported in bulk by other import statements. (Java classes are always available by their fully qualified name, assuming the appropriate class file can be found relative to the CLASSPATH environment variable and that the class file is readable. import doesn’t make the class available; it just saves typing and makes your code more legible.) Any number of import statements may appear in a Java program. They must appear, however, after the optional package statement at the top of the file, and before the first class or interface definition in the file.

inheritance

An important feature of object-oriented programming that involves defining a new object by changing or refining the behavior of an existing object. Through inheritance, an object implicitly contains all of the non-private variables and methods of its superclass. Java supports single inheritance of classes and multiple inheritance of interfaces.

inner class

A class definition that is nested within another class or a method. An inner class functions within the lexical scope of another class.

instance

An occurrence of something, usually an object. When a class is instantiated to produce an object, we say the object is an instance of the class.

instance method

A non-static method of a class. Such a method is passed an implicit this reference to the object that invoked it. See also static, static method.

instanceof

A Java operator that returns true if the object on its left side is an instance of the class (or implements the interface) specified on its right side. instanceof returns false if the object isn’t an instance of the specified class or doesn’t implement the specified interface. It also returns false if the specified object is null.

instance variable

A non-static variable of a class. Each instance of a class has an independent copy of all of the instance variables of the class. See also class variable, static.

int

A primitive Java data type that’s a 32-bit two’s-complement signed number.

interface

A keyword used to declare an interface.

A collection of abstract methods that collectively define a type in the Java language. Classes implementing the methods may declare that they implement the interface type, and instances of them may be treated as that type.

internationalization

The process of making an application accessible to people who speak a variety of languages. Sometimes abbreviated I18N.

interpreter

The module that decodes and executes Java bytecode. Most Java bytecode is not, strictly speaking, interpreted any longer but compiled to native code dynamically by the Java VM.

introspection

The process by which a JavaBean provides additional information about itself, supplementing information learned by reflection.

ISO 8859-1

An 8-bit character encoding standardized by the ISO. This encoding is also known as Latin-1 and contains characters from the Latin alphabet suitable for English and most languages of western Europe.

JavaBeans

A component architecture for Java. It is a way to build interoperable Java objects that can be manipulated easily in a visual application builder environment.

Java beans

Java classes that are built following the JavaBeans design patterns and conventions.

JavaScript

A language developed early in the history of the web by Netscape for creating dynamic web pages. From a programmer’s point of view, it’s unrelated to Java, although some of its syntax is similar.

Java API for XML Binding (JAXB)

A Java API that allows for generation of Java classes from XML DTD or Schema descriptions and the generation of XML from Java classes.

Java API for XML Parsers (JAXP)

The Java API that allows for pluggable implementations of XML and XSL engines. This API provides an implementation-neutral way to construct parsers and transforms.

JAX-RPC

The Java API for XML Remote Procedure Calls, used by web services.

Java Database Connectivity (JDBC)

The standard Java API for talking to an SQL (Structured Query Language) database.

JDOM

A native Java XML DOM created by Jason Hunter and Brett McLaughlin. JDOM is easier to use than the standard DOM API for Java. It uses the Java Collections API and standard Java conventions. Available at the JDOM Project site.

Java Web Services Developer Pack (JDSDP)

A bundle of standard extension APIs packaged as a group with an installer from Sun. The JWSDP includes JAXB, JAX-RPC, and other XML and web services-related packages.

lambda (or lambda expression)

A compact way to put the entire definition of a small, anonymous function right where you are using it in the code.

Latin-1

A nickname for ISO 8859-1.

layout manager

An object that controls the arrangement of components within the display area of a Swing or AWT container.

lightweight component

A pure Java GUI component that has no native peer in the AWT.

local variable

A variable that is declared inside a method. A local variable can be seen only by code within that method.

Logging API

The Java API for structured logging and reporting of messages from within application components. The Logging API supports logging levels indicating the importance of messages, as well as filtering and output capabilities.

long

A primitive Java data type that’s a 64-bit two’s-complement signed number.

message digest

A cryptographically computed number based on the content of a message, used to determine whether the message’s contents have been changed in any way. A change to a message’s contents will change its message digest. When implemented properly, it is almost impossible to create two similar messages with the same digest.

method

The object-oriented programming term for a function or procedure.

method overloading

Provides definitions of more than one method with the same name but with different argument lists. When an overloaded method is called, the compiler determines which one is intended by examining the supplied argument types.

method overriding

Defines a method that matches the name and argument types of a method defined in a superclass. When an overridden method is invoked, the interpreter uses dynamic method lookup to determine which method definition is applicable to the current object. Beginning in Java 5.0, overridden methods can have different return types, with restrictions.

MIME (or MIME type)

A media type classification system often associated with email attachments or web page content.

Model-View-Controller (MVC) framework

A UI design that originated in Smalltalk. In MVC, the data for a display item is called the model. A view displays a particular representation of the model, and a controller provides user interaction with both. Java incorporates many MVC concepts.

modifier

A keyword placed before a class, variable, or method that alters the item’s accessibility, behavior, or semantics. See also abstract, final, native method, private, protected, public, static, synchronized.

NaN (not-a-number)

This is a special value of the double and float data types that represents an undefined result of a mathematical operation, such as zero divided by zero.

native method

A method that is implemented in a native language on a host platform, rather than being implemented in Java. Native methods provide access to such resources as the network, the windowing system, and the host filesystem.

new

A unary operator that creates a new object or array (or raises an OutOfMemoryException if there is not enough memory available).

NIO

The Java “new” I/O package. A core package introduced in Java 1.4 to support asynchronous, interruptible, and scalable I/O operations. The NIO API supports nonthreadbound “select” style I/O handling.

null

null is a special value that indicates that a reference-type variable doesn’t refer to any object instance. Static and instance variables of classes default to the value null if not otherwise assigned.

object

The fundamental structural unit of an object-oriented programming language, encapsulating a set of data and behavior that operates on that data.

An instance of a class, having the structure of the class but its own copy of data elements. See also instance.

” (LerJav)

Sources:

Fair Use Sources:

Categories
Software Engineering

YouTube

The YouTube logo is made of a red round-rectangular box with a white "play" button inside and the word "YouTube" written in black.
Type of businessSubsidiary
Type of siteVideo hosting service
FoundedFebruary 14, 2005; 16 years ago
Headquarters901 Cherry Avenue
San Bruno, California, United States
Area servedWorldwide (excluding blocked countries)
Founder(s)Chad HurleySteve ChenJawed Karim
Key peopleSusan Wojcicki (CEO)
Chad Hurley (advisor)
IndustryInternetVideo hosting service
ProductsYouTube Premium
YouTube Music
YouTube TV
YouTube Kids
RevenueUS$15 billion (2019)[1]
ParentGoogle LLC (2006–present)
URLYouTube.com
(see list of localized domain names)
AdvertisingGoogle AdSense
RegistrationOptionalNot required to watch most videos; required for certain tasks such as uploading videos, viewing flagged (18+) videos, creating playlists, liking or disliking videos, and posting comments
Users2 billion (October 2020)[2]
LaunchedFebruary 14, 2005; 16 years ago
Current statusActive
Content licenseUploader holds copyright (standard license); Creative Commons can be selected.
Written inPython (core/API),[3] C (through CPython), C++Java (through Guice platform),[4][5] Go,[6] JavaScript (UI)

YouTube is an American online video-sharing platform headquartered in San Bruno, California. The service, created in February 2005 by three former PayPal employees—Chad HurleySteve Chen, and Jawed Karim—was bought by Google in November 2006 for US$1.65 billion and now operates as one of the company’s subsidiaries. YouTube is the second most-visited website after Google Search, according to Alexa Internet rankings.[7]

YouTube allows users to upload, view, rate, share, add to playlists, report, comment on videos, and subscribe to other users. Available content includes video clipsTV show clips, music videosshort and documentary films, audio recordings, movie trailerslive streamsvideo blogging, short original videos, and educational videos. Most content is generated and uploaded by individuals, but media corporations including CBS, the BBCVevo, and Hulu offer some of their material via YouTube as part of the YouTube partnership program. Unregistered users can watch, but not upload, videos on the site, while registered users can upload an unlimited number of videos and add comments. Age-restricted videos are available only to registered users affirming themselves to be at least 18 years old.

As of May 2019, there were more than 500 hours of content uploaded to YouTube each minute and one billion hours of content being watched on YouTube every day.[8] YouTube and selected creators earn advertising revenue from Google AdSense, a program that targets ads according to site content and audience. The vast majority of videos are free to view, but there are exceptions, including subscription-based premium channels, film rentals, as well as YouTube Music and YouTube Premium, subscription services respectively offering premium and ad-free music streaming, and ad-free access to all content, including exclusive content commissioned from notable personalities. Based on reported quarterly advertising revenue, YouTube is estimated to have US$15 billion in annual revenues.

Further reading

External links

Categories

” (WP)

Sources:

Fair Use Sources:

Categories
Software Engineering

Twitter – Tweeting – Tweeted

“Tweeting” and “Tweeted” redirect here. 

Twitter bird logo 2012.svg
Type of businessPublic
Type of siteNewssocial networking service
Available inMultilingual
Traded asNYSETWTRS&P 500 Component
FoundedMarch 21, 2006; 14 years ago
HeadquartersSan Francisco, California United States
Area servedWorldwide
Founder(s)Jack DorseyNoah GlassBiz StoneEvan Williams
Key peopleOmid Kordestani(Executive Chairman)[1]Ned Segal (CFO)Jack Dorsey (CEO)Parag Agrawal (CTO)
IndustryInternet3.72
RevenueDecrease US$3.72 billion (2020)
Operating incomeDecrease US27 million (2020)
Net incomeDecrease US$-1.13 billion (2020)
Total assetsIncrease US$13.37 billion (2020)
Total equityDecrease US$7.97 billion (2020)
Employees4,600 (September 2019)[2]
SubsidiariesVinePeriscopeMoPub
URLtwitter.com 
RegistrationRequired
Users330 million monthly active users(Q1 2019)
LaunchedJuly 15, 2006; 14 years ago
Current statusActive
Native client(s) oniOSAndroidWindows PhoneMicrosoft WindowsMacOSWeb
Written inJavaRubyScalaJavaScript
[3][4][5][6][7][8][9][10][11][12]

Twitter is an American microblogging and social networking service on which users post and interact with messages known as “tweets”. Registered users can post, like and retweet tweets, but unregistered users can only read them. Users access Twitter through its website interface or its mobile-device application software (“app”), though the service could also be accessed via SMS before April 2020.[13] Twitter, Inc. is based in San FranciscoCalifornia, and has more than 25 offices around the world.[14] Tweets were originally restricted to 140 characters, but was doubled to 280 for non-CJK languages in November 2017.[15] Audio and video tweets remain limited to 140 seconds for most accounts.

Twitter was created by Jack DorseyNoah GlassBiz Stone, and Evan Williams in March 2006 and launched in July of that year. By 2012, more than 100 million users posted 340 million tweets a day,[16] and the service handled an average of 1.6 billion search queries per day.[17][18][19] In 2013, it was one of the ten most-visited websites and has been described as “the SMS of the Internet”.[20] As of Q1 2019, Twitter had more than 330 million monthly active users.[10] Twitter is a some-to-many microblogging service, given that the vast majority of tweets are written by a small minority of users.[21][22]

Categories

” (WP)

Sources:

Fair Use Sources: