February 27th, 2013 NYALT.NET Meetup: Become a Superior Programmer in Any Language

On Wednesday, February 27, 2013, OLC attended NYALT.NET's meetup: Become a Superior Programmer In Any Language featuring Mauricio Mendoza, who focused on exploring how five aspects of a programmer's personal character directly affects their ability to write computer programs.

Mauricio Mendoza started programming 17 years ago. He founded Cyteshoppe in 1996, which provides web solutions for small businesses. "What is a superior programmer?" Mendoza asked. "What are the stages of a programmer? Are 'superior programmers' idealistic? Is it only for people at the top of their programming?" Mendoze showed an image of the stages of a programmer: beginner, intermediate, advanced and leader. "By developing aspects of your own character," he said. "You can achieve this 'superior programmer' at any level. Understand the raw materials at your disposal and the limits of it. Understand the materials you work with. Ask yourself questions—as a software engineer, what is your basic building material? Your primary tool?" Mendoza later revealed that human intellect and the programmer—"you"—are the primary tools to become a superior programmer.

"Programming is not an assembly line," he said. "It's mental and difficult to supervise. Employers may not even be able to judge your programming competency. Your employer can't just say, 'Starting tomorrow, you're going to be a better programmer.' It has to start with you." Mendoza outlined the characteristics that matter to becoming a superior programmer: humility, curiosity, intellectual honesty, discipline and laziness.
Mendoza started with humility. "Humility helps programmers," he said. "People who realize how small their brains are." Humility is about humbleness. When people realize and understand what their capabilities are and recognize their limitations; that is humility. "Common programming practices to reduce the load on the brain are: following naming conventions, patterns, design principles, and they all help programmers compensate for limited knowledge," Mendoza said.
Next, he talked about curiosity. "Curiosity helps to overcome limitations," he said. "Realize that effective programming is a lifetime search for ways to compensate for limited intelligence." Mendoza said that being curious about technical subjects must be a priority. If not, programmers are limited to only what they can design.
"Specific features of technology change every five to 10 years," Mendoza said. "And so, to be curious about other languages, other platforms is a great trait to possess." To exercise curiosity, Mendoza suggested that programmers understand the development process. "Experimenting helps exercise curiosity too," he said. "Writing test programs allows for mistakes early on in the development and catch them early too." He also said to read about problem solving and books that teach how to approach problems and gives different solutions to problems. "This helps to develop problem-solving skills. Learn about different projects. As you learn from them, you will be able to see good choices and tradeoffs. It may give you guidance. Also, learn about projects that flopped," he said. According to Mendoza, looking at other people's code helps to improve one's own code. "Be selective, though about what you're going to read," he warned. "Look
for things that are fundamental to progressing your programming. Affiliate with other professionals and get their feedback. Look at their code and bounce ideas around with them." Mendoza summed up that drive is a key component in becoming a superior programmer. "It's a commitment that you personally make."
Mendoza talked about intellectual honesty next. "Intellectual honesty is refusing to pretend you're an expert when you're not. You readily accept your mistakes and you understand compiler warnings. You understand your program—don't just compile to see if it works," he said. "You don't have the whole picture when you do that. It doesn't mean that the code is doing what you want it to do." Mendoza said to provide realistic status reports, because "you're just hurting yourself by giving them what they want to hear." Also, by providing realistic schedule estimates, programmers can be intellectually honest. "Be honest with your estimates," Mendoza said. "Be strong, stand your ground."
About discipline, Mendoza quickly said the following: "Standards and conventions make project completion possible. You need to concentrate on what matters. Discipline lets your creativity focus where it counts."
Regarding laziness, Mendoza said that it can manifest in many ways. "There is true laziness. This is deferring unpleasant tasks. We don't want that," he said. "However, there are forms of laziness that are proactive. Enlightened laziness is doing an unpleasant task as quickly as possible to get it out of the way. Long-term laziness is writing a task to do the unpleasant task so that you never have to do it again," he said.
From here, he outlined qualities that are not as important to developing a superior programmer. "Experience, believe it or not, is not that important in the programming world. Technology evolves rapidly," he said. "This might render the language that the programmer's learned over the decade useless. They also might have developed bad practices." Persistence was another, as it might not mean productivity. Finally, he listed programming machismo. "This is the idea that in order to do your work, you feel the need to work 20 hours a day, week in and week out. If this is your way of life, you're going to burn out quickly," Mendoza said.
To sum up, he suggested that programmers examine their habits to see if there is any room for improvement or if there are good habits that should be reinforced. "Make a commitment," Mendoza said. "Make a commitment to your professional development."