Welcome to our continuing series of CodeProject interviews in which we talk to developers about their backgrounds, projects, interests and pet peeves. In this installment we talk to Marcelo Ricardo de Oliveira, a titan of an author who has written 35 articles and won 19 competitions on CodeProject.
Who are you?
My name is Marcelo Ricardo de Oliveira, I was born and live in Guarulhos, a city most (and almost exclusively) known for the International Airport of São Paulo. I am a 38 year-old man, and after many years of single life, for the last few months I have been discovering the pleasures of married life with my lovely wife Luciana and my stepson, Kauê.
I have been working for the last two years as a software developer - basically web developer - at ILang Educação, one of the leading Brazilian LMS (Learning Management Systems) providers.
What do you do?
Currently I am working on the iLang LMS (Language Management System) as a web developer. This project is one of those that became stable, but was never really completed. Our customers are large educational companies, among them Kroton, which is the largest educational company in the world, and DeVry University, ranked 5th. In that scenario, the business requirements are always changing, so our project is an ever-evolving organism that never gets completed.
One of the recent change requests in the project was to implement social interaction in real-time communication or, in other words, enabling students and teachers interact the same way as they do on Facebook. For this task we chose the SignalR.Net real-time framework, but since many of our pages were coded with the MooTools Library and SignalR is built on top of jQuery, we first had to port our JavaScript codebase from one framework to the other. I have just completed a JavaScript code porting from the Mootools to jQuery library on the website, and although it was a lot of work, the hardest part was not the porting itself, but what to do with the plug-ins that were specific for the MooTools library. I had to find equivalent jQuery plugins that worked in the same way, and, in some cases, adapted them to work in the same way. For instance: the picture cropping plugin (for adjusting images once the users uploaded their profile pictures) and the autocomplete plugin (for selecting predefined recipients for a message).
In the years 2010/2011 I worked on a 360 degree feedback assessment project at JBS Friboi. JBS is the largest beef producer in the world, and as expected the company has a huge payroll - there are 140,000 employees worldwide, and at that time the company was in the middle of an acquisition fever. The quick growth of JBS posed a problem for decision making people inside the organization, and IT tools were needed to help the company through the process of evaluating employees' skills and deciding, for example, how to merge teams from redundant areas of different plants, who to promote based on those skills and who not to, as well as to define who was selected for dismissal in the case of a restructuring departments.
At JBS I learned a lot of Scrum and improved my skills by practicing it on daily basis. Coming from a "waterfall model process" mindset, I considered Scrum as a breath of fresh air. Henrik Kniberg's "Scrum From the Trenches" was an obvious reading, and it proved to be an easy and straightforward guide to success. From the start, everything made sense with Scrum. At each iteration, the product owner (the HR person accountable for the project) would sort out priorities and then tell us what to do first, and based on our development velocity, we decided what to deliver in each short sprint of one week. Fortunately we delivered the project in time for the company’s nationwide evaluation. Since then I recommend using Scrum in every project I work in.
Since JBS has offices and industrial plants spread across the entire country, the system would have to take into consideration the lower speed of internet in areas of Brazil that lacked broadband connection. For this reason, development was divided into web applications (mostly for office personnel with broadband) and WPF applications (mostly for plant workers). For the web application we used Asp.Net, C# and ExtJS library, WCF as service layer, NHibernate as ORM framework, Sql Server for OLTP and Lucene.Net as a search engine for static, immutable lists such as employees names. The application for plant workers evaluation was at first an always online WPF application, but given the connectivity issues we later refactored it to work as an offline application with a local SQLite database so that each plant application would eventually sync with a central SQL Server database from time to time.
Between 2005 and 2010 I worked at Spring Wireless as a software developer. Despite the name, Spring was not only a mobile solutions provider but also an end-to-end solutions provider, and our job was to develop mobile applications as well as server-side and backoffice integration and business intelligence. Though Android is king today, back then Windows Mobile reigned supreme in mobile enterprise solutions, so I worked a lot with C# and the .NET Compact Framework. One of the first projects I completed at Spring Wireless was mQuest Studio (later rebranded as mSeries Forms Studio), which was a visual editor for customizable surveys and questionnaires forms required by our customers. It was a smart client Windows Forms application that connected with the database through a middle tier of web services. As the company grew up, there was a split in the development process, so one team became responsible for the "core product" components that was intended as a firmly defined set of unchangeable business and technical requirements (e.g. Brazilian tax calculation, order placing mechanism, geolocation, sync services and so on) and another team was given the task of building customer specific codes on top of those core components. I worked on both teams and was assigned to many projects. One of the last projects I was involved was a integration code generator I made by myself: since database integration web services was a requirement of almost every customer project, and since the only difference between them was the set of tables and columns, I created a code generator that received the custom table structures and produced not only the web service code but also the unit testing fixtures, the SQL server tables and procedures scripts, thus minimizing greatly the development and testing time.
Before 2005 I worked at Ka Solution and some software houses, mostly operating with the WISA stack (Windows / IIS / Sql Server / ASP.NET), VB6/VB.NET and C#, building LoB (Line of Business) applications: Telemarketing order placing systems, invoice processing, accounting systems and sales commission calculation.
What is your development environment?
We use Intel Core 7 iMacs with 32GB as development machines. From the development team I am the only one who doesn’t use two monitors. I chose a single monitor instead of two in order to reduce fatigue and visual stimulation. My only IDE is Visual Studio 2012, with VSCommands package installed. As expected, I also use SQL Server Management Studio and my browser of choice is Chrome, because of its easy and fast debugging tools, although I still have to test the software in Fire Fox and Internet Explorer. All my server-side code is written in C#, and our ORM (Object-Relational Mapping) is Entity Framework 4. All the client code is written in JavaScript, with a big help from jQuery. Currently, I love using Knockout JS as a framework for rendering views under the MVVM pattern and SignalR.Net as a real-time communications framework.
At iLang we work with Team Foundation Server, which controls two branches: the baseline branch and one child branch. Every day occurs a nightly build that compiles the full code base of the iLang solution, which is then moved to a integration test environment and the website functionality is automatically evaluated by Selenium and a series of unit tests. If there is a scheduled release to production website, the test team performs rounds of functional tests to validate both new and old features and assert everything is working fine before the build is deployed to the production environment.
When a bug is found, we use the "production branch" to fix that bug. After checking-in the code, we use a set of custom activities and ms build scripts to automatically install the bug fix in the production environment: dozen of web servers, a few application servers and database servers.
What new tools, languages or frameworks interest you?
As I mentioned before, Knockout Js and SignalR.Net, which are not that new (but are relatively new to me). At home I’m playing with Backbone JS, which is a JavaScript framework for structuring the client-side part of the application. I’m also playing with Paper JS, a HTML5-based 2D vectorial library that is lots of fun.
Last year I developed some Windows Phone 7.5 applications, based on Silverlight and XNA. This year I have plans to start developing Windows Phone 8 and Windows 8 (Metro) applications, as well as the good old WPF.
What is your coding pet peeve?
The name convention I use depends on what is recommended for each language: in JavaScript, pascal case for class names, otherwise camel case everywhere. In C#, pascal case for identifiers, and camel case for parameters and variables. I don’t like variable names starting with underscores. Looks too C++ to me. I don’t like Hungarian notation either.
How did you get started programming?
I started programming in a Zilog Z80 MSX computer in the eighties, when I was 13. At that time, the big, beige 8088 PCs were expensive, boring and ugly. Back then, Brazil was under the market reserve policy for computers, which did nothing other than halt the technology advance of an underdeveloped country. Computers were expensive toys, so I handled my MSX with care. It came with a built-in version of DOS (MSX-DOS), very similar to MS-DOS, and a BASIC language interpreter. All I had was 32 KB or RAM and believe me, it looked like a lot of memory. So, my first language was BASIC, and it didn’t take long before I started programming in Z-80 assembly (my second language). My favorite hobby was to load a game in memory (using a tape recorder!) and once the game was loaded, I started hacking the game code, changing sprites, logos, strings, etc. I did game mods long before that word was invented " src="http://www.codeproject.com/script/Forums/Images/smiley_smile.gif" />
Then my family went through financial difficulties and I stayed years away from computers, before I started programming (as a professional) with Clipper, Visual Basic 3, 4, 5 and 6.
How has the developer community influenced your coding?
Well, the developer community gave me so much ... Take CodeProject for example: I submitted my first article in 2007 just for fun, and published 35 articles so far. This was only possible due to the huge feedback from the development audience. Not only the big names, the MS MVPs and CP MVPs such as Sacha Barber, Pete O’Hanlon, Colin Eberhardt, Daniel Vaughan (just to name a few), but also the occasional reader who downloads your code, test it and give some very useful advice. If it wasn’t for CP readers, I probably wouldn’t bother submitting a second article.
Where do you see yourself in 10 years?
That’s a tough question. Maybe I will still be a programmer, but my heart tells me I want to teach IT to young people. A happy programming teacher, with some spare time to play with code at home, that’s my dream.
If you had one piece of advice for an up-and-coming programmer?
Well, maybe I’d be the one taking the advice from him/her, right? (laughing) Honestly, I’d say: be humble and learn from other people’s mistakes. Don’t be lazy, read a lot, take advantage from the free material on the internet, and participate in developer communities such as CodeProject. This will keep you engaged and motivated all the time.