I am a newbie to the programming field. What advice can you give to the new programmer?
My advice, with over 30+ years of programming under my belt, would be as follows…
First I would like to define a few things. For me, a programmer is simply someone who has learned the syntax of a programming language and can then write lines of code in an editor, compile it and then run it. Nothing more than that. I can teach my mom and my grandma to become a programmer! Will they be good at it? Probably not. But they are still programmers.
I think that what makes a great programmer is everything around the actual language itself. This means if as a programmer you want to become great, highly respected, highly solicited ($$$) and valued. Which in turn will bring you the best projects and challenges. Which in turn should make you happy and proud … then you want to be an amazing software developer/engineer and not just a decent programmer.
How do you become an amazing software developer/engineer?
Programming Language - Fundamentally, the actual language doesn’t really matter. It’s simply a bunch of reserved keywords and structured syntax. Some languages are better and some are bad. Learn as many as you can and be open-minded. Learn the strengths of each language and understand their weaknesses. Don’t fall in love with a specific language and then refuse to look at other technologies because you’re sold on one. Learn to change and adapt. I started with assembler, moved over to C, explored C++, and then thrived with Java. I’ve used and become quite good with JavaScript. Now I’m using Python occasionally and keep looking at others’ potential. In between all of that, I’ve used probably a few dozen other languages and scripting languages (Basic, Basica, Pascal, Delphi, Tcl/Tk, SH, BASH, TCS, KSH, Turing, Visual Basic, C#, Awk, SED, etc., etc., etc.)
Frameworks - Frameworks is a ton more than an actual language. Being able to debug it, being able to instrument it. Being able to mutate it at run-time. The tools and libraries that come with it. Community support for it. Tutorials and training. Platforms that support it. Being able to do static and dynamic analysis. All of these “things” around the language are MUCH more important than the language itself. For me, when choosing the next technology for that 5-year project … it always comes down to this.
Design Patterns - This is probably one of the MOST important things you can learn as a programmer. Reading them all is one thing. Then you ‘think’ you know them until you try to put them in practice. That’s when you realize that you hit the wall. So when I say “learn” … I mean really learn by actually using them. Create “throwaway” projects just for the sake of gaining experience in programming and design patterns. Later, as you become a great programmer and you want to possibly become an Architect, this experience will make you a great architect. And great programmers and architects are highly respected, solicited, and sought after.
OOP - For most languages, you can pretty much categorize them into two distinct groups. They are object-oriented (OO) or they aren’t. And I’m not talking about the JavaScript type of OOP (which I laugh at). I mean C++, C#, Java, and other languages. Being able to construct software on the OO principle is fundamentally important. I’ve seen some programmers assemble code together and it was pathetic how they didn’t know and understand their OO principles. There is more than meets the eye here. There is a lot to know and learn.
Architecture - Read books and literature on everything that touches architecture. High availability, redundancy, resiliency, 2-tier, 3-tier, architectural layers, abstraction layers. Look at OS/kernel designs (ie: VFS, HAL, etc). Read Facebook, Netflix, and Twitter architectural literature and when they built their systems that way. Read Google literature on some of their distributed databases. All of this will make you an amazing software designer and programmer. They are HIGHLY solicited and sought after.
Integrity and Ethics - For me, this falls into an important category. So often I’ve seen programmers who thought they were amazing because they spat out code like no one else. They also produced bugs like no one else. Over time, programmers and managers realize this and you will lose respect and value. You won’t be trusted. Why should someone else fix your bugs? Integrate quality in everything you do. Apply the “boy-scout rule” each and every time you commit your code. Test your work (unit, functional, manual), and don’t expect the testers will do it for you. Programming isn’t just about writing code. It’s about writing quality code. Write quality comments in your code and in your commits. Apply best practices (ie: keep methods short and to the point). Document your designs and architectures. Doesn’t have to be formal documentation. Sometimes, simplicity is worth more than anything. People will appreciate working with you. The list can be quite exhaustive here…
Practice - Put everything I have mentioned above into practice. Day after day, after day. Not just at work but as a hobby as well. Contribute to various projects. Start your own projects. Keep learning and put that skill and knowledge to practice.
In the end, all of the above will make you a much better and more valued software developer. Remember that great programmers will always try to surround themselves with other great programmers, which will be beneficial in many ways in the end.