argument

A simple great argumentation tool t...

When I finish my computer science course in university, after some time working in big companies, I realized that I was somehow prepared for the tec...

Hadoop

Hadoop in 5 minutes for beginners

So, you don’t know nothing about Hadoop and want to have just a simple picture of it? This post its for you! So, you have a lot of data (TBs ...

Is it time to respect the professional colleagues

It is time to respect your professi...

I have been in the software industry for some years and I always see the same behavior over and over, lack of respect to professional colleagues,...

startup, developer, companies, managing

The Startup developers syndrome

When I was studding in college there were these projects that toke me a lot of nights sleep just to deliver them before the deadline. They were databa...

Social Marketing & SEO

future mega trends

50 Powerful Statistics About Tech Mega Trends Affecting Every Business

Great Slideshare presentation about present and future mega trends. Contains very useful statistics if you want to understand the future of...

Managing

argument

A simple great argumentation tool to improve your work and professional environment

When I finish my computer science course in university, after some time working in big companies, ...

Architecture & Developing

Hadoop

Hadoop in 5 minutes for beginners

So, you don’t know nothing about Hadoop and want to have just a simple picture of it? This post its for you! So, you have a lot of ...

Gamification

MC900439598

Gamification in the family

One of these days I went out to lunch with my family. My daughter does not like to eat, it is complicated to sit an entire meal just to eat....

Others

MP900049738

The twin paradox

One of the most fascinating things to me are the paradoxes. Its something that’s true but its false, its something that’s right but it...

A simple great argumentation tool to improve your work and professional environment

argument

When I finish my computer science course in university, after some time working in big companies, I realized that I was somehow prepared for the technical challenges, but I didn’t know how to work  socially in the companies. One thing is to know how doing the technical work, another is about working with people. And the issues, are always about people, how to influence, persuade, office games, power control games, silence wars, etc.. It’s a very different role than the technical one, but it is the one that makes you grow in the company. Even if you are a tech lover, you must get soft skills.

I am not trying to give a pessimistic vision of the work, actually I am working in a quite good work environment, but this is how these things are, because people like to grow in the company, they like to feel safe, but for that, they start a  “fight” with their colleagues, they try to know their intentions and act accordingly considering their own intentions (sometimes it’s not a conscious intention, it is just us: humans!). You can observe these moves around you if you try.

 

In this post I just want to give you a small piece of soft skills, improving your way of managing your verbal and written argumentation, in a way that will improve the quality of your arguments, in a constructive way, so the work and personal environment around you will be better. And when people feel good around you, it’s a good thing for you in every way.

There are a lot of argumentation tools (really a lot), but today I only want to write about one of my favorites: The Tense.

When you are in a conversation, or just hearing someone on a TV show or movie, the speech is always in one of 3 tenses:

-          Past

-          Present

-          Future

 

Obvious! But it tells you a lot, even without knowing what is being said! (It is a kind of nonverbal language in the verbal language)

Whey are they important?

Past Tense

A conversation in the past tense is always about blaming, forensic analysis, reporting things, telling about something that’s happened. You can observe this in movies or TV shows about criminals, police, investigation, or in divorce talks. Most of the argumentation, it’s about trying to find the guilty, blaming something, trying to conclude that something or someone did something, right or wrong, analyzing what has been done or happened, is was good or not,  it was finished or not.

When 2 people are arguing badly, you hear a lot about the past! If you are/were in a relationship you probably (very high) had conversations in this tense! “You did that! Not it was you! I was just”… And go on and on and on ;)

This kind of tense it is not constructive, avoid it. (Of course, this is not a rule, sometimes you have to talk in this tense, for instance, every day in my daily scrum meeting I have to talk about what I have done in the previous day, but not in an discussion about something to be cleared, where you want to be viewed as constructive)

NOTE: In the past tense you can win an argument, but: You don’t use argumentation to win but to persuade. You can win an argument, but you could lose your relationship, friend, reputation, job, etc. Try to persuade, lead someone to do what you want, and not doing it by force. You can win by force, but in the end you will lose. Be wise.

 

Present Tense

A conversation in the present tense doesn’t go anywhere, it is when you are talking about what is right or wrong, giving opinions or stating a fact. It tends to finish conversations, because you are not going to anywhere in the conversation, it is not open to discussion, it is just about facts. It is very used as a politician’s tool, to say the obvious but not giving any solution. Observe the people that talks in the present tense, if you analysis the content of their discourse, they will not present a solution to things, just stating facts and issues (usually coming from the past), however, during the discourse it gives the illusion to the audience they are talking about solutions (which is in the future tense).

