Entradas

Mother of Compilers

 Early computers were more about the engineering process than logic, and given the circumstances of the era, computers, mechanical computers and not human computers were considered something that only male could dominate and understand, but software was something where females could demonstrate their abilities. Ada Countess of Lovelace was the first women dedicated to programming.  She worked on COBOL, one of the oldest but still relevant programming languages and helped computing to be everything it is now, she was in computers when computers were not even a thing, programming was not a thing, programs were something, but the process to input code into a machine was hard and expensive to do.   She was curious when she was young, studying harder than most of other students in high school, and doing much more than was expected for a women.  When the US entered to the second world war, she was assigned to the US Naval Reserve. They knew how smart and valuable to the te...

Episode 61: Internals of GCC

 As a programmer, you need to make sure that your code will run as best as possible (with a good performance and good compatibility) with the CPU  your program is intended to run, this means that a good compiler for your code is needed, that's where GCC can be used, using GCC you can generate the front end and the back end with little modifications to run in any platform. A compiler will pass multiple times the code to implement everything needed, from the multiple front end implementation that may not be available in C for example, that natively does not support polymorphism, but can be implemented with the correct extensions, or this multiple passes can be used to optimize depending on the platform, operating system or CPU architecture (x86, arm, RISC V etc). Also, the language will delete "garbage code" in the lowest level of your code, will look for small machine code instructions and replace them with faster, better and more secure instructions, increasing the effici...

The Hundred-Year Language

 We were supposed to drive flying cars 5 years ago, right?,   The legacy of some old programming languages is something to be analyzed, because these new languages can be better understood if we, as programmers understand how and why these languages came to be and how can they be improved and what characteristics or tools are lacking. A hard decision for other people is to decide the language to learn or maybe what language use for a project that will be need to be maintained in the future. The operators in a language are one of the most important things about a language, these operators are are the axioms of a language,other parts of the language can be replaced or improved relatively easy, but modifying the axioms of a language can drastically change everything that make this language unique and useful, but sometimes this happens.  The languages change, they adopt different things and merge with others, adopting things from others and maybe, this new construction or cre...

Making Compiler Design Relevant for Students who will (Most Likely) Never Design a Compiler*

Compiler design: Is that kind of topic, assignment, tool etc, that most students will never have to do, the amount of people designing compilers vs the amount of people actually using this compilers is to small that you may think that is useless but we usually see and study that topic for the "footprint" that it leaves in the brain of someone trying to become an IT professional. The correct understand in the design of compilers can change the way you design some algorithms to adapt better to the architecture you are using. The experience it gives you in other areas like context free grammar and translation problems, like converting some code to run in other platforms (LaTeX to HTML is a common example). Tools Like Lexical Analysis and Parsing: this is the process of "imposing structure on the sequence of tokens obtained from lexical analysis", basically the process of giving meaning to all the information extracted from the code, in some times, this is translated to...

Microservices

 Microservices  Microservices are a solution, to complex online services, normal services used to have 3 principal parts, the html server, a server dedicated to answer all HTML and javascript requests and a database. This monolithic approach is hard to maintain and fragile, if something happens with a functionality in this monolithic services is probable that parts in this service will fail and the load in the service is hard to balance, many people trying to access to only one part of the service could deny that service to other people. Micro services consist in dividing everything into different components, it allows to have a more explicit component interface. Microservices are meant to b as decoupled and cohesive as possible, basically consisting in smart endpoints and dumb pipes this takes advantage of http-request-response, microservices also give the option to use based on multiple technologies, not limiting your team to exclusively use C++ or node.js for example. The d...

Software Craftsmanship

 Architects should not be coders, unfortunately that is an widely spread idea. An architect is the responsible for taking all kind of decisions  in the project and a non coder architect usually takes decisions whith a negative impact in the project for all coders  because they are so out of contact with that area.  Craftsmanship: Learning theory for programs is important, am not denying the importance on attending conferences, reading books and analysis theory and code, but most programming students only learn theory and when they go out of school and go into a professional environment, they face new and completely different problems, for example pair programming, where knowing when to apply it or not is hard and it is overused. Programming skills should also be shared by real professionals in a similar way craftsmanship is learned. Teaching to program is not the only thing should be similar to craftsmanship.  Another important point is when teams aren't well co...

Hidden Figures

I am not a fan of historical movies, most of the time i already know what happened, if they are making a movie about someone it's because the protagonist did something great, broke some rules established at the time, and that maybe the rules for all movies or story but in historical movies that is something  obvious before you start the movie. This happened to me at the start, i was no interested and i was not paying real attention. I am not sure about how much time i lost but in some point something interesting happened. I was about white and black bathroom, a horrible and common practice where only white people could use a white bathroom and black people could use black bathrooms. There is no reason for that segregation and in Nasa it was only affecting everyone working there. Katherine, Mary and Dorothy were 3 capable human computers, they used to do the heavy math calculations needed during the hard, stressful and tiring 60s, in the middle of the cold war, they needed to work i...