Chrystel Contreras
Programmers in Today’s Job Market:
The Need to Know Various Programming
Languages
Introduction
• Over 1000 programming languages exist today
• Software development companies use
numerous languages to create, develop,
maintain, and deploy software
• All areas – operating systems, business
applications, educational learning tools, military
training tools, databases, gaming, government
systems, etc.
• Programmers must know more than a few
languages to survive and prosper in today’s
programming industry
No company programs in only one
language
• From the giants i.e. EA, Microsoft to the
small start-ups, no company only uses 1
programming language to develop
software
• Company I work for – Tactical Language
Training, LLC. (TLT) is a perfect example
of this fact
Sample job ad from Tactical
Language
•
We seek a Java web application programmer to build authoring tools.
•
The ideal candidate:
•
•

Has extensive experience programming web applications using server-side Java. Experience with the following
technologies is a plus: game programming, AI, agents, education software, natural language processing.

Is a real coder/programmer -- as opposed to analyst or architect.

Has good design skills and the ability to work with and integrate a number of disperse technologies. Flexibility and curiosity
to learn new technologies are very important.

Likes to get things done and enjoys having real users employ the software he/she creates.
Education and experience desired:

3+ years of programming experience.

B.S. in Computer Science or equivalent.
Technical skills desired:

Fluency in building three-tiered, Java-based web applications.

Experience with Java-based portals and/or content management systems (e.g., JBoss Portal).

Fluency in XML technologies (XML XSD, XSL/XSLT, XPath).

Fluency with relational databases, especially Postgres.

Experience with mixed web applications (HTML/Javascript + applets) is a plus.

Experience with LAMP stack technologies is a plus.

Experience with Python and/or Perl is a plus.