You want to use this tense to stating facts about what are you doing, but try to add a future tense (see below) to improve the quality of your speech. Something like, I am doing this and will improve the quality of the final product, or build a good relationship with the customer, etc.

NOTE: However, it can be a great tool when used to “create” an extremely bad situation and propose some relief out of that situation to the audience by just using a transition from present to the future tense – it is used as a persuasive tool. Ex:“The water is very polluted, very bad for our children and our health, but there is a solution, with this water purifier machine, your body will be healthy from now on…” See: Present/Past (bad)->Future (good)! It works great for salesmen! You are welcome for the tip ;)

 

Future Tense

You should always try to argue in this tense. When you talk in the future, you bring options, choices, hope. You bring people into conversation, you make people think. You are showing that you are interested in the progress of your company, you are trying to value their future, you are really hearing about ideas because you ask things about it, you promote choices and hope, ignoring possible “blames” of the past, because there is nothing to do about it. You are the solution person, not the troubled person. You talk about growing, not guilty. You talk about future, not past.

You can observe this type of discourse in the people who are winners. “I am doing my best and I will keep working to improve myself”, “Yes, we can”, “I will work everyday to be the best…”, “Things will change, we will make the change together” – There is always a sense of future and hope in the messages. You can try to improve your discourse during the day be changing a little bit at a time.

NOTE: Be careful, however, with too much future, because the future aren’t facts, just choices, hope and desire, be careful if someone is always talking in the future but without any real solutions. In this case, ask how.

 

 Final notes

You can construct an argument considering transitions between the past, present and tenses, but always try to start from the past to the future, like: “We were in a bad situation without knowing what to do, now we are fighting it and with effort and your help, we can do this and thatwhat ideas can you propose?”. Probably you heard similar discourses with this pattern in the past and they seemed great!

This is not a formula and not by any means a complete course in the subject, there are other considerations in the points above, but I want to show how simple is to improve the quality of an environment only considering the tense in a conversation.

TIP: Don’t forget, you can use this knowledge as an argumentation tool to improve your soft skills, but you could and should use it too, to understand how and why someone is talking about something.

 

 

 

 

Hadoop in 5 minutes for beginners

01_Hadoop_full

So, you don’t know nothing about Hadoop and want to have just a simple picture of it? This post its for you!

So, you have a lot of data (TBs or more), spread all over the place sometimes structured sometimes not structured and you want to query these data. You are thinking by now, I will need a lot of power to query data “organized” like this. Yes, you need, you need Hadoop and all the Big Data techs around it.

What is Hadoop?

Wikipedia has this interesting fact: “Hadoop was created by Doug Cutting and Mike Cafarella in 2005. Cutting, who was working at Yahoo! at the time,[6] named it after his son’s toy elephant

 

As Apache states “The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage.”

What?

You have a system (that can be logically organized in  cluster >> racks >> nodes) with several components to handle distributed processing and files between a lot of machines. You have, between others, HDFS, a distributed file system, and an implementation of the Map Reduce pattern.

HDFS is a file system that works over all machines in the system, but you only see it as one file system, because is is distributed over several machines. How about my local file system? Still exists, the HDFS works over your local file system. (ex: “hadoop fs –ls“ a command in your local file system to runs a “ls” in the HDFS)

The MapReduce is a pattern (see here) to process large data sets (ok, you can use for small data sets too, because it’s a pattern, not a product, and you can implement it in any language you want with very little code). Hadoop uses this pattern to run your queries over the data. (It uses tasks, jobs, etc. for your requests, but always using this pattern in the execution)

So, by now you have a Distributed File System and an engine of tasks and jobs to run applications implemented using the Map Reduce pattern. Yes you are right.

So, how can I query all this data? Well, you can implement applications in any language, usually Java where you control the tasks, jobs, the Map and Reduce functions for the Map Reduce pattern, etc. A lot of work to do. Well, you can use other techs of Big Data that will help you to implement these queries and handle operations over your data, these are some of the languages(platforms) you can use and simplify your programmers life:

- PIG (yes, it is this name) – example extracted from Apache. Loading and saving data…

/* id.pig */

A = load 'passwd' using PigStorage(':');  -- load the passwd file 
B = foreach A generate $0 as id;  -- extract the user IDs 
store B into ‘id.out’;  -- write the results to a file name id.out

