MAZEN ISSA

SOFTWARE DEVELOPER

Technology Blog

Mobile Native Development vs. Native "Frameworks"

Posted at

I'm going straight to the point as this is my personal developer experience. I've tried all of Apache Cordova, React Native and Xamarin and in all of them I face the challenge of needing to dig into platform-specific details as soon as a non-trivial thing need to be built.

It's not about the languages since I'm already well versed with JavaScript, HTML, CSS required for Cordova, the JSX extension used with React Native is just very clever, and finally C# which is a primary .NET language used with Xamarin is actually my favorite language that I have been using for many years.

Actually the ability to use languages other than the old and dry (and verbose) Java for Android for example is an advantage since the aforementioned languages used with these Native Frameworks are modern and convenient, but there is something unattractive about the learning curve.

The primary selling point of mobile native development frameworks is their build-once-publish-anywhere concept. If you build a simple mobile app with one of these frameworks, you are ready to deploy to iOS (if you have a Mac), Android, and possibly other mobile platforms. This is a conceptually amazing reduction of the amount of work needed and indeed a conceptually great productivity boost.

I say conceptually because realistically, if it's a simple app then the amount of work saved isn't that much. If you're a C# developer or a Java developer it's not really a big deal for you to build your simple app with XCode on a Mac, nor should it take you much time since it's a simple app. An XCode/iOS developer can also experience a similar thing using Visual Studio: even if a developer might not be familiar with an environment or the details of a language, he or she can understand and get to speed with the basics rather quickly.

The issue is when you go a little beyond the basic functionality. In my experience, using any of the mentioned frameworks for any complex work, drags you into platform specific issues and almost immediately you find yourself needing to learn a lot about each platform.

This brings in another issue: the layer of abstraction of the native development framework takes you away from the native platform when, at the same time, it requires you to be closer to the platform to build your little more advanced functionality. This is the 'plugin-system' as it is known in the native frameworks. The premise or even promise of the native frameworks is not compatible with such an experience.

So it boils down to: a layer of abstraction from the native platform that requires you to use a plugin system to build platform specific. Yes, as the plugin system evolves and the plugin collection expands this issue will improve, but still there is another issue.

The other issue is exceptions. If something goes wrong, facing Gradle/Android platform exceptions alone is much more manageable than facing those same exceptions hidden inside Xamarin (or React Natives) exceptions. Sometimes you even have to deal with issues pertaining to a particular use of the native tools caused by the native framework that is supposed to make your life easier.

I switched from using these Native development frameworks to actually using the native development tools because the learning curve associated with using a framework is longer ans steeper than just learning the native tools.

Simply put, learning Android is easier than learning Android as well as Xamarin.

The caveats with the native tools are still there of course, for example I won't be able to use C# with the native tools but as I said as a programmer I can manage the differences between C# and Java (which are many indeed).

It's worth noting that I'm writing this a couple of weeks after the announcement that Kotlin will be an official language for Android development and will be supported in Android Studio. Java is admittedly isn't very beautiful and the arrival of Kotlin could make Android development using a native language and tools a much better thing.

Visual Studio 2017

Posted at

Visual Studio, one of the best integrated development environments worldwide, is getting better and better. .NET languages such as C# are also evolving in impressive ways.

See Visual Studio 2017 release notes here:
https://www.visualstudio.com/en-us/news/releasenotes/vs2017-relnotes

Improvements to the IDE spans all aspects of development. C#7 includes very interesting features that crosses one's mind as they're developing such as returning tupes from a method:

public (int number, string message) GiveMeNumberAndMessage() {

    return (1, "hello!");

}

As you can see, this might be very useful to some as they develop. Looks better than a Tuple or a specific class and is strongly typed of course.

There are many improvements to the developer experience and VSIX extensions as well. Great Dev Ex getting better.

10-year-old teenage dream of becoming a @Microsoft Certified Solution Developer finally realized

Posted at

I remember when I was a teenager I was fascinated by the notion of being a Microsoft Certified developer. I was very excited about software development and I have taught myself Visual Basic. My development roots started with BASIC on an MSX computer.

I was and still am very curious about technology and computers specifically provided me with an amazing world to explore. Hardware and Sofware both were very intriguing, except software had the advantage of being more explorable. Although I had disassembled my Pentium computer several times (despite my parent's resistance to what they called vandalism), but that was costly and the parts that I got out was not modifiable. 

That why my curiosity was channeled towards software. From system files to programming. 
My development experience as a high-school teenager was definitely above average and impressed those who became aware of it (I really kept much to myself as a child). To my parents, whether I'm developing, browsing, listening to music, playing games, or studying, having me on the computer meant: Mazen is spending too much time playing on the computer. That was a very big deal about my life but I just want to talk now about finally obtaining the Microsoft Certified Solution Developer certification that I have dreamt about since high school. 

I had no idea what it would take; but I was confident and passionate. I looked up some certifications issued by Microsoft and learned about MCAD (Microsoft Certified Application Developer, which I think is retired now) and the even fancier one MCSD. I wanted to take some courses to aid in my certification but in the town that I have lived there wasn't enough people interested in taking such advanced courses so such a course wouldn't run. We barely had internet at home. 

At that time I didn't know that the MCSD certification is actually a composite of more than one other certification. As is the case in most including the one that I recently got, the Web Applications MCSD certification, it is 3. I had no idea that that was the case as a high-schooler, but I knew I just wanted to get that fancy certificate. I had no idea what I was aiming for but still it was something I looked up towards as a dream. 

Anyways, I got my first Microsoft Certifications, two MCTSs, after graduating college. The years just passed by and I was distracted by other personal projects, activities and internships during college that it didn't occur to me to try getting certified again until graduation. 

Three years after graduating, just a couple of days ago, I got another MCTS (Developing Microsoft Azure and Web Services) and finally became an MCSD. 

It's been 10 years since I first learnt about the MCSD certification. It's kind of surreal thinking that such a thing would take me a decade to accomplish. A childhood dream finally realized. 

AngularJS ng Recursive Directives

Posted at

Summary:
Recursive directives work without angular post-link recursion plumbing.

Plunker:


Story:

Angular is a very powerful framework. I use it to easily bind my JSON models to client-side views. Only after a hard experience with a project filled with dynamic functionality, complicated data and responsive AJAX stuff in which I hand-baked everything, including generation of HTML elements based on the JavaScript models, I learned that I should use a client MVC framework such as Angular.

I already have ReactJS on my radar while still mastering AngularJS.

The thing today is about recursive directives. I tried it once and got into a lot of trouble, I read online and found out easy ways of using