You may be reading these lines in a browser of a computer or mobile phone, in your Gmail or Outlook application or you may be reading it in beautifully designed pages that are digitally typed and designed, and presented for you and probably some of you received a Facebook notification on your phone that prompted you to read these lines. Thinking of your day to day activities, you may have opened your browser to search for jobs, to apply for scholarships, to use Skype for a business call, scrolled up and down a hundred times your Facebook feed or posted attractive (you think so) photos in your Instagram or Snapchat accounts. You may have also uploaded content to your organization’s website, used a management information system provided for your organization to generate reports or ordered Siri to play you a song.
Gmail, Outlook, Facebook, Skype, Snapchat, Google Chrome and all the other tools and applications that you use on your computer or your other digital devices are all software applications and tools that are built by software developers through a process called software development. Software development is a process that includes all that is involved between the conception of the desired software through to the final manifestation of the software, sometimes in a planned and structured process. Software development may include research, new development, prototyping, modification, reuse, re-engineering, maintenance, or any other activities that result in software products, like the ones you use every day.
Even though software can be applied to a huge variety of uses and contests, the process to develop any type of software is standard, throughout the world. The coding, the instructions given by software developers to computers through computer programming languages in the process of software development is completely logical, scientific and specific such that these languages ensure the programs do exactly what they are designed to do, for any person, in any country. Computers — for example your laptop or mobile phone — as their capacity allows, are there to apply all those instructions exactly as they are laid out, without getting grumpy about it, or tired or frustrated (though they do get heated sometimes, only because they get excited working for you!).
Is there any other ways you define Software Development? Please comment below.
In Afghanistan, the software industry is experiencing a steady but gradual growth. The expanding accessibility of the Internet, governmental investment and attention to going digital, private sector development and the rise of technology companies and startups, and an overall improvement in security and stability to enable all these transformations are necessary factors in making this growth go slower or faster. However, as a person closely watching the software industry in Afghanistan through a community I founded in 2014, CodeWeekend, I can for sure say that the growth overall has been promising. Indeed, the success of a completely volunteer-based and non-profit community like CodeWeekend, which has organized over 100 conferences, seminars, trainings in three different cities of Afghanistan (the majority in Kabul) is the product of the collective support of software developers, technology companies and the Afghan government.
As the largest developers community in Afghanistan, CodeWeekend provides a case study of the developers’ situation and the status of the software industry in Afghanistan today.
CodeWeekend’s mechanism for engaging with software developers is through its Facebook group and Facebook page, among other ways. Using Facebook analytics, we can measure the engagement and crosscheck it with other data sources we have, like event attendance records.
Looking at the total members statistics, there are over 3,000 members. The graph below shows a +13% membership growth since last year, possibly due to an increase in interest in computer science, CodeWeekend’s value added to the skills level of its members or the networking opportunities provided, or due to more robust involvement of the software industry in the market, or perhaps some combination of all of the above.
Additionally, in the last 28 days, more than 2,000 of the members were active, representing a high degree of engagement with the group’s content, which is mainly technical and software-related.
Furthermore, the inclusion of women in the group is at a similar rate to the representation of women in this field comparable to the rest of the world, if only slightly lower: 17.5% of group members are female.
Looking at the geographical data, CodeWeekend members are mostly from Afghanistan and the top cities represented are the three major urban areas of Kabul, Herat and Mazar-e Sharif. Other members of the group are from the United States, India and Germany, as there are many Afghan developers residing in these countries due to migration and or people studying abroad.
Not only the Facebook group data, but the registration data from CodeWeekend’s events shows that the average number of participants in CodeWeekend’s events sits at around 25 people, and the highest attendance was 120 participants who came to a conference last year held at Kardan University. The participants are almost entirely software developers, and computer science students and graduates. Occasionally, technology company managers and founders are also found among the participants.
As the information technology industry grows due to high demand in making processes automated and more efficient, so does the software industry, as one of the fundamental elements of the IT industry. This growth brings investment both in terms of infrastructure building and human resource capacity building that results in rewarding career opportunities for those pursuing this field. For example, the average annual salary of a software developer in the US is USD$92,240, in Switzerland USD$85,709 and in Norway USD$70,776, countries where software developers tend to be among the best paid.
While not yet comparable to these countries, in Afghanistan, the IT and software industry is nevertheless undeniably on the rise. Previously developers from abroad were recruited to work on software and IT projects in the country, but nowadays, there are more Afghan developers working in both government and private sector companies. Technology startups, incubators and communities are expanding exponentially. There have been many exciting developments in this emerging field in Afghanistan, though it’s still early and there is some ways to go before the industry reaches a level of maturity as found in more economically developed countries. Social, technical and regulatory barriers still exist and act as hurdles to the growth of the information technology industry, which is also deterring the development of a software industry.
As part of my more than ten years of work experience in different software development roles in a variety of companies of different size and structure in Turkey, Afghanistan, England and Canada, I’ve developed insights that may be of value for those thinking about entering a career in this field, or who want to excel further in this area, which I share below. Some of these principles that are also covered in the book: The Passionate Programmer, by Chad Fowler, which I highly recommend.
Choose your market
Software industry is a huge and ever growing industry and as such it’s impossible to be expert in everything. Thus, you should give some thought to choosing where you want to focus. It’s generally recommended to be a specialist in one thing and a generalist in a few others. You can’t be a specialist in everything. For example: are you going to be a frontend developer, a backend developer, a mobile application developer, or something else? Choose to work on what you love, and then excel in it.
Additionally, the software industry is growing so fast that almost every day there is a new framework, tool or library developed that could prove to be useful to you. Thus, it’s good practice to have strong computer science core knowledge combined with a continuous learning mindset in order to keep on top of the pace of change in this industry.
Invest in yourself
In an exponentially growing industry like software, it’s very important to learn the fundamentals and how things work, to not find yourself perpetually copy pasting codes from Github or StackOverFlow (these are two of the most used websites by software developers). If you are thinking of doing software development as a career, you should learn to fish, AKA to code.
Additionally, make self-development a habit. Read books, join online courses, watch videos. It can be challenging to spend yet more hours in front of the computer for self-development, on top of your work hours developing code, so consider getting up and out, joining coding workshops in the community or software sessions offered in your area. Chances are you’ll learn something new, and get to socialize and build your professional network.
Always set high standards for yourself. As a software developer and in a network the likes of the Internet, you are in a flat structure. In that moment that you sit in front of your computer, connected to the Internet, you have the same opportunities and facilities as someone does in Europe or the US. Recognize this power, and you’ll quickly manifest the potential you to be excellent. Most of us are content to go with the flow. It takes active effort to fight the mindset of ‘good enough,’ and to strive for more. Work every day to force a remarkable career and you’ll soon find this leads to a remarkable life.
But it’s not glamorous. It takes adherence to those well worn paths: be disciplined in your work ethic, be on time, fulfil your promises, and get organized. This self-discipline is the start to remarkability.
Write a blog post, deliver a session in your local developers community, upload an instructional video to Youtube, volunteer to teach coding, become a mentor to someone entering the field or to a young person thinking about it. Do one or more of these as time allows. Do it for good, to contribute back to the community and help others. You will never regret helping out, never.
It’s same everywhere
Speaking as someone who has worked in what may seem like polar opposite countries (and in fact, geographically, are), I discovered that software development and the way most companies work are remarkably similar everywhere. The stress, anxiety, and risk of burnout when you don’t know what you are doing, or the consequences lacking discipline or failing to pick up new skills are the same anywhere. And so is the joy and sense of satisfaction when you work hard, conquer a new skill, and get your deliverable in on time. It’s a career that is somewhat universal, whether you are sitting in a teahouse in Shar-e-naw in downtown Kabul or at the library in central London or in a Starbucks in Seattle. Indeed, since people in this industry rely so heavily on the Internet, you are constantly connected to a community that transgresses borders, tapping into the knowledge and experience of people in vastly different places. This can only be a boon to those setting out in their careers in once isolated countries like Afghanistan.
Nowadays, there is a huge interest in learning how to code. You will notice plenty of articles coming up in your social media feed, in technology portals and even in mainstream media that emphasize the importance of learning to code, no matter who are you or what you do. A major annual campaign run by code.org, a US based non-profit organization, called Hour of Code promotes coding, and is endorsed by many celebrities and pioneer software personalities who are featured encouraging computer science education and coding.
As in technology generally nowadays, there is also a lot of focus on women’s representation in this field, which is encouraging. Indeed, the number of organizations promoting the participation of women and girls in coding is rapidly growing.
I myself recently experienced the high level of interest from all kinds of people when I was bombarded with responses to a Facebook post on my profile offering to help people learn how to code.
So all this attention, the campaigns and growing awareness have become a business opportunity for many and a way to give back for many others. coding bootcamps are increasingly popular, computer science and IT institutes are flourishing, and schools of all levels and disciplines have started to pay serious attention, with many offering courses in coding by computer science educators. Additionally, many organizations and companies, as part of their corporate social responsibility commitments, have started to promote computer science and have supported their employees to learn coding, also hosting and sponsoring events for this purpose.
These are all positive changes. However, learning how to code needs more than signing up for a one-off course. Like any other skill, learning to code requires dedication, discipline and grit. I try to make this point for anyone who approaches me wanting to learn coding. Let me elaborate further:
Write down why
In your notebook or in your newly downloaded Sublime Text editor or Visual Studio Code, write down why you want to learn coding. Is it because you see your friends talking about? Is it because you read a report saying that your current job is at risk in the near future and you felt the panic that pushed you toward a new field? Or is it because you want to develop an app or develop your startup’s website and you can’t afford to hire a web developer? Whatever it is, write the reasons down and then consider whether you have the right incentives and motivations, because it is motivation that you will need to ultimately succeed. If it’s a passing interest, or getting on a fad bandwagon, chances are that you will quit before you really grasp coding. Now, decide which of the following categories you fall into:
- I am just curious to know whether I can learn coding. I’m reading about it everywhere and it sounds cool. If your motivation is as simple as this, then you might want to take some time to investigate further whether coding is your next best move, or find the ‘sweet spot’ motivation before diving in, so that you’re more likely to stick with it.
- I want to develop my startup website and I can’t afford to hire a developer until I have investors. This is the driving incentive behind why many individuals want to learn coding. You may continue coding after your first project or stop after one, but even if just for one, you will learn a lot, and you’re in a great position to remember what you’ll learn if you’re applying it to a project you are working on.
- I want to switch careers and I see myself becoming a developer. If you’ve done your research, visited developers, tried some tutorials online and ordered or borrowed some books to read and you’re serious about becoming a software engineer for life, then congratulations, you’re ready!
Consider whether you can you allocate the time needed to learn coding, which I’d suggest be at least 30 minutes a day for at least six months, but ideally up to a year. Remember, it takes 10000 hours to become an expert in a subject, if you are serious.
Get to know the history and context
If you want to learn a language, you can learn it quicker if you travel to the place the language is spoken or at least read about the history and culture of the country where the language is spoken. If you want to learn how to code, learn as much as you can about computers, their history, impact on society, and evolution, as well as the mechanics of software and hardware. Code.org has a collection of videos explaining fundamental concepts in simple language by experts and you can read blogs, watch videos or read books to complement your learning to code with this contextual background. You can also ask a developer friend or visit a software startup in your community. You can learn a lot from interacting with those who have already mastered coding more than anything.
Plot your next move
Now that you asked yourself these tough questions and whatever your answer is, you want to proceed and came here to follow a path to go ahead, I recommend you the following:
- Have a project in mind. You’ll learn more easily if you are learning to code for a real project. If you don’t have one in mind, try to come up with something you feel excited about. For example, think of an app you can create to help you or someone else address a compelling problem, or build a website for a non-profit organization or for a friend’s startup.
- Use online resources. I’ve come across many success stories of developers who got started from taking courses on edx.org, codecademy.com, freecodecamp.com or coursera.com. Go ahead and start there too. I’d also recommend joining freecodecamp.com community, where you can follow a curriculum and start learning how to code from scratch. If you struggle with the the curriculum you can make use of the forums and chatrooms provided by freecodecamp or from your friends and other communities. Stackoverflow.com is where I answered many questions and found answers to many of my own questions as well as on w3schools.com which helped me with anything from HTML to Node.js.
- Find a partner or a community. It is common to get stuck in a simple problem in coding and not be able to find an answer for hours. This happens even to expert programmers, but it can be especially disappointing for beginners. That’s why having a partner where you can do pair programming or a community where you interact with people at your level or higher, to ask questions, or just for some solidarity! Consider checking meetup.com or search Google and Facebook to see if any coding or technology events are taking place nearby you.
I hope these points help you start your journey toward learning how to code. Let me know if you have any questions, suggestions or ideas, in the comments.