- Hive (“The Apache Hive™ data warehouse software facilitates querying and managing large datasets residing in distributed storage.”) – some examples from Apache? More SQL like but it is not SQL as we know it.

CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

- Jaql – A JSON Language used now by IBM BigInsights. An example from the Project Page

//
// Bind to variable
$log  = read(hdfs(“log”));
$user = read(hdfs(“user”));

//
// Query 1: filter and transform
$log
-> filter $.from == 101
-> transform { mandatory: $.msg };

// result …
[
{
"mandatory": "Hello, world!"
}
]

- Others –The are other projects and languages but for a introduction I think these 3 shows different ways of querying the data.

 

The overall picture

You install Hadoop, you will have an HDFS and Map Reduce engine. For querying the data you can develop yourself code or you can use languages like (PIG, HIVE, JAQL, …) to handle all the Map Reduce stuff behind the scenes. Yes, all the querying from these languages are always translated to tasks which run Map Reduce patterns, you don’t have to worry about the Map Reduce implementation, that is why its fast and your processing and data could be spread over thousands of machines!

It is time to respect your professional colleagues

It is time to respect your professional colleague

I have been in the software industry for some years and I always see the same behavior over and over, lack of respect to professional colleagues, not the ones that are present in every day but the ones that are not there to defend themselves, who have developed the current version of the software and now are the excuse to the errors, bugs and problems that arise in the new team.

It is always the same behavior pattern:

A new team (or new developers) arrive to a company to continue the development of a software project, because there were some developers who changed their job and “accepted a new challenge” (well, they have gone to a better place! At least they hope!)

The new developers started to code and continue the previous work

They have difficulties, as we all have when we work in another’s code, because coding is somehow a creative process and each person has his own style, even when following code guidelines.

They want to impress the new bosses, so they will not want to show any weaknesses in their image

So, they blame the persons that aren’t there anymore

 

I will not say that the new developers aren’t right, but it is always the same path of behavior, and let me tell you, most of the times, and I am sure you will agree with me, the things aren’t right because the development context forced them to develop with those problems, like lack of time, bad management, no requirements, scope undefined, and so on. They have done the best with the tools and information they had at the time, and probably they left the project, not because they were bad professionals but because they get tired of the bad conditions, and so they “have accepted a new challenge”.

 

There are good developers and persons whose developing shouldn’t be included in their CV, and others who born to be developers: But there are great projects developed by bad developers and bad projects developed by skilled developers.

In the current days people rotate a lot between companies, so remember that after you leave the project the next guy will say the same thing about your work.

 

You shall respect your professional colleague as yourself.

The Startup developers syndrome

MH900422589When I was studding in college there were these projects that toke me a lot of nights sleep just to deliver them before the deadline. They were database, programming and network projects, the usual preparation/education for the future job or Startup company.

After finishing the college I started to work for IT Companies, and let me tell you I was lucky because I didn’t suffer from “The syndrome of the Startup”. What is this syndrome?

Let me start, first describe how I have observed the IT world.

Along these years since I left school I started to see, that most companies pay for 8 hour/day job but they “ask” for more than this to their developers/workers without any compensation for that, like if it was an obligation. Why?

  • They do not work the 8 hours in a fair way?
  • They deserve less than a car mechanic or a mason? Because these guys if they work 12 hours you must pay them those hours, or your car will not get out from from the repair shop!
  • They don’t deserve the salary?

Of course, the reasons are most of the time others, and I can enumerate some of them:

  • The project manager probably is incompetent, because it couldn’t develop a project plan with the right resources, time and cost, so he hides it with more hours in the project.
  • The sales people just sold a project without questioning the experts to give them the right numbers for resources, time, etc..
  • The analyst team did not collect correctly the requirements so new ones started to pop as popcorns.
  • The manager just wants to improve his revenue in his Excel sheet so his commission at the end of the year can get him to take holidays in a better place, or buy a new car, or get a promotion!
  • “There are a lot of people looking for job these days, if they don’t like it, we can get other’s that are available to work more hours.”

