From web to mobile development

desktop-mobileI started my developer career as a web developer, using PHP. Soon after I switched to the .NET ecosystem to continue web development using C# and the ASP .NET MVC framework. I was creating web applications for my entire professional life until recently.

A few months ago I started working on mobile applications for Android and iOS, yet still with C# thanks to Xamarin. I am creating this blog post to share how I feel after this change.

Why this choice

You might wonder why I decided to switch from web development to mobile development. Because I wanted to work on something new in order to learn new skills, even if I still have a lot to learn regarding web programming.

I also think that mobile applications still have a bright future, sure there are already a lot of them on the existing stores. But new mobile devices are coming, like the smart-watches, and they will provide new opportunities for the developers. It is a good time, in my opinion, to learn how to create applications for mobile devices.

At my current company there was an opportunity to work on the new Android and iOS applications using my favorite language (C#) so why not take this chance.

A new paradigm

I knew that the way of programming would change since I already experienced mobile applications development with a project on Windows Phone. But still I was not prepared for what I have to do and I don’t think I could have been prepared.

Unlike a website an application has a very specific life cycle, you don’t just answer a request with a response. Almost everything I learned building web applications does not help me, the paradigm is entirely new.

Asynchronous programming is mandatory in this world, if everything runs on the User Interface (UI) thread the application will freeze. I always wanted to improve my skills in this area, looks like I found a good opportunity for this goal.

The separation of concern is also different, no more Model View Controller (MVC), now it is time to use the Model View ViewModel (MVVM) pattern. Even if I already used it (WPF and Windows Phone), it was not at the same level and I still have a lot to learn.

And of course you have the emulators to test the application, each time you want to test you have to build and deploy it, you cannot just refresh the page to see the changes. The feedback loop is long, several minutes most of the time, therefore debugging feels slow and debugging is important when starting with this technology.

Outside the comfort zone

I started working on the applications about two months ago and I still have a lot to learn. I need to deal with two ecosystems I know nothing about (Android and iOS), two frameworks I know nothing about (Xamarin and MvvmCross) and the business requirements which are not the easiest to meet. But at least I know how to use C#.

At the moment I struggle everyday, I have a lot to take into consideration, mostly some “How?” questions related to my new development environment. and also a lot of “What if?”: “What if the network is not available?”, “What if this solution is too slow?”, “How to provide the best experience for our clients?”…

Sometimes I cannot manage to produce anything for an entire day, and to be honest I feel worthless, I feel like I am a fraud… How can I consider myself has a professional software developer if I am not able to produce anything of value with my work?

Well, I guess this how it feels to step outside my comfort zone and I think I am in a ravine of the learning phase.

Learning Rate With Ravines
Learning Rate With Ravines

I will not give up

The thing is, that I am not the only one in this situation, I am not the only one to struggle. In the team we all have to deal with the same amount of learning, senior developers and junior ones.

When I take a look at the journey I began two months ago I realize that the route is still long but I also learned a lot, I am more familiar with the concepts of asynchronous programming and those of the MVVM pattern.

If I want to consider myself as a professional I will complete my journey and I will learn the skills I lack in order to produce the value our clients expect. Even if my work is painful from time to time, I have no regret, this is a massive opportunity to learn. I will succeed no matter how much time I need. And I hope to be able to share some Xamarin tips and tricks on this blog in the future.

See you next time!

Starting a blog

home-officeThe first time I was thinking of creating a blog was about 5 years ago, when I was still in computer science school. At the moment it felt like a really good way to get noticed and it is. But the main concern I had at that time was: I don’t know anything to blog about, there were already blog posts about everything.

What I learned since then is that it is not true and it does not matter! A blog aims to show what you are able to do and what are the topics you like.

I finally created my first technical blog about a year and a half ago (yes, that’s a long time after my first mention of a blog). It was in french and mostly focused on web development with ASP .NET MVC. I wrote 5 articles in 5 months… And after that I drop it. I did not have a main theme for it therefore I did not have much ideas for the articles. And at the end I was not motivated to write posts. I did not consider this experience as a failure but more as a learning opportunity.

In august 2014 I decided to fight back by creating a new blog, in english this time (you are reading it) with a more defined theme. I had more motivation to post articles because I had ideas. I’ve been able to post more frequently in comparison of my first blog even if I chose to use a language different from my native one.

I passed another milestone in february this year. I subscribed to John Sonmez (creator of SimpleProgrammer.com) email course on how to create a successful blog. You can access this course by following this link: Create a blog that boosts your career.

Well, I already owned a blog, I did not need to know how to create one. But since it’s free I tested it to see if I could get some interesting advises for my personal website. By subscribing you will receive lessons every monday and thursday with an exercise to complete for each lesson. I liked this format, it provides a good pace.

The first thing to know when creating a blog is to have a main theme for the articles you will write. I lacked this for my first blog and I can only approved this.

The second lesson to learn when creating a blog is to create it! Just launch it, do not be afraid. Thinking of creating a blog is good, doing it is better. You don’t have to wait for 4 years like I did. And since you have a theme, you can register a domain name to match it.

Not having ideas for your blog can be deadly for your site, I experienced that as well. So this is why it is important to have a list of topics with all the subject you want to blog about. When you have an idea, put it in your list. It does not mean you will have to blog about it but it can give you other ideas. I personally use an online kanban board (with KanbanFlow) to keep track of all my ideas, it allows me to access it rapidly and to add new topic whenever I want. You can see my personal list on the screenshot below, it will let you have an idea of what I will blog about in the future.

kanban-list

Consistency is also important when posting articles, commit yourself to a posting schedule. When you visit a blog with no update for several months, it is likely that you will think that this blog is dead.

John Sonmez provides more lessons in is course and this is why I encouraged you to sign up if you want to start a blog but you don’t really know how or if you have doubts about it. Even if I already had a blog when I did it myself I learned valuable things, for free!

Having a successful blog is not easy, it demands time and effort but it is rewarding. At the moment, I don’t consider my blog as a successful one but I own all the keys to make this a reality. And what I know for sure is that I really enjoy posting on my new blog. It helps me improving my writing skills and learning new topics.

See you next time!

2014 is over, welcome in 2015

happy-new-year-2015Another year is over and it is time for me to wish you a happy new year!

I hope 2014 has treated you well as it did for me. During this year I found a new job that I really enjoy which fits all my current needs.

In 2014 I also met a lot of interesting people through meetups, these were formidable opportunity to discover new technics and ideas and I will continue on this path in 2015.

I also created this new blog to expose my ideas regarding software development and I like writing new articles for it and I hope you like them as well. I had visitors from all around the world and I want to thank you for that, it is very motivating for me. And don’t worry the articles (the technical ones) are coming back shortly.

Once again: Happy New Year 2015 and thank you!

See you next time!

I am a .NET developer and this is my world

Microsoft .NET

“What do you do ?”

This simple question can be a real pain to answer for people like me. It is not because I’m shy or anything like this. It’s because I work in a complex domain, software development, and it can be really hard to explain especially to non technical people. Yet some of them were/are interested by the topic. And this is why I’m creating this blog post. I want to give them an overview of what I do without being too technical.

The short answer to the previous question is : “I am a .NET developer”. A what ?! First of all, I am a developer and thus I create software/programs for computers and to do so I use a technology called .NET (pronounced “dotnet”).

Software development

As a developer/programmer I spend a lot of my time writing code. This code is used to do specifics actions on a computer in an automated way, this is what we called a program or a software. People use software everyday and in a lot of things. A video game is a software, a website is a software, the web browser you use to visit these websites is also a software. Where there are electronic components it is likely that there are also some programs written by developers. The code of these programs are written using programming languages and there are a lot of them and I mostly use the one called CSharp (C#) which leads me to the next topic.

Microsoft .NET

.NET is a framework developed by Microsoft. A framewhat ?! You can check the Wikipedia page to have a better understanding (or not) of a software framework but let’s say that is the kind of toolbox that help a programmer to build software.

So is C# a framework ? No, C# and .NET are two different things. C# is a programming language which is compatible with the .NET framework, it means that C# can use the functionalities present in .NET. It is possible to use .NET with a different language than C# (a list of compatible languages can be found here), for example I made an introduction for F# in my last article which can work with .NET. It is also possible to use C# without .NET even if it is not recommended since this language has been created for the framework. The blog post you are currently reading can be an analogy to this concept : I used several tools (~ a framework) to help me write it and I chose to use english (language) to express my thoughts, I could have done the same in french with the same tools to express the same thoughts.

So what can people do with the .NET framework and a compatible language ?

There is a part of the framework called ASP .NET that allows developers to build websites and other web-based functionnalities. I use the features provided by this part of the framework in my everyday job, especially the MVC extension and a few others.

I also use a feature called WCF (Windows Communication Foundation) in order to create services that provide information across the Internet. For example the Facebook application on a smartphone will use these kind of services to retrieve your personal informations and the updates related to your account.

The .NET framework offers features to develop applications (on a computer or on a smartphone) with WPF (Windows Presentation Foundation). Back in school I used this technology to build a media player like the one available in Windows.

There are also some tools available with .NET to ease the development process. The .NET developer best friend is Visual Studio, this software allows a programmer to write code in C# (or in another language) and to test it, debug it and organize it. We also use a tool called TFS (Team Foundation Server) which provides team management functionnalities. TFS also provides source control management that allow a team to create backups of its work.

I won’t go into the details but the .NET framework also provides functionnalities and tools for video game creation (on PC, Xbox, Kinect), for cloud management (Azure) and much more. Microsoft is behind this framework so it can be used with almost every product this company has to offer. This is what I like about this technology : it’s wide and offers a lot of interesting features.

I hope this will help you have a better understanding of my profession and passion. Feel free to comment if some parts are still confusing or too technical.

See you next time !

The Clean Coder : Pressure

pressureWhen a surgeon is operating under pressure do you want him to stay calm and focused or to rush ? Professional developers are calm and decisive under pressure. They have best practices and principles to avoid making mistakes, they are made to be followed during pressure moments.

If you don’t like working under pressure, the first thing to do is to avoid the situations that cause it. As seen in the previous chapter (“Estimation”) do not force you into a stress situation by committing yourself to an unrealistic deadline you have to meet.

It is also important to “stay clean”, do not succumb to the temptation of the “quick & dirty” path. As it says it is dirty and you know you’ll have to deal with the consequences at some point. Furthermore it is not always that quick because the “quick & dirty” approach creates technical debt on your system and at some point your application is just a swamp and you are doing harm to your structure.

Stressful moments are not always avoidable, there are times when you will have to work under pressure. It these situations it is important not to panic, not to rush and stay focused. Rushing will in almost every case drive you deeper into the hole. Instead you should slow down and think of the problem you are facing in order to find the best path toward the solution.

Do not hesitate to communicate to your team that you are in trouble, look for input and guidance, avoid creating surprises for your teamates. You can practice pair programming to help you with your problem. Your partner will see the mistakes you are making, will have ideas you did not think of, will keep you from panicking and more. You are stronger when working as a team so do not hesitate to be the partner when someone else is struggling.

Relying on you disciplines is also important, you have them to give you guidance and they are the most useful during pressure moments. Do not abandon them at any cost, be even more dedicated toward them as usual. If you to TDD, write more tests. If you are a refactorer, do more refactoring. If you write small methods, make them even smaller. You practice these because you believe in them and you know it works, rely on your disciplines !

The best way to deal with pressure is to avoid it but when it is not possible you must remain calm and focused, communicate with others and trust your disciplines.

See you next time for “Collaboration” !