Software Quality

As you may know, I’m working on an open source project called Visual MASM which is an IDE to create assembly applications for Windows just as easy as the Delphi or Visual Studio IDEs provide. Well, at least that is my goal.

I was looking back on why I want to create a commercial application in the Real Estate industry using my very own assembler IDE and was reading what I wrote about using assembly in the first place: Why Assembler?

There are so many languages and tools available today in order to program a solution. I have used almost all of them in the past 32 years of programming. Why on earth use assembly for Windows? For a clear business reason, Windows “owns” the world wide market and is used in over 90% of computers as of today. Never mind Linux, MacOS, etc. I mean, Windows “owns” it. Period. It makes total sense to develop for Windows when you create a commercial solution.

The fact that Windows owns the market; however, is still secondary to my motivation to create a commercial application for Windows using the assembly language. The main reason is really: Software Quality.

Quality in general, in my opinion, means paying attention to every detail. Because one pays attention to every detail, you are forced to make many decisions. As you abstract into higher languages, these decisions have been made for you. Because of this, you are no longer able to make detailed decisions. In order to pay attention to the detail of software quality, you have passion to follow through with it. Being able to make these detailed decisions also offers freedom and control of the creation process. That’s the ultimate power of high, software quality. You must have control in order to make software quality decisions.

So, paying attention to detail with passion is equivalent to high software quality. It is that simple.

 

Advertisements

How to be a great programmer

I have been programming since I was 15 at 1985 starting on an Amstrad CPC 464 on 8-bit Z80 processor at a whooping 4 Mhz. The programming language used was Locomotive Basic for the Z80 processor. This is my first exposure to actually tell a computer what to do, and it did it by coding this:

10 Print "Hello"
20 Goto 10

It printed “Hello” on the screen and kept going. These simple lines woke up my passion and my amazement of the computer and it’s software. The computer did what I just told it to do, over and over. That was 32 yeas ago and I still love creating software, love seeing creativity transformed into something useful and beautiful at the same time.

The reason I’m telling you this is because I want to set the stage of what I have learned over the past 32 years on how to be a great programmer if you so desire. What I’m about to share with you are my own experiences and opinions.

Here are a few things that you either have or will gain over time as a great programmer:

You care

As with everything in life, if you care for something, you give it special attention. Now, programming a computer needs your special attention already because the computer will not allow for any mistakes simply because there are no gray shades. What I mean by that is that the computer is absolute, true or false. When you care, you pay special attention to the software you program. What does that mean? You care how you compose your pieces of code in whatever programming language you use. Is your code legible? Can you understand your code 6 months from now? What does the architecture look like? Have you even thought about it? How does any data flow between your methods and functions? Where does it start and where does it end? Can you follow the money within the programming code? Do you care enough to rename your variables and functions to something more understandable after requirements change? Do you care enough to reduce any technical debt meaning do you care enough to simplify your code to make it easy to maintain? Do you care enough to remove dead code? Do you care enough to be open for new ideas on how to do things differently than what you are used to? When you care, you pay attention to the smallest details. You pay attention to quality on what you program into the computer.

You love creating

A writer creates a book by composing letters and words in such a way that produces interesting stories. A writer would use modern tools such as a computer with a great word processor or maybe even an old fashioned typewriter. The tools a book author would use are the means to an end. The creative part is all in the authors head. The art is the intuitive process of creation that is unique to the author. The very same thing can be said for a great programmer. When you start coding, you are composing instructions for the computer to execute. The creative part is on “how” these instructions are executed in such a way that produces software, the end product. How satisfying is it when a customer/user tells you “I love this software”. When a customer tells me that they love my product, it makes my day and this is exactly why I love creating great software. Every programmer wants to be recognized in some form or another for his or her creativity to solve a problem. After all, programmers are problem solvers. We solve problems with our code. Our code is our magic dust that erases issues and makes people happy. How cool is that? How cool is it to start from an idea to something tangible that people can use? Doesn’t every creator want their creativity to be seen, used, and acknowledged? You have the power to change the world with your creativity.

You love problem solving

Programmers are problem solvers. That’s it. I love solving problems with a creative approach. The way you attack problems can be in different ways. It becomes even more interesting when you solve problems that are considered not the norm. You think out of the box. Many times, you do not have to re-invent the wheel because somebody has already solved a problem in the past in some form or another. If that is the case, take a close look how the problem was solved. Would the solution fit on what you are trying to problem? Can you adjust the solution to fit your needs? Can you improve it? Or, can you come up with a unique way to find a solution to a problem? How do you approach the problem? I find solutions to problems in all kinds of places, while taking a shower, while shaving, while starring into the sky, while playing a computer game, etc. When you get ideas to solve a problem, it is one of the super exciting moments when it happens. My point is that your solutions can come anytime. It does not matter if you are sitting in front of the computer or not. You should be open to think and analyze about problems no matter where you are. Give these moments a chance hen they come, explore it further and be open to whatever idea will come to mind.

Stay motivated