But, for me, the main reason its because the IT workers accept this! Why?

  • Some of them they just think its normal.
    • Why is it normal to be paid for 8 hours and work 10/12 a day? Besides the low quality of life your salary just decreased between 25-50%!
  • They have afraid that if they don’t work these extra hours the managers will not promote them or they will start to talk negatively about them to other managers.
    • First, you will be promoted by your technical and soft skills. If you are very good in these skills, even if you work just the regular 8 hours, against some cultural trends in your company, the company will promote you anyway, because you are good and bring money to the company. Its not the time, it’s the quality and ROI.
    • Second, I know there are companies that talk negatively about the employees who don’t work the hours they expect, they say “they aren’t working as a team”. Well, there is a fallacy here, because if you work more hours and your salary it’s the same, the managers they get a raise because their revenue raises, but the only think you can get it’s a small raise in you salary, so if really you belong to a team everybody should win right?
    • Third, if the company have customers where to put you working, or projects to develop, that fits your qualities you will have work even working only 8 hours. If the company doesn’t have a place for you, you return to the office and after 2-3 months you will be invited to leave, event after you work more than the 8 hours/day.

Other reason that I see a lot, and that’s why I started this post talking about the college is that most developers they have his mind context to start a Startup company, and they work for IT companies with this thought that they are building something for them, like if they will get a reward after the project is finished. But it is so wrong, they haven’t build anything for them, just acquired experience. If in that time they have applied their knowledge to build a project for them then they have acquired not only developer experience but sales, marketing, leadership, entrepreneurship and managing experience, and they have done a great step in their professional life’s. Even if their project/startup didn’t work they have now experience to reach a higher role, like a team leader or manager?

I call this the “The Startup developers syndrome”, because most developers work with a mind set of a Startup but they are working for others where the only reward will be the salary.

 

NOTE: I am not trying to say the companies are bad and workers explored. There are bad companies? Yes! There are bad workers? Yes! There are great companies? Of course, As I said above, I had the luck to work in some of them! There are workers who just want a career, a job role, and they work extra hours to show to their bosses their dedication expecting a promotion. Sometimes workers need to miss a day or other just to handle private things and lot of companies they don’t discount from their salaries this days or hours, so its fair that the worker offer extra hours when the company need it, I think its very healthy for the relation between the company and the worker. What I think it’s not fair is the company, systematically creating the idea that working always more than 8 hours its normal and an “obligation”.

The 10 Types of Testing you should know.

testIf you aspire to be or you already are a Senior in Software Industry you must understand the language used in all the development cycles of the project, and testing its one of the most important, because its about quality to the end user (at least). Besides this, sometimes its necessary to develop the project thinking about the kind of tests that will be done in the product, for instance, if there will be an automated test in your product maybe you have to prepare the architecture and code to facilitate the implementation of this kind of test (without compromising the core behavior of the application). One example of this is the use of the inversion of control and dependency injection patterns, they  facilitate a lot the using of Mocks, which are very used in unit testing and other types of testing. So now you have a software decision in the architecture because of the way you will want to test your application.

 

Smoke Testing

Usually the first tests after each release before the application goes to the “real” testing. It tests major behavior of the application to see if it is minimally stable before it can go to regression and functional testing. Just tests major functionality, like open windows, see if buttons are working, grids are displaying results. It tries to detect major problems in the application before going to test.

The name Smoke Test comes form the way some hardware was tested, you switch on the hardware and observe if there is smoke arising. Other examples are from plumbing, where artificially smoke is injected in the pipes to see if there are leaks.

Functional Testing

As the name says the objective is to test the functionality of the application against the functional specification document. One of the most important tests because it tests the purpose/conformity of the application.

Non Functional Testing

If functional testing tests the functional requirements, the non functional testing tests the non functional requirements, like performance, compatibilities, ergonomics, security, stress, reliability, scalability, etc. Depending of the application, these tests are so important as the functional tests. If you consider a commercial web site, it can have a great design and almost 100% bug free, but if it is slow for the end user is a question of time until no one visit it anymore.

Regression Testing

This test is used to ensure that changes made to the application in fixes or enhancements are not impacting the functionality that was already working. Usually the execution of unit tests are included here.

Sanity Testing

There are a lot of people thinking that this test it’s the same as Smoke Tests. But are subtle differences between them:

Smoke Tests

  • Usually scripted
  • Ensure that the major and crucial functions of the application are working
  • Applied before going to functional and regression testing

Sanity Tests

  • It’s a kind of small regression test narrowed to a small set of functional areas
  • Usually is unscripted
  • Is used to find potential problems after changes in a specific area of the application

Similar to Smoke Tests but the main idea is to test only the changes, not run all the major tests.

