¿Por qué no todo el mundo es un buen programador?

Muy interesante la pregunta y la respuesta planteadas en Why is everyone not a programmer? en Quora:

While just about anyone, at almost any age or IQ level, can learn the concepts of writing code, to become an employable, professional software developer with any hope of long-term success, a person needs:

  • Logical thinking skills.
  • Excellent problem-solving skills.
  • A methodical approach to solving problems.
  • A passion for software development.
  • A willingness and ability to keep learning new things (e.g., languages, paradigms, design patterns, libraries, frameworks, data structures, algorithms, etc.) throughout their entire career. The learning never ever stops in this business. If you stop learning, you will fall behind and limit your opportunities.
  • Excellent written and oral communication skills. From writing documentation or code comments to providing feedback in code reviews to making presentations to defending your design decisions, communication is key in this business.
  • Patience. You need a lot of this. The list of people and situations that will try your patience is too long to even begin to list here.
  • Persistence. You need a lot of this, especially after you’ve been chasing a difficult bug for many hours or days.
  • Attention to even the most minute detail. One binary digit (bit) can have a huge effect on how something works or doesn’t work.
  • Attention to quality.
  • A willingness and ability to dive in and learn about the domain you’re writing code for, to gain a better understanding of client/user needs, terminology, concepts, etc. For example, if you’re programming financial systems, you need to learn about financial concepts. If you’re developing statistical software, you need to dig in and learn about statistics. If you’re developing simulations, you might need to roll up your sleeves and learn about astrophysics, string theory, ecological systems, etc. If you’re writing network software, you need to learn about networking. If you’re writing software to drive industrial chemical processes, you need to learn about the chemicals and processes you’re working with. (See this answer for an example.) Device drivers require learning about hardware devices. Process control software might require learning about chemical reactions. The list goes on and on.

    (One of the many things I enjoy about software development is all the other areas I’ve had a chance to learn about over the decades, in addition to the typical computer science and software engineering arenas.)

  • Compassion and empathy for the next developer who needs to read/maintain your code.
  • Compassion and empathy for the users of the software you’re developing.
  • The ability to read and interpret technical information quickly, and apply it to the task at hand (e.g., hardware datasheets, algorithm descriptions, best practices, etc.).

This is not an exhaustive list, but it gives you a general idea of the attributes you need for long-term success in software development.

Obviously, not everyone has all of these attributes. Although some can be learned/acquired, some are more fundamental to the personality and life experience of the individual.

Just as not everyone can become a professional brain surgeon, astronaut, soldier, aeronautical engineer, nurse, teacher, firefighter, lawyer, concert pianist, rock star, actor, cinematographer, carpenter, plumber, architect, sculptor, rocket scientist, pilot, etc., not everyone can be a professional software developer.

That said, I strongly believe in people — of all walks of life — having the opportunity to learn new skills, improve themselves, change careers, make themselves more employable, and go after their dreams.

In addition to being a software developer, I have taught software engineering and computer science courses to many aspiring software developers, across many ages, races, economic backgrounds, religions, previous careers, etc. Some have gone on to success in this field. Others have used the opportunity to discover that software development was not for them. A software development career is not for everyone. But, all should have the opportunity to learn and decide for themselves.


¿Por qué la página “home page” se llama “home page”?

Muy interesante y nostálgico lo que se explica en Why Do We Call it a Homepage?:

Berners-Lee imagined that each person would have their own little space on the web. They could add whatever bookmarks or notes they wanted to their page. They could make it public or keep it private. When they opened their browsers, they would be met with their personal website. And using their browser they could quickly make updates and publish changes to their site. The web, in other words, was meant to go both ways. We were meant to be both participants and consumers.

That space on the web, Berners-Lee called it a home page. It made sense. It was a digital “home” on the web. A space you could come back to and add the discoveries you made surfing the web. And that’s how the word home page began to circulate.

¿Qué puedo hacer para mejorar en mi programación?

De vez en cuando, alguien me escribe y me pregunta:

Me gustaría iniciarme en el mundo de la programación, para ello le pediría consejos para este mundo y que podría hacer para mejorar.

Y yo suelo contestar algo como:

En internet puedes encontrar muchos cursos de programación. Dos de las plataformas más interesantes son Udemy y Udacity.
Programar es como escribir: en el colegio se enseña a leer y escribir y prácticamente todo el mundo puede leer y escribir, pero de ahí a saber comunicarse correctamente por escrito o ser capaz de crear un escrito atractivo y que la gente quiera pagar por leerlo (piensa en un libro) hay un mundo. Lo mismo pasa con la programación: en muchos sitios se enseña a programar, pero solo se puede aprender a programar bien leyendo mucho código bien escrito y escribiendo mucho código, programando. Por tanto, para mejorar hay que practicar, practicar y practicar.

Introducción a los generadores de sitios web estáticos

Una buena introducción lo que se cuenta en Beginner’s Guide to Static Site Generators:

Setting that aside, the advantages of using static site generators are impressive, with speed, security, and scalability among the top ones. Whatmore web developers are already adding dynamic elements with the use of 3rd party APIs, expanding the capabilities of static sites.

A static site generator is a tool that helps you build static pages out of the input files. It takes your content (from a headless CMS, for example), applies a selected template, and generates static HTML pages out of it.

The biggest difference between the SSGs approach and what is now considered the traditional web dev approach embodied in the use of WordPress is that instead of building a page on demand each time a user visits the site, SSG does this at build time. Basically, an already built page, stored on a CDN, is served to the user when he visits the website.