How to deal with ready-made frameworks and technologies? [closed]


I've been having a question a while ago and I think it may even be a common question. I'm not sure how to put the question, but I'll try. When I started programming I dealt with languages like PHP, C, C ++. What I used most in practice was PHP. Basically I had to develop everything , the codes for authentication / authorization and security, codes for interaction with MySQL, etc.

After 3 years working with PHP I learned C # and started working with the .NET framework since then. I like the functionality of the framework and the language too, which is "more" object oriented than PHP, as well as being strongly typed and so on.

The problem is that all this time I have a pretty big question. As there is a whole framework available, many things are ready. So if I need databases, I already have EF or NHibernate, if I need to use REST services I already have the WebAPI, if I need authentication / authorization in web applications I already have ASP.NET Identity.

And when I read about how to use these technologies, I basically all find tutorials and articles saying "do it" and then it's always the way things work out. This all leaves a question like, "having done thing ready and everything already explained exactly how to use, what do I really have to program?"

And this question is very strange, because after all, if I'm working on the project I should know what I need to program. But with so much available I usually lose myself and when I see I'm simply replicating codes I read about how to apply certain technologies.

I know that there is a domain model to be developed. But is that all? When we deal with frameworks like .NET we only develop the domain model and integrate it into technology the way it is explained in tutorials and so on? How do you deal with this type of situation?

asked by anonymous 08.05.2014 / 16:53

2 answers

I've always wondered the same thing throughout life (I've gone through Clipper, VB, Assembly, C, C ++, Java, C #, HTML and JavaScript).

In the past I developed everything on hand, for several reasons, mainly:

  • There was no Internet
  • Everything I did, I did it out of curiosity and liking
  • I wanted to learn everything, and since I was not in a company, time was no problem

Once I entered the corporate world, I realized that I was no longer in the same scenario as before.

When a system was sold, it had to be delivered on time. If a new component was needed for this system, the decision to buy or not a ready one (instead of making one at home "from scratch") was basically based on time and cost. The factor "we are able to do, just give us a little time" did not weigh so much.

Like everything else in life, this decision has two sides. Buying / downloading a component / framework and leaving using some tutorial / manual is very practical, and greatly streamlines the development process. However, not knowing what's under the hood sometimes is very dangerous.

For example, if the component malfunctions, even though all the instructions have been followed exactly, what do you do? You do not always have access to the source code, and it may be that no one has quick contact with the development team, and it may never be.

Of course this is a risk taken into account when making the decision, but there is one more detail that over the years I have seen consume hours and hours of development looking for solutions to problems arising from the lack of knowledge about the operation of a ready component.

A case not so recent, they decided to use a grid component in C # / ASP.Net to display and paginate records from a database. Once the grid was deployed, page access was extremely slow. After some work and research, it turned out that the grid actually carried all the records, and stored them in ViewState of the page so that it no longer needs to access the database, and be able to page everything correctly.

This is not wrong depending on the case, but in that particular scenario, the query returned thousands of records, loading the page in excess!

That is, it would never be possible to solve the problem of that component without being aware of the technology on which it was mounted.

I do not believe there is a final answer to this question. It depends a lot on the case, and what goal you want to achieve.

Today, years after I started programming, I see how healthy all the hours behind the computer were "reinventing the wheel". I confess over the years, my "final production" was very small compared to the amount of hours I worked, but in this case the gain was not a ready product, but the knowledge itself.

I became a teacher, and I try to make it clear during class, since almost all my students are already on the market: doing things from scratch is great if you want to learn a technology, or want to exercise your logic, the same way I did for years (and still do). However, there are times when time is of the essence, and it is at these times that we use ready-made frameworks and components.

But even when using a ready-made framework / component, it's always good to know that there is no magic, whatever it does, we can do (with a few exceptions), so we should not have any kind of blind devotion to the component, so you need to know at least a minimum about the technology that the component works on.

08.05.2014 / 17:48

The great importance of knowing what you are doing?

I realize that there are what they know, and those that use framework. As reported in the framework already comes ready is to use that way, it is a way to save time, standardize software, etc.

The market demands software made in less time, categorized and that if someone from the skirt team has another that will replace the same with similar knowledge.

PHP, Java, .Net Framework (C #, VB.Net) and etc., all of these have today's best-in-class framework that will help us improve our coding and solve problems that would take some time. Of course implementing them as a developer and connoisseur can replicate or improve. Example : I created in my ASP.NET MVC Web Systems, my custom user control doing Heranças / Implementação in the base classes of the same and putting my logic internally, and many friends of the .NET architecture do this.

Key Point is do you know how to program in a particular language and / or development architecture?

I know people who know Laravel (which is an excellent framework for PHP), and are so accustomed to it that when he makes a mistake you can not solve for lack of knowledge of the PHP language, this point of the question is that limits many developers to know a framework and not know the language.

What is Important?

It is important to learn the language and all its ramifications, and then use a framework to streamline its development, not to be tied to auxiliary technologies, but to solve all problems with language knowledge.

I have a sentence: And I will never know everything, but, I will always study to know everything , you hardly know everything, but I live studying to absorb more and more, C # for example is always in evolution for those who started 1.0 and today have 4.5.1 imagine how much I have studied and how much I come across with news.

08.05.2014 / 18:08