Exploratory Testing

This test is sometimes not understood by many people because the idea is to explore the product. In this test, the tester will use his knowledge and experience to explore the product with the objective to find problems, develop new tests, to know better the product, etc., just like the name indicates, exploring.

This test is conducted when the tester doesn’t have yet the requirements document, the time available to test is short or the application is still in early stages of development.

Usability Testing

“It takes only five users to uncover 80 percent of high-level usability problems” Jakob Nielsen

This is a black-box testing technique where the aim is to observe end users using the product to discover errors or areas of improvement. You can see this kind of testing in beta products deployed to end users and even in final products where you find an option to send information (usually anonymous) regarding your behavior using the product.

System Testing

This is the test of the product as a whole. This test tests the functional requirements but at the end user perspective, where the functionality and the architecture are included, because you are testing the whole product. This tests is executed in an environment similar to the production environment.

User Acceptance Testing

This is the test to be done, before the application is accepted and go to live production. Usually is realized after the system testing. Sometimes is called Customer Acceptance Testing.

Installation Testing

This test its the final one, where the process of the installation of the software is analyzed, considering space in the storages, permissions and other factors related with the production environment.

 

Final thoughts

There are a lot to talk about each of these types of testing and if you want to know more you can find great sites and books with lots of information about it. I think that a superficial knowledge of all this kind of tests is a requirement to any project manager, team leader or senior developer, so they can know how to talk to the test teams and to the customer (ex:User Acceptance Testing). A junior developer should know too some of them, at least, regression testing for instance.

As a developer you probably are questioning, “what about unit testing?”. Unit tests are developed by the developers to ensure the quality of internal code, and usually are integrated in Regression Testing.

The 5 SOLID principles of object oriented design

cohesionAs a Team Leader and sometimes as an Instructor I see a lot of people who thinks programming using Object Oriented Paradigm is using classes and create a hierarchy. They think its about organizing code and not thinking in a Object Oriented way. During the learning path as professional developer in Object Oriented languages you start to observe that’s Object Oriented it’s a good thing but creating good software products using this paradigm its not so easy as thought at first. Why? There are a lot of reasons, but the main ones are always with architecture and ironically organizing the code! Then you start to dig into loosely coupled concepts, patterns, cohesion, etc., just to try to give some predictability, conceptual  and physical organization to your application in terms of design, layers and tiers. 

Nowadays we live in a mix of ways of developing applications, such as functional programming, using JavaScript in several contexts including Server side, keeping using the object oriented way of programming with the inversion of control in mind  and so on. However there are main principles in object oriented way that really help to have a good “organization of our code”, they are know as SOLID principles that I describe below.

 

Single responsibility principle

A class should have a single responsibility.

This principle its very related with the concept of cohesion. You want a class with only a single responsibility and all the methods and properties are always related with that responsibility. The advantages are obvious, you can ask the right questions all the time and know the answer very quickly! What questions? “In what class its implemented some <business logic>?” / “I found a problem related with the Shopping Cart” (guess where to search for the cause)

If you have more than one responsibility for a class, as your application grows so the complexity of the class and at some point you will start to see that it’s a better idea to split the class in two, but probably it will not be an easy task, considering possible dependencies and cross logic inside the methods of the class. It brings you ambiguity which is always a bad thing.

You can detect this kind of problems if you have methods in your class that don’t call any others methods or properties of the class, they are isolated from the rest. This applies to cluster of methods too. This clusters, probably they should be classes by them selves.

Open/close principle

All the entities should be open for extension, but closed for modification.

The idea is that you shouldn’t change the behavior of a class when you extends it with other class. The subclass should only extends the behavior not changing it. If you are creating an hierarchy of classes and you change somehow the behavior probably you should create another method instead of overriding one, or you are talking about a class that shouldn’t be a subclass but probably a sibling, because the logic its different.

Consider this example, if you try to create an Object Oriented structure for cats and dogs you will find that almost 95% of the method names and properties are the same, and you will be tempted to create a class that models both. For instance, both will have properties like: number of lets, eyes, color, mouth, head, and methods like: walk, run, eat, play, talk, rest, sleep, .… If you implement for instance the talk method, probably it will be just a change in the MP3 clip. One naive implementation will be to try to create a way to take advantage of one implementation to implement the other, and probably using hierarchy or the same class with some conditional statements. If you try to use subclass you will violate this principle, if you try to use the same class you are removing cohesion from the class, putting more than one responsibility in it. This is just a simple example just to try to show the idea and dangers of not applying this principle. You should have at least 2 classes because they are completely different entities.

