So you want to be a computer programmer? Congratulations because you have just made a decision that will change your life and open up a whole range of career paths for you.
The problem is knowing where to start though. There is so much that you need to learn in order to master the basics, let alone the more complex skills that you will need to make it as a programmer at the highest level.
So where do you start? Do you start online, where there is a wealth of information? No, you start right here.
Here you will find the ultimately guide to becoming a computer programmer with all of the defining principles listed in the definitive A to Z. Learn just one of the sections a day and you will soon have a firm grasp on the information you need to know to be successful as a programmer.
Whether you are just starting out or looking to advance your knowledge, everything you are looking for is summarized in a quick and easy reference guide.
So let’s get started!
Abstraction and Brevity
Balancing the abstraction and brevity of a program is vital. Programmers do tend to use too much abstraction when starting out and so create classes that do little but abstract something, thus offering little value. As such, brevity must be measured against it to make sure that the final result is finely balanced between the abstract and the simple. The benefits must outweigh the costs and achieving such a balance is the correct way to go as a result.
Applying Computer Science
When should you use fancy elements of computer science in programming? There is, after all, plenty around. You have various algorithms, mathematics and advanced technologies available to you but most are unnecessary. Unless they can be of benefit, provide a low risk to other systems and enhance the final system, it is best to avoid using them.
For more information, go to: Ben Worthen – Keeping It Simple Pays Off For Programmer
Software development is built on early data analysis and so it is important for all computer programmers. Every programmer should be aware of data and analyze it during every single step of the way during the design and production of an application or system. Data flow diagrams are useful and should be utilized effectively. It is also necessary to analyze your own data as well as research before the completion of a project.
For more information, go to: …
During your working life, you are guaranteed to meet people who are difficult and do not behave in a manner that is conducive to a good working environment. You may have to work in a team with them. Behave in a way that offers them a degree of respect but also learn to stick to your guns. Communicate appropriately at all times and refuse to be bullied. Always leave personal feelings at the door and do what is best for the project and you will not go far wrong.
For more information, go to: Computer Programmer Code of Ethics
A bottleneck is an element of performance that is defined as an area of a system where the majority of resources are consumed. Finding the bottlenecks is an important task when you are trying to optimize performance because a failure to find them and improve the flow of resources could limit a system even further and hamper performance. Finding the most expensive bottleneck in a system and improving it is vital to improving performance.
For more information, go to: Find and Eliminate Your Hardware Bottlenecks
Buy vs. Build
If you are looking to use a specific program or application in your work or for the establishment of a business, it is essential to decide whether to buy or build. Should you choose freeware and open source or should you build a new program. It is necessary to weigh up the costs and time needed to build as well as asking questions of the existing software and applications. Evaluation is absolutely vital.
For more information, go to: Dan Oliver – Buy vs. Build: Six Steps to Making the Right Decision
Calling it a Day
As a computer programmer, you will undoubtedly put hours and hours into a project but putting too much time in can be counterproductive. You are human so it is essential to take a break when you find yourself stumped and go home when you are tired and can be considered overworked. The pressures of individual jobs are immense and you may feel like you cannot go home but always listen to your instinct and communicate as to why you are doing so.
For more information, go to: Neil McAllister – Developer Burnout
If you are lucky enough to have several projects available to you, you should attempt to balance your personal life and your workload. This is not always easy for programmers and taking risks comes naturally but you must assess each project before taking it on. Can you complete it within the deadlines given? Could you learn new skills? Would your team benefit in any way? All of these questions are valid so it is important to ask them before agreeing to a job.
For more information, go to: Become a Freelance Programmer
Communication and Disagreement
Communicating with colleagues is a must during a project, with informal communication during breaks being just as important as formal discussion. However, no disagreement should be taken personally. It is a part of the decision making process. Be sure to express your thoughts and opinions and take others on board, using it as a springboard to fully explore your options and select the right one.
For more information, go to: Calvin Sun – 10 Ways to Handle Disagreements Effectively
Communication languages should not be confused with programming languages. Instead, they are designed to achieve communication through the guise of standardization. UML, SQL and XML are the most important and every computer programmer should be familiar with all three. SQL is a data query and manipulation language, XML is used to define new standards and UML is a formal system to describe designs.
For more information, go to: List of Programming Languages
Communication is a key skill that absolutely has to be developed if you are to be a top programmer. Enhancing your listening skills and ability to put ideas across will help you but so will dealing with people who have flawed communication skills. Having the ability to make them listen to your ideas and objections can seriously work to your advantage so work on persuasion and negotiation too. You never know when you may need them.
For more information, go to: Louis Brandy – A Programmer’s Communication Skills
Consultants may be employed to offer advice on specific technologies during a project but they should not be relied upon at any point. Their knowledge is often specific but they do not have as much riding on the success of a product. As such, their work must be checked prior to the completion of the project because it could hamper the final product if code and other forms of input are not checked rigorously.
For more information, go to: Steve Tobak – When to Hire a Consultant
One of the most important elements of being a programmer, debugging is essentially modifying code to remove imperfections that hamper the running of an individual system or program. It is necessary to gain an insight into the code, investigate any issues that arise and then remove the issue. This may involve modifying code by making the smallest change possible or splitting code to reveal the problem. A good programmer will experiment in order to discover the problem and alter the execution so as to resolve it.
For more information, go to: Ian Lance Taylor – Debugging
Designing software is one of the key functions of a programmer and designing software that is well written is key to building a good career so studying the latest design skills is a must. Do not expect to grasp all concepts right away because experience certainly enhances judgment. However, be sure to learn the basics right away and master them so that you can improve quickly without forgetting acquired knowledge.
For more information, go to: Seven Principles of Software Development
If you manage a team or lead a project, it is advisable to try to stretch the talent of those working with or for you as much as it is for stretching your own abilities and pushing yourself to the limit. Challenge your team by motivating them, testing their skills and apportioning the workload well. Praise them and make sure that they understand how much they are valued. This is certainly the way to develop a next generation of programmers.
For more information, go to: How to Manage a Team of Geniuses
Learning how to document wisely is a must with this mantra in mind – a little good documentation goes a long way. Do not write reams and reams of information that nobody will ever read. Instead, be concise, to the point and say only what needs to be said. Learn how to write correctly and, if you are documenting code, write it in a self explanatory manner when you would be unable to make it clear by writing the code itself.
For more information, go to: Writing Program Documentation
Embedded languages are tools of the best text editors in the world and embedding a programming language is amongst the most creative acts. However, creating a new embedded language is something that is often redundant because it would be narrowly used, create the need for others to learn it, and fail to appeal to the culture of its audience in many cases. As such, it is often worth sticking with the programming languages already created.
For more information, go to: Conal Ellliott – Compiling Embedded Languages
Estimation is a vital skill that all computer programmers should master. It does not relate directly to systems, software and programs but rather the human side of it. For example, if asked to work on a specific project, you must be able to estimate how long it will take you to plan, document, deploy and market specific values for that job. It provides a degree of predictability and one that is essential for good team work on an individual project.
For more information, go to: Victor Basili & Karl Freburger – Programming Measurement and Estimation in the Software Engineering Laboratory
Computer science is well known in terms of its set values and fixed elements. However, this is not the case if you are a programmer. Instead, it is all about experimenting to make sure that you have successfully debugged code, checking data integrity, ensuring systems conform to documentation and various other reasons. In short, a programmer must experiment to ensure that systems work as they should and are fixed or improved where necessary.
For more information, go to: Experimental Programming
Every computer programmer will have to fight pressure at one time or another because there is always time to market pressure in addition to the pressure to create a good quality product. You can reduce it though. Avoid setting an impossible schedule for yourself and always be realistic. Also, communicating with those who exert pressure can often create breathing space. Creating detailed plans and schedules can also help you and others around you to remain on track.
For more information, go to: 10 Ways to Deal with Stress in the Workplace
Handling Boring Tasks
Programming is not all excitement and interesting tasks. There are undoubtedly going to be some boring and monotonous tasks at some point. Giving those tasks to somebody else every time is not an option as it will damage morale and prevent members of the team becoming motivated. As such, make it into a challenge for yourself or someone else. Try to find a program that can help you to do it. This will enhance your skills and make it more interesting even if you ultimately have to do it the boring way.
For more information, go to: Esther Schindler – Managing and Motivating Developers
This is a term that acts as an umbrella term for objects and elements like rational databases, math libraries, search engines, spreadsheets and XML parsers amongst others. They do require investment initially but become widely available when fully developed. As such, programmers that are considered intermediate or expert in the field should be able to manage them accurately.
For more information, go to: …
I/O is short for input/output and refers to communication between systems or a system and an external device or element. It is commonly perceived as a cost in a system because communication can hinder the performance level of a system and slow it right down. Caching and representation can improve I/O, with the former storing a copy of a value locally and representation makes I/O cheaper by efficiently representing data.
For more information, go to: http://www.wilsonmar.com/1javaio.htmI/O Programming
Integration testing is literally what the label suggests. It is the testing of components as a single integrated unit after they have individually been unit tested. Integration can be very expensive and so it is important to make sure that it is integrated properly during the testing phase. Gradual integration is preferable to it being a dedicated phase towards the end of a project.
For more information, go to: Microsoft – Integration Testing
Intermittent bugs are the stuff nightmares are made of for programmers. They occur very rarely but when they do cannot be found. As such, it makes it difficult to eliminate unless certain protocols are followed. You must identify the circumstances under which it occurs and either reproduce it or use a logging system to trap it. It can take quite some time to identify and remove so be prepared to search for weeks.
For more information, go to: James Bach – How to Investigate Intermittent Problems
A computer programmer should always find out what he needs to know, and he or she needs to know a lot. You will need to know various skills for projects, with varying depths but high accuracy. Do not look online initially but instead use books that have high credibility and are considered to be accurate and effective. Building a knowledge base is a must but never try to blag your way through f you do not know it. Instead, do your research and find out.
For more information, go to: How to Improve Programming Skills
A debugging method that creates a permanent window into the execution of the program in log form, logging is an important and stable tool for programmers to use. Logging is an essential skill because it can offer significant insight into any system or program. Important for beginners and experts alike, the informative records that are produced by logging should be configurable so as to provide data related to bugs and performance.
For more information, go to: How to Debug Using a Log
Recursive functions in a system are known as loops and are characteristically bottlenecks because they take time to execute. They should be removed or enhanced in terms of speed to improve the function of a product. Finding a way around it is ideal but it is possible to optimize a loop by folding constants together, moving a pointer, removing floating point operations and taking other similar actions, depending on the system of course.
For more information, go to: Programming Loops in Computer Code
Managing Development Time
Project plans must be formulated prior to an individual project starting but it is imperative that management of development time occurs throughout. As such, any plan must evolve with progress marked as the project goes on. Project plans can help to manage development time because they can aid in the decision making process and identify milestones. Without such planning, it is wholly possible that deadlines will be missed.
For more information, go to: Time Management Tips for Developers
Memory is essentially space within a system that stores data and is actually an incredibly precious resource that must be managed effectively and efficiently. Creating new objects can be expensive within a system and problems may arise when nothing refers to a chunk of memory, thus rendering it garbage. Garbage collection via system intervention rather than programmer intervention can reduce errors and increase code accuracy quickly and easily.
For more information, go to: What Every Programmer Should Know About Memory
Memory leaks occur when a hash table is used as a cache and the programmer forgets to remove the references. This is a common mistake and one that most programmers will make at some stage. With the reference remaining, the referent is useless and cannot be collected, thus forming a memory leak. Every programmer should know how to look for and fix them in their infancy.
For more information, go to: Tony Gentilcore – Finding Memory Leaks
Motivation is a huge issue for programmers because there are two types of work out there – the boring, ugly and well paid and the beautiful, useful and generally poorer paid work. Programmers prefer the latter but you need to look into every single job and find something that can be used for motivation. It is important to look at every bug fixed, for example, as something that will help a client. Use whatever works for you.
For more information, go to: Zaid Tuffaha – 13 Steps to Find Motivation for Boring Work
Every programmer should learn new skills where possible if only to enhance their own abilities and motivation. Whether you choose to learn via reading books or experimenting with practical tasks, you can literally learn something new every day. You may choose to learn programming languages, start a new software project or attempt a new practical skill. Each of these options would be useful in a work environment.
For more information, go to: 10 Ways to Improve Your Programming Skills
Performance is a term that relates to the input and output of a running system. It is commonly used to refer to the speed of a system and the way in which it uses resources. The former could relate to memory, network bandwidth, server access or the database, and the latter to shared resources. Shared resources can cause deadlock, or a failure to proceed because of improper synchronization, or starvation, which is where a component is not scheduled properly.
For more information, go to: Measuring and Optimizing I/O Performance
Poor code is quite common and something that most programmers will encounter. You may have to work with the poor quality code that someone else has written and if you do then insist on taking the time you need to do so. You must gain an understanding of it and experiment where necessary. Always document and weigh up your course of action before taking it.
For more information, go to: James R. Bracy – What is Poor Quality Code?
Printlining is a debugging tool that offers a stable method of temporarily modifying a program in order to insert lines that will essentially print information out. It is commonly used in programs so as to identify problematic elements of a code sequence and thus facilitates the removal of issues that prevent it running correctly. Printlining tends to produce a simple log and so may not be suitable for more complex programs and issues.
For more information, go to: How to Debug Using a Log
Developing yourself professionally is a must in any career but it is particularly important if you want to progress as a programmer. Take responsibility for the team or various aspects of project management where you can. Learn new skills. Be social with your boss and find out how you could progress in the company. It is all about being proactive.
For more information, go to: Sharon L. Sutton – Managing Professional Development
Quality vs. Development Time
There is always pressure on software development because of time constraints, so much so that some programmers may feel the need to cut corners in order to achieve deadlines. This should be avoided at all costs unless you are asked to do so. If this happens, you should formulate a project plan so as to demonstrate what will be lost as a result and compensate for it.
For more information, go to: Johanna Rothman – Development Time vs. Quality Time
Source Code Control
A source code control system is an excellent tool for managing projects efficiently and effectively because they track changes to ensure that no code is lost and changes can be implemented with specific meanings. They are vital for working in a team but can be used for solo projects. Either way, they allow you to work with confidence, knowing that your work will not be lost and you will be able to go in and make changes at your discretion.
For more information, go to: The Source Code Control System
Software should be used and tested to an appropriate level so that it matures prior to use but, in some circumstances, in house or third party software may be used when it is immature. This could cause issues and risks, such as it being buggy. You should assess it and see how much scope there is for use, whether it is desirable or whether it can be improved before use.
For more information, go to: Anthony Finkelstein – A Software Process Immaturity Model
Software System Dependence
Software systems are not able to standalone in many cases, relying instead on various components that you have no control over so as to enhance productivity. However, it may bring issues in the forms of bugs, hardware restrictions and potential failure. As such, to limit the dependence, you may want to encapsulate a component and try to obtain source code where possible just in case.
For more information, go to: Component Based Software System Dependency Metrics
Stress testing a system is a must because it is necessary to find out exactly how much of a load it can work under. It is an accepted fact that the vast majority of systems do have a wall. It is all about finding out where it is and you must develop a plan to achieve this aim. Any stress test should start out with a light load and increase it gradually so it becomes more in line with the capacity expectations if only so that the system becomes predictable.
For more information, go to: IBM – Stress Testing
Talking to Non-Engineers
Programmers speak a language of their own and one that most regular people do not understand. The jargon, technical terms and various other programming languages will not make sense to them and they do not have the same technical judgment but they are intelligent. As such, speaking to non-engineers in layman’s terms will often enable them to understand what you say at a basic level.
For more information, go to: Sid Savara – A Software Engineer’s Guide to Speaking with Non-Technical Managers
Programmers have a habit of applying the term “impossible” to a task only in two circumstances – if it cannot be estimated or if it cannot be grown out of a system that is simple at its very foundation. However, this definition is flawed because it applies to daily activities that individuals perform regularly, like research. If you are to distinguish impossible from hard, it is important to be able to assess a definition of what the overriding aims of a project are.
For more information, go to: Understanding Engineers: Feasibility
The Time vs. Space Tradeoff
Basic computational complexity theory is essential knowledge if you want to be a good programmer. It is the principle that processor cycles, or time, and memory, or space, can be traded off against one another. It is about compromise and considering what improving one element would do to the other and whether a system needs such an improvement. It is necessary to weigh up costs before applying changes.
For more information, go to: Eric Suh – Space-Time Tradeoffs and Efficiency
Third Party Software Risks
Using third party software poses great risks to any project and those risks must be recognized in advance. If a project relies on software that the individuals or organizations do not control then there are risks to suitability, integration and development. It is necessary, therefore, to complete a risk assessment in advance and find an expert in the software to collaborate where possible.
For more information, go to: Managing Risks Due to Third Party Appliances and Applications
Touch typing is an essential skill for computer programmers because of the level of difficulty that is required when writing code. Being able to touch type may not be considered a must but it will save you time and make your job a little easier. It can take some time to learn so it is essential that you start becoming familiar with typing and the layout of your keyboard asap.
For more information, go to: Jeff Attwood – We Are Typists First, Programmers Second
Understanding the User
It is vital that you understand the target user when working on every single project that you are hired to work on. You must give the user what he or she wants and be open to ideas from individuals like market researchers who are skilled at finding out what they really want. Spending time with the user can also help. It is necessary to consider that requirements may change during work though because the client may not always have a completely clear idea of exactly what they want from the start.
For more information, go to: Understanding User Needs
Unit testing is not a separate entity to coding but rather an essential element of examining coding functionality. It is necessary to design a testing procedure and document a plan to do so. It is vital if a team is to catch bugs early enough to solve the problem quickly and easily and can also save a lot of time later on in the process. Checking code functionality need not be complex but it should be rigorous with reliable outcomes.
For more information, go to: Extreme Programming – Unit Tests
Becoming visible is sometimes difficult in the world of computer programming but you need to make sure that people know who you are if you want to make a name for yourself and build up the trust others have in you. Always be responsive and make sure that you keep others in the know. Be clear about your knowledge base and never ever be tempted to be dishonest. If you do not know something then tell people that and then learn!
For more information, go to: Get Noticed at Work