Experience with Java client-side technologies (e.g., Swing) is a plus.
Who is Tactical Language?
• Spin-off of the Information Sciences Institute of the
University of Southern California
• Tactical Training Language System project was
sponsored by DARWARS in cooperation with the U.S.
Special Operations Command, the U.S. Military, the
U.S. Marine Corps, and other government agencies
• Tactical Language has evolved to become a separate
privately owned company.
• The Tactical Language and Culture
Training Systems are now produced by
Tactical Language Training, a wholly
owned subsidiary of Alelo, Inc.
• Their initial emphasis is on foreign
languages and culture.
• Currently have 3 Tactical Language and
Culture Training Systems – Tactical
Pashto, Tactical Iraqi, and Tactical French
• Systems teach what to say, how to say it, and
when to say it in Pashto, Sahel French, and Iraqi
Arabic
• Users learn while having fun by playing
immersive, interactive courses based on 3D
videogames that simulate real-life social
communications involving spoken dialogs and
cultural protocols.
• These courses are not simple entertainment
videogames or training programs. They are
“serious games” that combine patent-pending
technologies.
Patent-Pending Technologies
• Computational models of language, culture, and
learning
• Artificial-intelligence-based psychological
simulations
• Social Puppets™ Animations that dynamically
control the unscripted autonomous behavior of
the games’ animated characters, and contextual,
speaker-independent speech recognition models
for non-native speakers
• Positive reviews by the users of the
systems
• Current users of the training systems are:
– U.S. Marine Corps
– U.S Army
– U.S. Air Force
– U.S. Navy
Primary Languages Used by
Tactical Language Training
• TLT uses primarily 5 languages to develop their
systems. Other languages are also used, but for
relatively small and inconsequential tasks.
Therefore, I am focusing on the primary 5.
• They are:
–
–
–
–
–
Python
C++
Java
XML
Unreal Script
Python
• Conceived by Guido Van Rossum at CWI in the
Netherlands in the late 1980s
• The latest version is 2.5
• High-level, dynamic, object-oriented language
• Emphasizes the importance of programmer
effort over computer effort
• Similar to Ruby, Perl, Scheme, Smalltalk, and Tcl
in that is is a multi-paradigm language which has
a dynamic type system and uses automatic
memory management
Python
• Can be learned in a few days
• Offers strong support for integration with other
languages and tools; and plays well with other
languages
• Comes with extensive libraries
• Runs on Linux/Unix, Windows, MAC OS X, OS/2, Amiga,
Palm handhelds, and Nokia mobile phones
• Managed by Python Software Foundation , a non-profit
organization
• Distributed under an OSI-approved open-source license
that make it free to use
What TLT uses Python for:
• Uses Python to build the mission engine for their
systems
• Uses Python to coordinate the work of all the
game pieces
• Basically, Python is the “glue” of their systems
• Important for programmers they hire to know or
learn Python quickly. Luckily Python is easy to
learn and has extensive libraries
C++
• Since the 1990s is has been the most popular commercial
programming language
• General-purpose, high-level, language with low-level facilities
• Statically typed free-form multi-paradigm language that
supports:
–
–
–
–
–
Procedural programming
Data abstraction
Object-oriented programming
Generic programming
RTTI
• Developed in 1983 at Bell Labs by Bjarne Stroustrup
• Started out as an enhancement to the C programming
language
• C++ has many rules and they can be found in ‘The Design
and Evolution of C++”
• C++ library consists of 2 parts
– Core language
– C++ standard library
C++ Flaws
• Incompatibility with C (even though it
started as an enhancement of C)
• There are a few differences that cause C
code to act differently in C++ or be invalid
• Some programmers see the ability that
C++ can “mix and match” procedural and
object-oriented programming, rather that
strictly enforcing a single paradigm as
unfavorable
What TLT uses C++ for:
• To build core components of its systems
such as the speech recognition and the
sound recordings
• Used for the Unreal game engine
– Unreal engine is the engine for the software
or the base of the engine depending on what
version is being used
Java
• Object-oriented applications programming language
• Developed by Sun Microsystems in the early 1990s
• Derivative of C and C++, but has a simpler object model
and fewer low-level facilities
• Has 5 primary goals:
– Should use object-oriented programming methodology
– Should allow same program to be executed on multiple
OS’s
– Should contain built-in support for using computer
networks
– Should be designed to execute code from remote sources
securely
– Should be easy to use by selecting what was considered
the good parts from other object-oriented languages
Java
• Sometimes necessary to use extensions
to achieve goals of network support and
remote code execution
• Platform independence – important
characteristic
– Programs written in Java must run similarly on
any supported hardware/OS platform.
Programmers should be able to write a
program once, compile it once, and run it
anywhere
Java Flaws
• Running a program requires all 3rd party supporting libraries to
be in the class path. This can be an obstacle to portability,
because its syntax is platform-specific
• License – Not free
• Resource Management/Memory Management
• Language Choices
–
–
–
–
–
Primitives vs. Objects
Non-Virtual Methods
Single Paradigm
Exception Handling
Closure
• Performance
–
–
–
–
Language Constraints
Garbage Collection
Byte Code vs. Native Compilation
Hardware Interfacing/Interfacing with Native Code
What TLT uses Java for:
• To build authoring tools such as Kona and
Tide. Authoring tools are web-based
• TLT uses JavaScript for the front-end of
the authoring tools.
– JavaScript is a scripting language that shares
a similar name and has similar syntax as
Java, but is not directly related to Java. They
are only distantly related. Their main
similarity is they were both derived from the C
programming language
Example of one of TLTs Authoring
Tools - Kona
XML
• Stands for Extensible Markup Language
• General-purpose Markup Language
• Primary function is to facilitate the sharing of
data across different information systems,
particularly via the Internet
• XML is recommended by the World Wide Web
Consortium
• Fee-Free Open Standard
• 2 Levels of Correctness:
– Well-formed
– Valid
XML
• Compiled by a working-group of 11 members
and supported by an interest group of 150
people
• 2 current versions of XML:
– XML 1.0 and XML 1.1
– XML 1.0 is widely implemented and recommended for
general use
– XML 1.1 is not widely implemented and is only
recommended for use by those who need its unique
features
What TLT uses XML for:
• Uses XML for the contents of its system
• All of their programmers must be familiar
with XML since they are all responsible for
the content of the system
• XML has numerous sources of information
and any well-trained programmer can
learn XML relatively easy
UnrealScript
• Scripting language of the Unreal Engine and is
used for authoring game code and gameplay
events
• Unreal Engine is a widely-used game engine
developed by Epic Games
• TLT uses this engine for their systems
• Has similar basic design principles as Java
• Designed by Tom Sweeney and was also
designed for simple, high-level game
programming
What TLT uses UnrealScript for:
• Uses UnrealScript to program inside Unreal
Tournament
• Unreal Tournament is a shoot and play game
• Unreal Tournament houses the Unreal Engine
that TLT uses for their systems
• UnrealScript is another language TLT will allow a
programmer to learn after employment, but it is
preferred they know it beforehand
Other Software Developers
•
•
•
•
Due to
confidentiality
issues could not get
other companies to
divulge that
languages they use
for their products
(perfectly standard
procedure in the
industry)
I was able to go on
EA’s website and
pull the following job
advertisement for a
Software Engineer
As you read the ad
you see they require
a potential
programmer to also
know various
languages just as
TLT does
Required Skills:
* Must be able to demonstrate advanced proficiency with native Linux application
development and debugging using GNU C/C++ and GDB.
* Must have a solid understanding of relational database usage, schema design, and
previous experience with (My)SQL programming.
* Must have a solid understanding of client/server based application development.
* Must have an understanding of multi-threaded application & library design under
Linux.
* Must have an understanding of secure network programming practices.
* Must have the ability to effectively communicate technical issues with technical and
non-technical audiences via written and verbal English-language communications.
* Must have good interpersonal skills. Must be able to train and support internal users.
* Must have the ability to write well documented and efficient, modularized code.
Highly Desirable (Though Not Required) Skills/Knowledge/Experience:
* Experience with Linux kernel (2.4/2.6) development or other low level Linux
programming experience.
* Advanced MySQL (5+) database programming, schema design, and optimization
skills.
* Windows software development and debugging experience using C++, or Managed
C++/C# under NET 2.0.
* Familiar with use of cryptographic algorithms, protocols, and advanced techniques to
develop secure applications.
* Familiar with server-side web development (PHP, Perl, Java) and capable of providing
engineering support to web developers with complex projects.
* Familiar with Tomcat and developing Java web-based applications in that
environment.
* Past/present participation in open-source or other community development projects.
* Game industry experience and/or understanding of the needs of the multiplayer
games audience.
* Current or former player of Dark Age of Camelot, Ultima Online (and/or other
MMOG's.)
The ideal candidate will have a bachelors degree in computer science, 3+ years of
professional C/C++ programming experience (or verifiable open-source contributions),
extensive relational database programming experience, previous secure client/server
development experience with both Windows and Linux/UNIX, and a strong interest in
EA Mythic.
Conclusion
• To be a successful programmer in today’s
programming industry:
– Learn as many languages as you can while in school
– It a language isn’t taught at school, self-teach if
possible with books, tutorials, online-support, etc.
– Learn new languages that may be used at your
current employer
– Be willing to always learn and adapt to ever-changing
technology
Descargar

Chrystel Contreras