Liskov substitution principle

If S is a subtype of T, then objects of type T may be replaced with objects of type S without altering the correctness of the program. 

If you implement a subclass its because you are extending the parent one and not changing its behavior (see the Open/Close principle). If you are extending a class the core logic it’s the same, syntactically and in a semantic way you are talking about the same entity, you just improved the previous class. For instance if you create classes for Accounts in a bank you will have a class Account with methods such as: deposit, withdraw and getBalance. You will expect that any subclass will have these methods to do the same thing as this with just a few extensions like an interest rate for special accounts, but the core logic it will always be the same. You will not put the method deposit change others things than the balance, or probably just adding a transaction to a list.

Interface segregation principle

Its better to have several specific Interfaces than a generic one.

This principle is simple to understand. If you have an interface with several methods that are not related between them in some context, it will be very probably that you will implement this interface in class that need only some of the methods, letting some of the methods implementation empty. I have seen a lot of this in some frameworks.

For instance, instead of having an Interface named CustomerOfBank, with methods for manage the customers and his transactions, you should have 2 Interfaces at least: Customer and Account. Now it is easy to change the interface related with customers and the interface related with accounts!

So, its better to have a lot of several tiny interfaces for a specific context than one generic one! 

Dependency inversion principle

One should “Depend upon Abstractions. Do not depend upon concretions.

This principle have produced complete books and frameworks but it states that:

- High-level modules should not depend on low-level modules. Both should depend on abstractions.
- Abstractions should not depend upon details. Details should depend upon abstractions.

For instance, the business tier/layer of an application shouldn’t depend about the implementation of a database module. He shouldn’t be dependent of if I will use an Oracle or Sql Server, or Web Services, etc.. (If we try to be very perfectionist and using the Single Responsibility Principle, the business layers shouldn’t be responsible for creating the Database/Integration tier/layer too.)

How is this possible? Using interfaces and others classes with the responsibility to create the instances of the dependent classes (database), and using only interfaces to “coupling”” the layers and tiers.

Example:

- IDatabaseRepository (interface with the signature of the methods and public properties related with database)

- DependencyManagerClass – responsible to create instances and managing their lifetime, so the business layer will call something like:

IDatabaseRepository rep = DependencyManagerClass.GetRepository();

PS: When using “real” frameworks probably when creating the Business Layer the repository was injected in the constructor, so this call will be in another class and the business class will only use the already created reference to the repository.

You cant find any dependency in business layer about the DatabaseRepository, and neither any responsibility to create the repository and so the name:dependency inversion, because its not the business class that its creating the repository but the logic was inverted, some other class already created the class and gave it to the business layer. This inversion (plus the interface) removed the dependency and knowledge about the details, place, etc. of the repository. You can now exchange one repository to another with changing anything in the Business Layer! Great! Isn’t it?

 

Final thoughts

There are a lot of others principles, but these five are the most common and “solid” in the object oriented paradigm. If you study more deeply these concepts you will observe how related they are, and so the name SOLID!

 

Happy work!

4 Tools you should have in Visual Studio

MH900398793There are a lot of tools you could install in Visual Studio to get your job done, but from the developers point of view there are 4 that I found very useful and they increase the quality of your work, reducing costs and time, the preferred managers sentence!

These tools they aren’t expensive if you think about the ROI of using them. I have licenses for all of them, they improve the quality of my work, a lot!

 

 

Resharper

In one sentence: After you start to use it you don’t want to rollback.

This tools knows a lot about your code, sometimes more than you! A lot of times it suggests improvements to your code that makes you think “Why I have not thought about it before”, it teaches you better ways of developing. It covers a lot about developing, the C# code, Visual Basic .NET, ASP.NET, XAML, JavaScript, CSS, Refactoring (lots of them and suggestions to your existing code), inspections, etc.

The main features are:

  • Project Dependency Viewer
  • Code Templates (yes, you don’t have to write always the same structure for your code, you can create a template for common code patterns, or use templates out of the box, like loops, classes, etc) PS: It seems the version 8 supports Multi file templates
  • A command line Resharper to use in CI Servers or other automated develop tools you have.
  • Lots of refactors
  • XAML support (he knows about XAML more than any of us)
  • You can create plugins to Resharper (develop plugins to a plugin Smile )
  • CSS understanding
  • Unit Testing
  • Configuration of inspection rules, etc

 

