Saturday, June 14, 2008

So Much Tech, So Little Time

Fifteen years after the public debut of the world wide web, the rate of technological change is only increasing. For a software engineer there are a number of things to know, watch, learn, and re-learn.

Start with the fundamentals: informatics, the hard science and math of software from O(n) all the way to NP-Complete, and keep up with the rapidly evolving standards on emerging technologies.

The Semantic Web stands ready to revolutionize the way we retrieve data across the web. They have a prototype knowledge base for life sciences.

OASIS (Organization for the Advancement of Structured Information Systems is working to promote open standards. Of particular interest is their web services standards. Remote portlets through web services fits nicely into a fully cross-platform SOA technology set. A complete list of standards can be found here.

IEEE SWEBOK (Software Engineering Body Of Knowledge) has everything you need to know about the software development process. Pick your methodology: Waterfall, Spiral, RUP, Agile, Extreme, Wing Dings, with adequate documentation it's all good.

There's the application servers:

IBM WebSphere

BEA WebLogic

BEA has a developer site with lots of good info. So does Apple.

As for web servers, Apache is the only one you need. I'll be upgrading to v2.2 soon.

Portal Servers! The framework is even more powerful with remote portlets and a workflow engine.

SOA - Service Oriented Architecture, the approach to software infrastructure is very important. SOA makes the integration of disparate systems much more manageable.

Data Services (DSP, Hibernate) and the associated XQuery and SQL. Database design is a big part of the job. Data dictionaries, meta-tables, normalized and denormalized relational tables. Data structures are the foundation upon which software is built.

Web Services and WS-* message level security. Transport-level security is handled at the system level, message-level security at the application level.

Workflow engines and the BPEL (Business Process Execution Language) specification.

Is just one development environment ever enough? How about Eclipse for Java, XCode for Objective-C, HTMLkit for web markup and scripting, XMLspy for XML.

For healthcare, there's the HL7 standard. As more advanced HL7 services are brought online, getting the right information to the right people at the right time will become automatic. Caregivers will have information retrieval agents that present the most relevant (AI inference) part of the medical record upon patient admission, and can also search and retrieve on command. There's CCR (Continuity of Care Record) already implemented in pilot programs for transmitting the medical record produced by each visit.

What about the social web, which in math terms is network where nodes are people, edges are personal relationships, and the distance between any two nodes is measured in degrees of Kevin Bacon (Bacon Units). Web 2.0? Or just a big advertising agency? Stay Tuned.

Webtop applications! AJAX, JavaScript, and the associated frameworks. This is how a web application can mimic the controls of any software UI, finally doing away with the limitations of page-level server requests.

All the meanwhile, one must keep working on better object oriented design and program optimization. The languages to be fluent in are Java, C, C++, Objective-C, C#. Scripting languages such as Perl, Python, Ruby, unix shell do certain things really well. REST interfaces, EJB calls, and web services are all good choices for different remote functions. The right tool for the right job.

I have a lot more reading to do.

No comments: