Common Sense Software Engineering: Letter to a Young Woman (Part III)
April 21, 2017 Leave a comment
This is the third and final part of a three-part series. It is a huge piece of writing. It resulted from a conversation I had with a young woman who showed interest in learning how to program and possibly enter the IT profession. It is also an attempt to bring the realities of the Information Technology profession as it is today into perspective so that a young woman interested in this field can make informed choices as to how she may be able to enter the field either professionally or for self-interest.
Those who read this piece and would like to pursue further study are more than welcome to contact me with their questions and requests for assistance at email@example.com.
I will do everything I can to help you on this long but potentially exciting journey while also offering advice on how to avoid the most serious pitfalls you may encounter.
In addition, since this is such a long piece, it is also available in downloadable PDF form at the following address… https://1drv.ms/b/s!AnW5gyh0E3V-g2bQ4UCq4Df-V2tf
Since this paper was written, Microsoft has released its latest version of Visual Studio, Visual Studio 2017. This replaces Visual Studio 2015, which has been noted throughout this paper. Please note that both Visual Studio 2015 and 2017 are completely compatible with each other regarding development processes. As a result, notes pertaining to Visual Studio 2015 will be just as applicable to Visual Studio 2017 and visa versa.
If you want to download the installation for Visual Studio 2017, please use the following link…
Select the Community Edition (Free Download)
Requirements for Installing Visual Studio 2015 & the .NET Framework
The minimum requirements for installing Visual Studio 2015 and the .NET Framework is a machine running Windows 7/Service Pack 1. If you have a brand new machine you will most likely have Windows 10 on it, which is fine.
Installing Visual Studio & the .NET Framework
With a single installation package you can install both the Visual Studio 2015 Community Edition and the .NET Framework Version 4.6. Depending on the deployment of the Visual Studio Community Edition that you download you may get version 4.6, 4.6.1, or 4.6.2 of the .NET Framework. All of these latest frameworks are capable of supporting any application type you wish to create.
To get the download package, go to the following site address…
On this web page you will see a button entitled, “Download”. This will bring you to a secondary page where you will be provided with the option to download the file labeled, “vs_community.exe” or the one labeled, “VS2015.com_enu.iso”.
The “vs_community.exe” file will allow you to install the package over the web after you have saved the file to a selected directory on your computer.
The “VS2015.com_enu.iso” file is the complete package in downloadable form. Like an “exe” file, the “iso” file can also be launched by double-clicking on it. However, this file will immediately request that you burn it to a DVD since “iso” files cannot be directly executed.
The download page(s) will also provide you with detailed descriptions for either type of installation package.
Either installation method will provide you with all the tools you may require to study and learn C# and application development.
Learning C#, Visual Studio & the .NET Framework
To begin studying this environment, there are several ways in which you may start. If you feel you can handle a lot of technical information all at once then one of the best places to look at is the following site address…
Here you will find tutorials on every aspect of Visual Studio, C#, and the .NET Framework. However, these tutorials tend to be for seasoned developers who are looking to learn something new and possibly changing over from the Java Community.
This site is also heavily reliant on reading the material and researching it, which in any event is something that all developers have to do since videos aren’t the best medium for hard core technical subject material.
A second way to learn this material is to go to the online videos that are offered by a variety of sites and take some of the good tutorials that many developers and instructors have provided without charge to the development community.
To familiarize yourself with the Visual Studio 2015 environment you can, go to the following site addresses…
Introduction to Visual Studio 2015
https://www.youtube.com/watch?v=aewyHIBsIec (emphasizes C#)
How To Use Microsoft Visual Studio 2015 Community Edition
Note that these videos go into quite a bit about the actual use of the Visual Studio development environment. So don’t be discouraged if you don’t understand everything all at once. All of this technical information will become second nature over your time of studying it.
For learning C#, Microsoft has a set of recommended tutorials at Channel9 for beginners. You can find the entire list in order at the following site address…
Despite the many advances in technologies for media in recent years, the best way to learn how to program is from those ancient technologies called, “books”. With books you have advances such as “earmarking pages”, “writing in the margins”, and even “bookmarking” by placing a piece of paper within the pages so you can easily return to where you left off reading.
Simple but highly effective technologies…
There are tons of books available on every aspect of technology you can imagine. And for C# I would recommend the following to begin with…
C# For Beginners: The tactical guidebook – Learn CSharp by coding
Microsoft Visual C# Step by Step (8th Edition) (Developer Reference) 8th Edition
Both of these books are available from Amazon.com. And if you look at the details of the books at the Amazon site you will notice that all of them are fairly large, each probably taking a single tree to produce. Nonetheless, the advantages of such books is that they have everything, from “soup to nuts”, to learn and understand the C# language. And you can study them at your own pace building up your technical capabilities slowly.
Becoming a Professional or a Hobbyist…
Everyone who starts to learn to program will consider the possibility of doing this work professionally. Many who take such courses in school have already decided upon such a career, though this number has been decreasing over the years. And surprisingly, many people in the field, including the younger professionals find that university graduates in Computer Science are not nearly as good as self-taught developers since the graduates tend to have more theoretical knowledge while the self-taught developer has experienced more real-world development situations.
However, the Information Technology profession as it is known is not anywhere near what is promoted by Hollywood or television. Technical professionals are not “Nerds” or “Geeks” as the media likes to portray us. No doubt we have such personalities within the profession. Nonetheless, the majority of people who make up the bulk of business and general application developers and software engineers tend to be a rather motley but tough, engineering bunch.
There is a tremendous amount of competitiveness within the field along with a lot arrogance that is often abrasive and difficult to handle. Hopefully, the new millennial generation of developers will root out these traits as they have been very damaging to the profession and have helped destroy its allure as a career consideration.
There is also always a feeling for the need to keep up or you will not be accepted by your colleagues in the work place and nor may you be prepared for a new position at another company. Thus, the field has developed a similar trajectory as officer career paths in the US military, which has come to be called the “up or out syndrome”; you either advance or your toast. This, luckily, has been the thrust mostly in the corporate environments leaving the consulting and freelancing arenas far more open to those who simply want to enjoy the arts and sciences of software development. In these areas, individual developers can maintain a software specialty interest while still being able to accrue projects as their experience increases. The reason for this lessened pressure on the needs for the knowledge of so many technologies is that many times freelancing and consulting assignments are for clients that are more flexible in how certain applications are built, though there are just as many that require the standard technological implementations that the market is fostering.
Though such independent personnel still have to maintain their studies and gain knowledge, the pressures are not as extreme. At least in my years as a senior consultant I did not find this to be the case. The pressures instead come from the ability to maintain a constant flow of contracts and\or assignments. If you work with a good agency this is less of a problem than that of a freelancer.
The corporate environments can also be very dehumanizing and brutal where the enjoyment of accomplishment is often overridden by impossible deadlines and intense pressures. Most of these situations are the results of the terrible corporate politics that come into play with development projects, which are usually fostered by incompetent technical management. I have found that being a senior consultant and on the outside of employment you are not as affected by such impediments to your development. You are there to do an assignment and that is it. Many consultants I have spoken with at all levels of expertise have felt the same way and many have refused adamantly to become an employee as a result; even it meant not working for a while.
Due to the rampant outsourcing of the late 1990s up through the 2000s and even currently, a large percentage of all technical professionals are now either consultants (hired through agencies) or freelancers who work independently. Consultants and freelancers in many respects are technical mercenaries who do their jobs for a variety of reasons; many do it just because they are good at it and for the monies when the contracts are plentiful. However, there are many that also do it for the pure joy of being able to create something of quality and be more in control over their own lives.
For young people today the corporate environments can be quite discouraging. And many have opted to not enter the field altogether as a result. This has been especially true for young women. Look at any technical site and review the articles there and you can immediately see the lack of female contributors to any of them.
To enter into the corporate environments requires one of two things to get your foot in the door; a good amount of experience or a university degree in Computer Science with an emphasis on development, or both. If you can’t get hired you cannot get the experience and no university degree will help in a situation where experience is a requirement, which is quite often the case.
However, in the small business and startup communities, if you can show you have the aptitude, have some experience with development, and have enthusiasm for the profession, your chances of getting a position is greatly increased.
Reviewing some of the videos on YouTube by younger professionals, it appears, that despite the daunting obstacles that could be placed in the way of young people who want to enter the profession, there are ways that are still viable for consideration such a career path.
Surprisingly, the “Mustang” still appears to be a very credible way for a new person to enter the profession. A “Mustang” is one who derives their education and experience all on their own and enters the profession without any formal training. I was a “Mustang” when the profession in the 1970s was literally closed to non-experienced personnel. I took the operations route and ran the big mainframe machinery as an operator at night and slowly taught myself mainframe development and finally moved into a developer position in about three years.
Since operations is no longer a viable path for professionals today, young people may opt for working with older professionals as interns acquiring their experience with a mentor, acquiring experience with freelance projects on their own through one of the many freelancer sites, and when enough experience has been obtained be able to consider decent paying contracts with consulting agencies.
None of this is easy but the Information Technology profession has never been an easy profession to enter no matter which path is chosen during any of the major eras it has experienced. It takes a sense of determined perseverance, a lot of studying, a tremendous desire to solve problems as well as the desire to create things from scratch, as well as keeping an eye on the changing nature of the technologies at your disposal.
No matter how good you may develop your skills you have to realize that your first projects may be poorly paid or possibly not even paid at all. The idea is to gain experience and no matter how you do that, as long as the experience is legitimate and defensible in an interview few really care how you got to the point you did. They only care that you can show that you can do the job.
As hard as the profession may be, and it is considered one of the most difficult professions in the world to enter and succeed at, it is still very much an artist’s life at the beginning if you choose to do it on your own. However, as long as you keep at it, you will succeed. You may not become rich but you will be able to secure a livable income.
Many times, people who begin their studies intending to develop programming capabilities simply as a hobby for enjoyment, find that they develop a piece of software that may actually have money-making capabilities or they have developed their skills to such a point that they want to change what they are doing to program professionally. This latter case is found all over the field with many changing their career paths for that of becoming a “computer jockey”.
Selling software in the industry has become a rather difficult proposition since one of the results of the Open Source movement (previously described) has been to make software development for sale a thing of the past since everyone these days wants their software for free. This development in the profession came about because many of the younger professionals years ago who entered the Java Community were living at home or already had support mechanisms to allow them to develop their software and give it away.
When you don’t have to support yourself, as these people apparently didn’t, you don’t have a view towards survival, which many more senior professionals adamantly complained about. Hopefully, this viewpoint will change and as professionals become older will want to see earnings from their own creations. It is only natural.
For now, offering services for a software product or the development of new ones (freelancing) is the way many individual professionals earn their keep. However, if one perseveres with a credible product, monies can still be earned from their sale.
The Game Development Industry
One area that is growing substantially and has not completely been subordinated to Open Source views on software distribution is the game programming industry. There are a growing number of independent developers creating games for sale and\or offering cost-based extensions to game environments or even games themselves.
The gaming industry has been dramatically opened up to professionals wanting to develop game environments professionally. The most prominent of these game environments, all offered completely freely to game developers, can be found at the following site addresses…
- Unity 3D https://unity3d.com/
- Cry Engine https://www.cryengine.com/
- Wave Engine https://waveengine.net/
- The Game Creators https://www.thegamecreators.com/
There are literally hundreds of freely available game development tools that any developer with any type of major language skills can avail themselves of to produce literally any type of game that their imaginations can conjure up.
However, there are two caveats to this part of the industry. One, game development is very difficult no matter how you approach it. You will have to spend quite a bit of time studying its foundations before you will have any chance of creating anything remotely near what you would like to eventually accomplish.
Two, due to the incredible increase in the availability of 3D game development tools, video games have disastrously given rise to an ongoing compendium of violent, mind numbing offerings. Like the sociology of the ‘smart phone”, these types of games have had terrible effects on young people playing them. One such effect is the dramatic increase in obesity in young people since they spend less time doing anything really active, which their bodies need while also consuming large amounts of junk food leading many into early symptoms of diabetes.
If you decide to enter such a development area, I hope you would consider the development of games that make people “think” so instead of detracting from the development of a young person’s mind you actually contribute to its growth.
One such area in this type of development is the “war game”. Despite the ominous sound of this type of game, it was exactly this type of game that dominated the 1960s, 1970s, 1980s, and into the 1990s. War games were considered by industry analysts to be the games of choice for the “educated”.
War games teach “critical thinking” skills, the understanding of resources and their limitations and strengths, as well as tactical and strategic thinking skills.
Most often war games are based on actual historical battles and events that actually occurred and places the player in the position to see if he or she can outperform the original commanders.
According to certain writings, the “war game” is starting to make a reemergence as a popular past time for players. And there aren’t simply enough developers out there doing this type of work because it is so difficult. So you may want to give this path some consideration if business application development is not your cup of tea…
The massive amount of information presented here is not meant in any way to deter you from an interest in the software development field no matter what path is decided upon; professional or hobbyist. This information was meant to provide you with a glimpse into the incredible amount of information and knowledge that is required for a person to succeed. And this is only the tip of an enormous iceberg.
The good news is that no one ever sinks as long as they persevere to succeed in developing their skills. It will take at least 6 months to become proficient in your chosen language no matter the choice. It will take at least two years of study and experimentation altogether to become familiar and competent with the many support tools you will be able to study and use in the development of applications as well as the common variety of application types that most professionals tend to work with.
This paper was merely a first step for your potential journey…