Several computer science classes focus on algorithms. These include classes in data structures, artificial intelligence, computer graphics and numerical computing.
Some of these data structures are quite involved and I have felt that they should be incorporated inside system libraries. Many of the classical data structures have in the 1990s become a staple of standard libraries such as the Standard Template Library of C++ and with the frameworks included with the Java and .NET runtimes. However, libraries for numerical computing (manipulating matrices and performing statistics), handling artificial intelligence, or doing computationally geometry have still not found themselves as full-class citizens in modern APIs, although 3D graphics do have some presence.
There have been some recent activity in developing consumable AI libraries in the past few years at Microsoft.
With SQL Server 2005, Microsoft incorporated various AI and data mining packages: decision trees, association rules, naïve Bayes, sequence clustering, time series, neural nets, and text mining. A few years ago, Microsoft developed the Windows Solver Foundation libraries that include optimization, solvers, and latent term-rewriting functionality. A Technical Computing Initiative was launched, but some of the players involved have left the company and the output from the initiative remains to be seen. It's also not clear the goals of this initiative.
Microsoft had for a long while made available a Speech API, but its recognition capabilities are somewhat weak and frustrating. There is still no general purpose Natural Language API; this is somewhat complicated by the need to support multiple languages.
Recent developer events have introduced new libraries from research:
- Infer.NET supports probabilistic inference. The application of this library though is quite limited.
- A more promising library called Semantic Engine includes a range of technologies from Machine Learning, Computer Vision, Natural Language and others.
There are some downsides to most of these new libraries. They are based on managed code and currently have restrictions that prohibit non-internal commercial use.