You will not be able to create fantastic code if you are not motivated. You have to be motivated and enjoy programming in order to produce some amazing creations. You have to get your juices going. For some, like me, you have to be in the “zone” for some crazy creativity to come out of your noodle. For me, listening to music while programming get’s me into the right mood and kick of some “zone” explorations. So, if you are motivated on one day, how do you stay motivated the next day? One thing I do that has worked for me for many years is that I “carry over” motivation to the next day. The way I do this is as follows: when you work on a particular challenge to solve a programming problem and you eventually find a solution to it, do not implement the entire solution the same day even if you could implement it within minutes. Don’t do the whole implementation. Keep some of the implementation for the next day. When you do this, you can start programming the next day and “re-ignite” that motivation to complete it. What will happen is that you are now on a roll and you will be able to pick up other challenges easier and keep the momentum for that day. This little trick of “carry over” has helped me many times of the years. It unleash some energy the next day even though you may have not felt like it to program at all.

Be willing to learn

A great programmer NEVER stops learning on how to program in different ways even how to program in different languages. Study other peoples code when you have a chance. This will give you an insight of somebody else’s line of thinking to find a solution. This might show you some ideas that you were not thinking about before. Be willing to learn from others, always. Don’t think you know it all. There is no such thing. There will always be somebody else you knows a lot more than you do. So, be willing to learn from anybody. It does not matter if the other programmer is a junior or a senior programmer. Stay open to learn especially “how” they achieved a certain solution.

Learn assembly programming

Yes, you read correctly. Learn how to program in assembly. I know there are tons of high-level languages that you can learn as a programmer such as Java, C#, C, C++, Delphi, etc. However, trust me when I tell you: “You will be a better programmer when you learn how to program in assembly”. You will have an edge over somebody who does not program in assembly. Believe me. What programming in assembly will teach is invaluable compared to any other high level programming language. You will truly appreciate the power of the computer. You will be able to see into the insights of the computer. You will be on a higher level of technical excellence when you know how to program in assembly. I personally love Microsoft’s Macro Assembler (MASM) for Windows over all the other assemblers for many reasons. One reason is simply that Microsoft has pored a huge amount of resources over the past 36 years into MASM. MASM was created in 1981 and no other assembler has received this much attention, ever. Microsoft maintains MASM today. When you learn to have absolute power of the computer and with absolute freedom to create ANYTHING you want with assembly, you will gain a level of insight that is hard to describe. In many ways, assembly is actually easier than many high level languages. It is absolutely fascinating to be able to directly manipulate a CPU register. It is fascinating to change one bit and affect an outcome of an operation. Just fascinating. I could list many other reasons why but I leave it up to you if you want to step up to be a great programmer and learn how to program in assembly. Start creating a simple Windows app in assembly and then feel the power. You won’t regret it.

Conclusion

I hope that the above points will help those who aspire to become great programmers. Stay fresh; stay crazy because you have the power to change the world!

VisualMASM Source on Github

VisualMASM_1_0-MainI decided to release the source code of VisualMASM on Github. VisualMASM is an IDE for Microsoft Macro Assembler (MASM) and makes it a little easier to create Windows and MS-DOS applications in x86 assembly.

The move to release the source code allows me to share the code base for more feedback and also keep the project going with potential project contributors. The source code that I will be adding to Github is not the current code base but a new version of VisualMASM 2.0. I want to make some big changes to VisualMASM and I figured this is a good way to also share the source code at the same time. You can follow along the changes of VisualMASM as I will build it out more over time and when time permits at the Github repository here.

 

Visual MASM IDE 1.0 is Released

I’m prouVisualMASM_1_0-Maind to announce the first release of my Visual MASM IDE 1.0. With Visual MASM, you can program assembly applications for Windows 32-bit, Windows 64-bit, and even MS-DOS 16-bit COM and EXEs. Visual MASM uses Microsoft’s powerful Macro Assembler but makes it easier to manage all of your Windows assembly programs. I have included simply Hello World applications that range in size from 254 bytes (COM file) to a whopping 2,5 Kbytes for a Windows 32-bit and Windows 64-bit application. Head on over to http://www.visualmasm.com and download it, it’s free.

Intel Galileo Gen 2 and Windows 10

Intel Galileo Gen 2
Intel Galileo Gen 2

As there were not enough reasons already to write Windows applications in assembly (see my Visual MASM project site), I just found out yesterday about some great new development in the SoC (System on a Chip) industry. Intel came out with the Intel Galileo Gen 2 which features a full blown 586 Pentium class computer. What’s so awesome? It’s super tiny and just a little bigger than a credit card. So, you can install and run Windows or Linux on it. How freaking cool is that? No noise and about 5 Watts of power consumption… the possibilities are incredible. Put Windows 10 on it for free, here is how. Create your Windows applications in MASM and my Visual MASM, off you go… amazing. Go check out Microsoft’s Internet of Things(IoT).

Visual MASM IDE for Microsoft Macro Assembler

Well, I decided to work on my Visual MASM for Microsoft’s Macro Assembler in my spare time. This will be a full featured IDE for assembly programmers. I published an IDE for assembly programming many years ago back in 2001 called VASM but I never finished it.

With Visual MASM you can create MS-DOS and Windows applications for 16-bit, 32-bit, and 64-bit Intel and AMD processors. Visual MASM looks & feels in many areas like the Delphi IDE or Visual Studio.

This will be an ongoing process and I will update it when I have time. Creating assembly programs for Windows is actually easier than MS-DOS applications since you no longer have to re-create the wheel(s) anymore because Windows has thousands of API’s available for you.

If you are interested in learning assembly programming and maybe find out why you would want to do that, run over over to my new website and check it out at http://www.visualmasm.com.

VisualMASM_screen01