PostSharp

In one sentence: You want clean code, you want this tool.

Everybody knows and talks about Dependency Injection, Aspect Oriented Programming, Clean Code. But have you tried to learn and use this tool?

What if I tell you you can move most of:

  • Logging
  • Try Catchs
  • Transactions
  • Cache
  • Parameters Validations

to their own classes and be reused between all of you application code?

What if I tell you, you can concentrate the creation of most of your objects in one place and just ask for them, and this tool will create the object with all the dependencies in a configurable way?

What if I tell you, this tools can help you to really decouple your tiers in your application?

This is clean code, this is real architecture!

 

NDepend

In one sentence: You want to understand and visualize you code, you want this tool.

I have already talked about this tools in a previous post here. But, if you want to know about your application, like complexity, code metrics (configurable by you, if you want), diagrams, dependency cycles, etc., this tools will help you a lot. If the quality and maintenance of your code its important in your development you really should take a look at this tool.

 

NuGet

In one sentence: One tool to rule them all!

NuGet, it’s a package manager, which saves you a lot of time and trouble when installing all kinds of stuff in your Visual Studio. For instance, one of these days I was playing around with developing Windows 8 applications, and after some research it seems SQLite it’s the best database you can use if you need a local database for your app. How to install it and have the DLL references available to use? Install the NuGet Extension in Visual Studio, then use it to install SQLite, and everything its available to use in your project.

 

Final thoughts

There are others great tools around that you should use too in Visual Studio, but these 4 covers the main dimensions of your developing environment:

  • Resharper, its about code
  • PostSharpt, its about architecture and structure
  • NDepend, its about really visualizing your code
  • NuGet, its about helping you with external stuff to your application

 

Happy work!

Managers, it is always about people!

 

types-of-exerciseAfter years of developing, team leader and project management experience I realized that all good decisions, even the technical ones must include all the people. Well, “everybody” knows this, every project manager, team leader, manager,etc. Really?

Lets focus on the team developers.

 

Imagine you have a project to develop, a software product. You have a team leader and some developers that you will assign to the project. You want to use the new technologies like HTML5, JavaScript and lets add Java, the software product will be an Android app.

The typical decision will be something like this:

1) I have developers and a senior developer team leader

2) They all know Java

3) They all know about HTML5 and JavaScript, because “everybody” knows about HTML and JavaScript. Right?

4) They all know about java and that is the language of the android, and know what is an Android phone, it will be a challenge!

 

Lets remake the decision looking from outside:

 

1) You have developers and at least one of them it’s a Senior.

- Great!

 

2) They all know Java.

- The problem starts here. What they know about Java? The language and some algorithms (even with some years of experience), or they understand how to apply Java in the context of mobile Applications? If this is the first time they will develop mobile applications, they don’t understand the architecture of these applications, how to develop the components, the events, actions, how the hardware responds and send events to the application. The thing here its not the details of the mobile android development, it’s the lack of “mind set” the team will need before start to code, and the result will be most certain a bad quality product, who will need a lot of fixes and rebuilding. (been there)

 

3) Yes, every developer who have developed before web applications knows about HTML and JavaScript, everybody knows WHAT IS, and the syntax and some tricks, but few, very few understands the JavaScript paradigm and good HTML. Be aware of this before anyone tells that he knows about this subjects. It was only in the least 2-3 years that the JavaScript boom has started seriously, and Senior JavaScript programmers are a very small team. Before this language was only used for events in the HTML, now we have frameworks developed in JavaScript, we even can use JavaScript to create servers like “Node.js”!

 

4) It will be a challenge!

- No, it will be a disaster for the company and/or for the customers! The lack of know how in the middle of the project will arise and show all the architecture problems not prevented in the analysis phase or by the Senior. And here you will have 2 options: Remake the whole product from the start, which sometimes its not a bad idea (only for project managers), because the team already acquired the know how and know how to develop in a better way and know what to develop. Or fix the architecture, and this for me it’s the real challenge and here I thing “It will be a challenge” makes all sense! Its like trying to fix an already built house into other blueprint, good luck! (you will see its better to destroy and build again)

 

What’s my point, here?

 

This was just a simple example, to show that the most common way of thinking can lead to big problems, which by the way are always happening.

