Describe your first computer program.
I programmed a character-based worm moving on the screen, written in the legendary Texas TI-99/4A Extended BASIC. A few days later, I could create my first sprites and I could detect collisions between them. Many years later, my first computer program for the x86 family was a database manager for electronics components. I wrote it in Turbo Pascal and I also created libraries in C for database access operations. Performance optimization was very important when clock speeds were less than 30 MHz (0,03 GHz).
Which programmers influenced you the most during this period and why?
Andrew Tanenbaum. He is the best explaining how different operating systems work using word pictures and code.
Charles Petzold. I learned to develop Windows software with his books.
Ray Konopka and Marco Cantu. I worked with Delphi for many years. I learned to create components with their books. I could use this knowledge whilst working with other programming languages.
Erik Gamma. Design Patterns. I cannot design software without thinking about design patterns.
Grady Booch and Ivar Jacobson. Object-oriented methodologies.
Steve McConnell. Excellent methodologies and experiences.
David Flanagan. Java.
Kent Beck. Agile manifesto.
James Strachan. Groovy.
Herb Sutter, Cameron and Tracey Hughes, and Joe Duffy. They are evangelizing concurrency and parallel programming in many different programming languages.
Bill Gates, Steve Jobs and Linus Torvalds. Business Intelligence using completely different models.
How would you summarize your early professional years?
I inherited my passion for computers from my father. I had the opportunity to learn about computers electronics “playing” in my father’s electronics laboratory. I could learn how chips worked. Then, I learned how to program them using many different programming languages. I learned reading books and I could create my first commercial software (when software was sold in nice boxes) before going to a University.
I wrote my first book about computers hardware “Estructura Interna de la PC / Inward PC Structure” and my professional career changed in that moment. I became an author and a computer science professional. I never stopped writing. However, I had to work in many ugly programming languages.
I became a project manager too early. However, I stayed tuned with new technologies, new tools and new programming languages.
I understood that it was necessary to be competitive in a very globalized profession. Luckily, nowadays I have 9 clocks in my desktops with different time zones.
What attracted you to parallel programming and multi-core?
I’m always researching about new technologies. I’ve always been fascinated with advances in hardware and in electronics. I have my own laboratory with many high performance workstations and servers.
I’ve always wanted code to run faster. I’ve been optimizing small and huge applications taking advantage of hardware resources.
What are the core values and principles you’ve acquired during your career?
Respect copyrights and licenses.
Research and development is always necessary.
Design, then code.
Organize, then code.
Comment your code.
Rewrite your code.
Test your code.
Re-test, your code.
Learn, learn and learn.
In this industry, there’s always something new to learn about.
How do you stay productive?
Staying tuned with new hardware, methodologies and products. Changing all the time. Making paradigm shifts as soon as possible. Hardware is very important. You need the best hardware to develop the best software and the best information systems. Nowadays, you cannot develop a competitive parallelized application using a single core microprocessor. I always need to improve designs. I read more than 20 books per year and specialized websites and journals.
How do you see the software industry in general and specifically parallel programming and multi-core evolving over the next 5 years?
The programming languages that don’t evolve to offer easy parallelization features won’t survive.
Functional programming features are going to be part of classic programming languages.
Multi-core is here to stay. There are going to be new standardized APIs, new compilers and new programming languages to take advantage of dozens of cores per physical chip. The number of hardware threads per physical core will grow.
There are going to be two worlds: sequential world and parallel world (developers prepared to work with concurrency and parallelism).
There are going to be new operating systems and new versions of existing ones, taking more advantage of parallel hardware. The great question is: Who is going to win the market?
Netbooks and other MIDs will push software developers to take advantage of multi-core CPUs with low clock rates.