As I have recently passed my MCSA in Machine Learning, Data Science and Analytics with Microsoft R and Azure ML, I decided to share some thoughts on the topic of Data Science here at CSA Engineering.
The term “Data Science” has been a buzzword for quite some time now, slowly replacing traditional concepts such as business analytics, business intelligence and in some case even classic statistics. As usual, buzzwords tend to be viewed as an “entry ticket” to being considered as a successful organization. Especially big companies, whose scale alone suggests that there should already be a plethora of different data types available to consume, understandably believe they have a great deal to gain from Data Science.
Unfortunately though, many times companies just hire or train specialists, provide them with access to their data and turn them loose, expecting smart ideas and break-through results in an instant. Data Science projects with such a mindset are usually doomed from the get-go and will turn into a real “Buzzkiller”. There should always be, at the very least, an overarching goal to pursue and everyone should commit to it.
Development of mobile applications running on different platforms is always a matter of tradeoff.
An obvious approach is to design a native application for each desired platform. This implies developing and maintaining a code base in a different programming language for each of them: Java for Android, Objective-C or Swift for iPhone, C# for Windows Phone.
Making mention of Windows Phone, Microsoft communicated last year that they are not going to invest any more in new features or hardware for their mobile platform, de facto announcing the death of the Windows Phone. Even though it never gained a large market share, mobile cross platform nowadays definitely means support for Android and iOS.
In between, there are a few toolkits that promise the best of both worlds: a single stack of technology for all platforms, access to all the native APIs and widgets for the developer, and a familiar user experience for the end user. The most mature of them, Xamarin, has been around since 2011. Other solutions such as React Native and Flutter are also worth mentioning.
Xamarin runs on Mono, an open source and multi-platform implementation of the .NET Framework. Microsoft has acquired the company behind Mono and Xamarin in 2016 and massively supports and advertises the toolkit ever since. Applications for Android, iOS and Universal Windows Platform are built using C# and Visual Studio.
Using Xamarin.Android and Xamarin.iOS products, only the business logic can be shared, limiting the potential for code reuse since a specific user interface must be created for each platform.
With Xamarin.Forms the user interface can also be shared across platforms, typically allowing between 80 to 90 percent of code reuse. The UI layer is described with XAML in a very similar way as with WPF. The performance is close to native apps and the controls are rendered as native widgets. Moreover, Xamarin has full access to the Android and iOS standard libraries. The app is larger than a native one, because the .NET Framework (stripped from all unused libraries) is enclosed with it. This means that the .NET virtual machine runs on top of the Java virtual machine. For demanding applications such as games, the performance penalty of Xamarin over a native app might thus become significant.