Before a great decision to be made in the software industry, first take in consideration the people you will choose. They are people with a specific know how and mind set, and to change that it takes time and it is a process you must consider. You can say, you will put them all in training classes. Great, but don’t expect that some dozen hours will create a miracle and prepare them for big projects. Training just gives you an overview sometimes shallow, other times deep, but after the training the people must play for some time before entering the “competition”. You can see this in sports teams. They are professionals, they play for many years, but when something changes, like others players, tactics (projects), coacher (team leader) they need to practice before the real competition to be successful, or you will ear from supporters “they had no time to practice that’s why they are playing so bad”. Probably you say the same about your sports team. Remember those words in your company and your team.

Once someone said, that 80% of the quality of a product comes from management, not the workers, because they need conditions to develop a quality product or project. These conditions include human resources management, understanding human behavior and acting accordingly!

 

What to do?

 

I will not give you a magical solution, from years of experience as a developer, trainer, team leader, architect and project manager, I can help you to take a decision involving all these variables, but as a manager, project manger or whatever manager you must open space for your developers talk about the difficulties and frustrations they have, and not throwing a “it’s a challenge for you guys” like  a magic sentence that in the future will bring its fruits (demotivation and consequently quitting), and I will not talk here how much it costs to bring a new member to a team (think about a new player in a team, even expensive he need time paid by the sports team to adjust to the new environment).

If you are a developer, be more open to your managers, and ask them time to practice, to develop small “challenges” besides the training and before starting a big project, it will give you know how, confidence and experience for a bigger project. Your company its not wasting money its an investment. I think it will cost more to rebuild or fix a bad product than to spend time before doing some “virtual work” and then do the real work. A soccer team plays 1-2 times a week, and receive money from the public, but during the week they spend money training.

50 Powerful Statistics About Tech Mega Trends Affecting Every Business

Great Slideshare presentation about present and future mega trends. Contains very useful statistics if you want to understand the future of technology, and above that, now we live in a merged technology social life, so the trend of the technology is the trend of the society.

Do you care about your professional image online?

The Big Brother is WE

You cannot ignore the importance of your presence online. If you are someone trying to find a job, you must be prepared to be “investigated” online even before you arrive for an interview. (I did this as a Team Leader, when I had to analyze someone new to my team, it was a curiosity I had to know who the person was before meeting her/him in real).

The social networking sites have different expected behavior profiles, and so, show different aspects of your life, wills, likes, etc., even the “lie”ones!

 

Facebook

When someone tries to find you on Facebook, will expect to find private stuff, political preferences, holiday places, friends you have, photos of your personal life, family and friends’ conversations, everything about your private and social life. So, that person will infer some kind of “private” personality about you after observing your Facebook history.

LinkedIn

Everytime I look at a LinkedIn Profile I am trying to know more about the professional details of someone. I don’t expect to find private details that not improve the professional reputation of that the person. You can write whatever you want, but your potential customers, companies and bosses are all there!

Google+

It’s a Social Network that can be used like Facebook or in a more professional way. You have control of circles of connections, so you can choose who is friend or just a professional connection, so you can choose what kind of information you want to expose in a private or professional way. I think Google will use the information in his network and relate them with searches, so… be careful.

YouTube

Well, it’s about video! You can show your jokes, parties, games, music, covers, etc., you can use it in a more professional way, and create video presentations like a Visual CV where you present yourself, a training session, or great tutorials to improve your professional status online, and share in LinkedIn or your own website!

Twitter

I see Twitter as a way to ping to a group of persons saying ‘I am social alive and I want you to know about it’. You can use it to say that you are following an important subject in the internet related or not with your job or professional interests. Or you can use it to share messages with your friends, starting gossips, etc. You can use it to organize great discussions around a subject, there are several Twitter Chats you can participate in the internet!

Pinterest

An image its more important than 1000 words! Be careful with the image you want to pass about yourself when you choose an image.

Instagram

Digital photos are each day with more realistic features and lots of Megapixels, but then you take a big modern photo and transform it in an old photo and post it in the Instagram. Very popular, be careful with the message and the people!

 

Final thoughts

There are a lot of social networking sites, and in the future probably a lot more. The Big Brother are US everywhere, The most important thing and advice I can give you is:

Just share online only what you think anyone can know, anything you post more than this, you will probably regret in the future! 

Which social network you elect as the most important to your life/business?

View Results

Loading ... Loading ...

 

Bad Behavior has blocked 98 access attempts in the last 7 days.

Hyper Smash