Posted on Leave a comment

Security Engineer — Income and Opportunity

5/5 – (4 votes)

Before we learn about the money, let’s get this question out of the way:

What Does a Security Engineer Do?

A security engineer is a “white-hat hacker”, i.e., an IT professional who analyzes computer systems and computer networks to ensure they are running securely. This involves proactive analysis and understanding of possible security threats and attack vectors and designing the system to minimize the exposure to these threats.

Security Engineer Skills and Qualifications 

Security Engineers should have at least a bachelor’s degree in computer science or a related field.

You need to understand networking, computer security systems, databases, HTTP, and web protocols, as well as an intimate understanding of distributed systems.

In particular, here are some crucial qualifications that are relevant as a Security Engineer:

  1. Bachelor of Science in Computer Science or a related field
  2. 5+ years of work experience as a System Security Engineer or a related position
  3. 3+ years of work experience in development, operation, and maintenance of real-world security systems
  4. Knowledge of operating systems
  5. Knowledge of distributed systems
  6. Knowledge of databases and database security
  7. Knowledge of computer networks, networking technologies, network security
  8. Knowledge of network monitoring solutions
  9. Knowledge of anti-virus filters, content filtering, firewalls, authentication systems, and intrusion detection systems
  10. Knowledge of security protocols, cryptographic algorithms, and principles
  11. Critical thinking
  12. Ability to solve complex problems 

Annual Income Security Engineer (US)

💬 Question: How much does a Security Engineer in the US make per year?

Figure: Average Income of a Security Engineer in the US by Source. [1]

The average annual income of a Security Engineer in the United States is between $75,732 and $144,874, with an average of $108,851 and a statistical median of $105,928 per year.

This data is based on our meta-study of ten (10) salary aggregators sources such as Glassdoor, ZipRecruiter, and PayScale.

Source Average Income
Glassdoor.com $111,691
ZipRecruiter.com $120,708
Zippia.com $100,165
Talent.com $119,946
Salary.com $138,822
PayScale.com $95,953
Builtin.com $144,874
Indeed.com $75,732
Comparably.com $90,120
SalaryExplorer.com $90,500
Table: Average Income of a Security Engineer in the US by Source.

This is the most comprehensive salary meta-study of security engineer income in the world, to the best of my knowledge!

Let’s have a look at the hourly rate of Security Engineers next!

Hourly Rate

Security Engineers are well-paid on freelancing platforms such as Upwork or Fiverr.

If you decide to go the route as a freelance Security Engineer, you can expect to make between $30 and $150 per hour on Upwork (source). Assuming an annual workload of 2000 hours, you can expect to make between $60,000 and $300,000 per year.

⚡ Note: Do you want to create your own thriving coding business online? Feel free to check out our freelance developer course — the world’s #1 best-selling freelance developer course that specifically shows you how to succeed on Upwork and Fiverr!

Industry Demand

But is there enough demand? Let’s have a look at Google trends to find out how interest evolves over time (source):

Learning Path, Skills, and Education Requirements

Do you want to become a Security Engineer? Here’s a step-by-step learning path I’d propose to get started with Security :

You can find many additional computer science courses on the Finxter Computer Science Academy (flatrate model).

But don’t wait too long to acquire practical experience!

Even if you have little skills, it’s best to get started as a freelance developer and learn as you work on real projects for clients — earning income as you learn and gaining motivation through real-world feedback.

🚀 Tip: An excellent start to turbo-charge your freelancing career (earning more in less time) is our Finxter Freelancer Course. The goal of the course is to pay for itself!

You can find more job descriptions for coders, programmers, and computer scientists in our detailed overview guide:

The following statistic shows the self-reported income from 9,649 US-based professional developers (source).

💡 The average annual income of professional developers in the US is between $70,000 and $177,500 for various programming languages.

Question: What is your current total compensation (salary, bonuses, and perks, before taxes and deductions)? Please enter a whole number in the box below, without any punctuation. If you are paid hourly, please estimate an equivalent weekly, monthly, or yearly salary. (source)

The following statistic compares the self-reported income from 46,693 professional programmers as conducted by StackOverflow.

💡 The average annual income of professional developers worldwide (US and non-US) is between $33,000 and $95,000 for various programming languages.

Here’s a screenshot of a more detailed overview of each programming language considered in the report:

Here’s what different database professionals earn:

Here’s an overview of different cloud solutions experts:

Here’s what professionals in web frameworks earn:

There are many other interesting frameworks—that pay well!

Look at those tools:

Okay, but what do you need to do to get there? What are the skill requirements and qualifications to make you become a professional developer in the area you desire?

Let’s find out next!

General Qualifications of Professionals

StackOverflow performs an annual survey asking professionals, coders, developers, researchers, and engineers various questions about their background and job satisfaction on their website.

Interestingly, when aggregating the data of the developers’ educational background, a good three quarters have an academic background.

Here’s the question asked by StackOverflow (source):

Which of the following best describes the highest level of formal education that you’ve completed?

However, if you don’t have a formal degree, don’t fear! Many of the respondents with degrees don’t have a degree in their field—so it may not be of much value for their coding careers anyways.

Also, about one out of four don’t have a formal degree and still succeeds in their field! You certainly don’t need a degree if you’re committed to your own success!

Freelancing vs Employment Status

The percentage of freelance developers increases steadily. The fraction of freelance developers has already reached 11.21%!

This indicates that more and more work will be done in a more flexible work environment—and fewer and fewer companies and clients want to hire inflexible talent.

Here are the stats from the StackOverflow developer survey (source):

Do you want to become a professional freelance developer and earn some money on the side or as your primary source of income?

Resource: Check out our freelance developer course—it’s the best freelance developer course in the world with the highest student success rate in the industry!

Other Programming Languages Used by Professional Developers

The StackOverflow developer survey collected 58000 responses about the following question (source):

Which programming, scripting, and markup languages have you done extensive development work in over the past year, and which do you want to work in over the next year?

These are the languages you want to focus on when starting out as a coder:

And don’t worry—if you feel stuck or struggle with a nasty bug. We all go through it. Here’s what SO survey respondents and professional developers do when they’re stuck:

What do you do when you get stuck on a problem? Select all that apply. (source)

To get started with some of the fundamentals and industry concepts, feel free to check out these articles:

Where to Go From Here?

Enough theory. Let’s get some practice!

Coders get paid six figures and more because they can solve problems more effectively using machine intelligence and automation.

To become more successful in coding, solve more real problems for real people. That’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

You build high-value coding skills by working on practical coding projects!

Do you want to stop learning with toy projects and focus on practical code projects that earn you money and solve real problems for people?

🚀 If your answer is YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

If you just want to learn about the freelancing opportunity, feel free to watch my free webinar “How to Build Your High-Income Skill Python” and learn how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

References

[1] The figure was generated using the following code snippet:

import matplotlib.pyplot as plt
import numpy as np
import math data = [111691, 120708, 100165, 119946, 138822, 95953, 144874, 75732, 90120, 90500] labels = ['Glassdoor.com', 'ZipRecruiter.com', 'Zippia.com', 'Talent.com', 'Salary.com', 'PayScale.com', 'Builtin.com', 'Indeed.com', 'Comparably.com', 'SalaryExplorer.com'] median = np.median(data)
average = np.average(data)
print(median, average)
n = len(data) plt.plot(range(n), [median] * n, color='black', label='Median: $' + str(int(median)))
plt.plot(range(n), [average] * n, '--', color='red', label='Average: $' + str(int(average)))
plt.bar(range(len(data)), data)
plt.xticks(range(len(data)), labels, rotation='vertical', position = (0,0.45), color='white', weight='bold')
plt.ylabel('Average Income ($)')
plt.title('Security Engineer Annual Income - by Finxter')
plt.legend()
plt.show()
Posted on Leave a comment

Caesar Cipher in Python

5/5 – (1 vote)

Caesar Cipher is a simple encryption and obfuscation method. It’s a straightforward substitution cipher that replaces each plain text character with the obfuscated character obtained by shifting the plain text character a fixed number of positions in the alphabet.

What is Cryptography?

Before we introduce our first cryptographic algorithm, Caesar’s cipher, let’s first introduce cryptography as a scientific and industrial discipline.

💡 Definition: Cryptography is the study of secure communications techniques that allow only the sender and recipient of a message to view its contents. The term is derived from the Greek word kryptos, which means hidden.

Source: Kaspersky

Here’s another less formal definition:

💡 Definition: Cryptography provides for secure communication in the presence of malicious third-parties – known as adversaries. Encryption uses an algorithm and a key to transform an input (i.e., plaintext) into an encrypted output (i.e., ciphertext).

Source: Synopsis

Getting Acquainted With the Terms in Cryptography

By this point, we begin to notice certain similarities or keywords.

(1) The first thing to notice is that both definitions emphasized secure communication, i.e. a communication whose content is unavailable to anyone other than the sender and receiver(s) of the message. The content is at the center of communication, as it is being carried in the form of a message.

(2) The second thing to notice is that we have the first party, i.e., the sender of the message; a second party (or more than one), i.e., the recipient(s) of the message; and possibly a third party, i.e., any unintended/uninvited recipient of the message, also known as an adversary.

An adversary is generally considered an unintended recipient of the message who might misuse the content of the message with any malicious intent.

(3) The third thing to notice from the definitions are mentions of a key, an algorithm, a plaintext message, and a ciphertext message.

A key is a changeable component, usually a number or a sequence of symbols that drive the encryption algorithm.

An encryption algorithm is represented as a series of computational steps which transform an input content (e.g., non-binary text or other binary content), by applying a key, to a secure ciphertext message.

The ciphered content is practically unreadable and, as such, suitable for transfer over an insecure information system to its intended recipient. The intended recipient holds a key that enables him to apply a reverse algorithm and decipher the ciphertext message back to the original, plaintext message.

It is assumed that a third party doesn’t hold the key and is unable to retrieve the plaintext message content in any other way, so the message is available only to the intended recipient and therefore secure.

From a practical point of view, absolute security may not be achieved as there are attack methods that might enable a third party to break the ciphered message and retrieve the original content, but their existence depends on the strength of a specific algorithm, which we will discuss at a later point.

What is Caesar’s Cipher?

Caesar’s cipher is a simple cryptographic algorithm that uses substitution, i.e., systematic replacement of each symbol from the original, plaintext message with another, predetermined symbol.

According to popular belief, it is said it was used by the Roman emperor Julius Caesar in his private correspondence.

Due to the algorithm’s simplicity, Caesar’s cipher in the modern era is not used as a standalone method of encryption but still finds its place as a component in more complex cryptographic systems, such as the ROT13 system or Vigenere cipher.

Besides that, it is a nice and simple algorithm to start our journey into cryptography.

How Does Caesar’s Cipher Work?

Caesar’s cipher algorithm construction begins by defining a set of unique symbols, which we will refer to as the alphabet.

Note: if an alphabet is also defined by order of its symbols, which is not a common case with Caesar’s cipher, it is said that the cipher algorithm uses monoalphabetic substitution.

For example, alphabets a1 = {A, B, C} and a2 = {A, C, B} are treated as different alphabets because the algorithm would produce different outputs for each of them.

We’ll take a closer look at the effect of symbol ordering a bit later.

Besides the alphabet in Caesar’s cipher, we will also introduce a key, i.e., a number that represents an offset in the symbol substitution.

This might sound a bit complicated, but it’s very straightforward: it just means how many symbols in the alphabet we have to skip before reaching the corresponding output symbol.

It is always helpful to take a look at an example: with an alphabet defined as al = {X, R, G, A, F, T, I} and a key k = 5, a plaintext pt = “GRAFITTIX” would be encrypted to ciphertext ct = “XIRGFAAFT”.

For symbols closer to the end of the alphabet than the length of a key, we would just continue counting from the beginning of the alphabet.

Such example is a symbol “F” that reaches the end of the alphabet after three skips: “F”, “T”, “I”, and continues symbol skipping for two more symbols from the start of the alphabet: “X”, “R”, and finally lands on the symbol “G”.

We will see how to simplify the skipping process by a calculation in our source code.

Once we have defined and shared the key with our second parties (the recipients), we can start exchanging secret messages.

In the era of Julius Caesar, literacy was not widespread, and ciphertexts were not so easily deciphered.

However, now in the modern era, Caesar’s cipher is no longer considered strong enough. Therefore, we will take a slight detour and have a look at the cipher with a monoalphabetic ordering.

Python Caesar Cipher

Here we’ll take a look at our source code and see how the magic happens. The comments are here to help in understanding particular ideas and choices in each of the algorithm steps.

def caesars_cipher(message, key=3, operation='encrypt'): # Performs an operation, either 'encrypt' or 'decrypt'. if operation.lower() not in ('encrypt', 'decrypt'): return message # Constructs our alphabet of symbols. alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?.' # Sets the encryption/decryption key. key = key % len(alphabet) # Initializes the store for encrypted/decrypted message. translated = '' # Processes each symbol in the message according to the operation and the alphabet. for symbol in message: # Just some housekeeping - the object initialization. shifted_index = -1 # Note: Only symbols in the 'alphabet' can be processed. if symbol in alphabet: symbol_index = alphabet.find(symbol) # Performs the actual operation. if operation == 'encrypt': shifted_index = symbol_index + key elif operation == 'decrypt': shifted_index = symbol_index - key # Handles possible overstepping. if shifted_index >= len(alphabet): shifted_index = shifted_index - len(alphabet) elif shifted_index < 0: shifted_index = shifted_index + len(alphabet) translated = translated + alphabet[shifted_index] else: # Leaves the symbol untouched if it's outside the alphabet: translated = translated + symbol return translated original_message = 'Finxter rules!'
caesars_key = 55 print(f'Original message = {original_message}')
ciphertext = caesars_cipher('Finxter rules!', caesars_key, 'encrypt')
print(f'Ciphertext = {ciphertext}')
plaintext = caesars_cipher(ciphertext, caesars_key, 'decrypt')
print(f'Plaintext = {plaintext}')

The Backstage Math

If we consider an alphabet of aN symbols, the number of ordered alphabets is aN! (! is a factorial operation) and there is aN! possible ciphertexts of the same plaintext.

Here we have to notice that having a key with a monoalphabetic substitution would have no effect. This is because it is always possible to generate an alphabet with an ordering that would exactly match Caesar’s cipher with a key.

In other words, each Caesar’s cipher with a specific key can be generalized by exactly one monoalphabetic substitution.

If we take the regular English alphabet of 26 symbols, the number of possible alphabets with unique orderings would amount to 26! ≈ 4 * 1026 possible ciphertexts (that’s 4 with 26 zeroes!).

Note: If you’re wondering why is this number so large, just consider the following: there are 26 letters in the English alphabet, hence 26 possibilities in picking the first letter. In the next round, for each of these possibilities, there are 25 possibilities in picking the second letter (since the first letter has already been picked). Going all the way, that’s 26 (first pick) * 25 (second pick) * 24 (third pick) * … * 1 (26th – last pick) = 26! ≈ 4 * 1026.

Now we can see that monoalphabetic substitution represents a superset of Caesar’s cipher, and since Caesar’s cipher uses an alphabet with typical alphabetical ordering, it drastically reduces the number of possible ciphertexts to only aN-1, which is, in our case, only 25.

With that in mind, Caesar’s ciphertext can easily be attacked by several approaches, such as a brute-force attack or frequency analysis.

Conclusion

We learned about Caesar’s Cipher, a simple encryption and decryption algorithm, in this article.

  • First, we made a gentle intro to cryptography.
  • Second, we encountered some of the fundamental terms in cryptography.
  • Third, we got acquainted with Caesar’s Cipher.
  • Fourth, we explained how Caesar’s Cipher works.
  • Fifth, we took a glance at the source code.
  • Sixth, we sneaked in the backstage and saw some traces of math behind the algorithm.

Learn More: ROT13 in Python

ROT13 is a simple encryption method. It shifts each character of the clear text string 13 positions forward in the alphabet.

ROT13 Explanation Gif

This Python one-liner does ROT13 encryption for you:

cleartxt = "berlin"
abc = "abcdefghijklmnopqrstuvwxyz"
secret = "".join([abc[(abc.find(c)+13)%26] for c in cleartxt])
print(secret)
# oreyva

You can learn more in our full article here:

The article also comes with a video explanation of the one-liner—check it out!


Posted on Leave a comment

How to Count Vowels in a String

Rate this post

Problem Formulation and Solution Overview

In this article, you’ll learn how to count the number of vowels in a string.

To make it more fun, we have the following running scenario:

In Canada, we have a province called Saskatchewan. This province has a large amount of flat land. In this article, we reference their local saying.

💬 Question: How would we write Python code to count the vowels in a String?

We can accomplish this task by one of the following options:


Add the following code to the top of each code snippet. This snippet will allow the code in this article to run error-free.

import re
from collections import Counter

Method 1: Use Regex and Dictionary Comprehension

This example uses Regex and Dictionary Comprehension as a one-liner to tally the number of specified vowels in a string. The results return in a Dictionary format.

saying = 'Saskatchewan! Where you can watch your dog run away for 3 days.'
vcount = {x: len(re.findall(f"{x}", saying.lower())) for x in 'aeiou'}
print(vcount)

⭐A Finxter Favorite!

This code declares the string saying. Then, Dictionary Comprehension converts the string to lowercase and re.findall() searches for and tallies each specified vowel.

The results save to vcount and are output to the terminal.

Output

{'a': 8, 'e': 3, 'i': 0, 'o': 4, 'u': 3}

Method 2: Use List Comprehension and count()

This example uses List Comprehension to tally the number of specified vowels in a string. The results return in a List format.

saying = 'Saskatchewan! Where you can watch your dog run away for 3 days.'
vcount = [saying.lower().count(x) for x in 'aeiou']
print(vcount)

This code declares the string saying. Then, List Comprehension converts the string to lowercase and searches for and tallies each specified vowel.

The results save to variable vcount and are output to the terminal.

Output

[8, 3, 0, 4, 3]

💡Note: This output displays the totals but not their associated vowel.


Method 3: Use Counter() and count.update()

This example calls the Collections library and uses Counter() to count the number of specified vowels in a string.

saying = 'Saskatchewan! Where you can watch your dog run away for 3 days.'
count = Counter() for i in saying: if i in 'aeiou': count.update(i.lower()) print(dict(count))

This code declares the string saying and initiates the Counter() object, count.

A for loop instantiates and traverses through each character converting to lowercase, searching for and tallies each specified vowel.

The results save to count and are output to the terminal.

If this code was output to the terminal using print(count), the output would be as follows:

Output using print(count)

Counter({'a': 8, 'o': 4, 'e': 3, 'u': 3})

Placing count inside dict() removes the word Counter and surrounding braces ().

Output using print(dict(count))

{'a': 8, 'e': 3, 'i': 0, 'o': 4, 'u': 3}

💡Note: This method produces the same output as Method 1 but with four (4) additional lines of code.


Method 4: Use For and count()

This example uses a for loop and string.count() to tally the number of specified vowels in a string. The results return as a string.

saying = 'Saskatchewan! Where you can watch your dog run away for 3 days.'
tmp = ''
for i in 'aeiou': tmp += i + ':' + str(saying.count(i)) + ' '
print(tmp)

This code declares the string saying and initiates a variable tmp.

A for loop instantiates and traverses through each character, searching for and tallying each specified vowel. The results convert to a string, save to tmp, and are output to the terminal.

Output

a:8 e:3 i:0 o:4 u:3

Method 5: Use map() and count()

This example uses map() and count() to tally the number of specified vowels in a string.

saying = 'Saskatchewan! Where you can watch your dog run away for 3 days.'
print(*map(saying.lower().count, 'aeiou'))

This code declares the string, saying converts the string to lowercase, and tallies the specified vowel. The results are output to the terminal.

Output

8 3 0 4 3

Summary

In this case, lower() was not required as you could see no vowels were in uppercase. However, you may not always know what a string will contain. In this case, best to convert to either lowercase or uppercase.

These five (5) methods of counting vowels in a string should give you enough information to select the best one for your coding requirements.

Good Luck & Happy Coding!


Posted on Leave a comment

Android App Developer — Income and Opportunity

5/5 – (2 votes)
Person with smartphone

Before we learn about the money, let’s get this question out of the way:

What Does an Android App Developer Do?

An Android app developer is a programmer who focuses on software creation for mobile devices such as smartphones or wearables using the Android operating system.

Feel free to check out our other articles on the Finxter blog that concern app development.

Related Articles:

Android App Developer Stats

For your motivation, I’ve compiled some interesting stats and facts about mobile app development:

  • The revenue of the mobile app market worldwide is mobile app revenue in 2022 is $437 billion USD. (Statista)
  • The number of Android mobile app developers in the world is 5.9 million. (EvansData)
  • The number of iOS mobile app developers in the world is 2.8 million. (EvansData)
  • The average revenue per mobile app developer worldwide is $50,229 USD/year. (Finxter)
  • The average annual income of a mobile app developer in the US is $101,000 USD. (Finxter)
  • The average annual income of a mobile app developer in India is ₹5,17,819. (Glassdoor)

So, are you motivated? Great, let’s have a look on the skills you need next!

What Skills Do Android App Developers Need?

As an Android app developer, your skill set varies depending on the concrete set of applications you’re working on. However, these skills will proof useful no matter what, and most successful Android app developers have these seven skills:

  1. General programming skills (e.g., Java, C++, Python)
  2. Specific app framework skills (e.g., Flutter)
  3. Distributed systems skills
  4. Web development skills (e.g., HTML, CSS, JavaScript)
  5. Design skills (e.g., Photoshop)
  6. Security skills (e.g., SSL encryption)
  7. Soft skills (e.g., communication, presentation, marketing)

Of course, these are only the top seven most important skills from my point of view.

Android App Developer vs Desktop Developer

What’s the difference between an Android app developer and a desktop developer?

  • An Android app developer creates mobile applications for the Android operating system that runs on smartphones and wearables.
  • A desktop developer creates applications for desktop-based operating systems like macOS, Windows, and Linux.

Unlike desktop developers, Android app developers tend to focus more on utilizing native sensors such as NFC and GPS for location-based applications, as well as more natural human-computer interaction means such as speech and touch.

Both may use the same programming languages, such as Java, and similar IDEs, such as Eclipse.

Of course, there’s a two-way exchange of ideas and technologies because more and more desktop developers integrate ubiquitous computing technologies in their applications. And app developers use traditional “desktop” means of user interfaces such as virtual keyboards.

Now that you know about what Android development is let’s have a look at what it earns next!

Annual Income

How much does an Android App Developer make per year?

Figure: Average Income of an Android App Developer in the US by Source. [1]

The average annual income of an Android App Developer in the United States is between $85,000 and $126,577 with an average of $106,923 and a statistical median of $107,343 per year.

This data is based on our meta-study of nine (9) salary aggregators sources such as Glassdoor, ZipRecruiter, and PayScale.

Source Average Income
Glassdoor.com $98,896
ZipRecruiter.com $112,647
Zippia.com $100,134
Indeed.com $126,577
Talent.com $121,875
Salary.com $96,841
BusinessOfApps.com $113,000
BuiltIn.com $107,343
Comparably.com $85,000
Table: Average Income of an Android App Developer in the US by Source.

For comparison, you can have a look at the average income of a desktop developer in the following graphic:

Average Income of a Desktop Developer in the US by Source

Mobile app developers make more than Desktop developers on average. Not a very surprising finding! 🙂

Let’s have a look at the hourly rate of an Android App Developers next!

Hourly Rate

Android App Developers are well-paid on freelancing platforms such as Upwork or Fiverr.

If you decide to go the route as a freelance Mobile App Developer, you can expect to make between $30 and $60 per hour on Upwork (source). Assuming an annual workload of 2000 hours, you can expect to make between $60,000 and $120,000 per year.

⚡ Note: Do you want to create your own thriving coding business online? Feel free to check out our freelance developer course — the world’s #1 best-selling freelance developer course that specifically shows you how to succeed on Upwork and Fiverr!

Industry Demand

But is there enough demand? Let’s have a look at Google trends to find out how interest evolves over time (source):

Looks like the interest is declining over time. But don’t let this fool you—this makes an excellent opportunity for you as a freelance developer because people are searching for “Android app developers for Hire” like never before:

While the interest in Android app development stays constant, the demand for Android app developers is growing. This means that the gap in the market place increases and you can expect hourly rates to increase in the years to come!

If demand for a scarce resource outstrips the supply growth, prices rise. Your prices. Your income. 😉

You can see that many freelancers now start creating apps for clients rather than creating apps for themselves—it’s just the more attractive market opportunity:

Learning Path, Skills, and Education Requirements

Do you want to become a Mobile App Developer? Here’s a step-by-step learning path I’d propose to get started with Mobile App :

Here’s a great start: watch this whole tutorial, and you’re good to go to create your first app quickly!

You can find many additional computer science courses on the Finxter Computer Science Academy (flatrate model).

But don’t wait too long to acquire practical experience!

Even if you have little skills, it’s best to get started as a freelance developer and learn as you work on real projects for clients — earning income as you learn and gaining motivation through real-world feedback.

🚀 Tip: An excellent start to turbo-charge your freelancing career (earning more in less time) is our Finxter Freelancer Course. The goal of the course is to pay for itself!

You can find more job descriptions for coders, programmers, and computer scientists in our detailed overview guide:

The following statistic shows the self-reported income from 9,649 US-based professional developers (source).

💡 The average annual income of professional developers in the US is between $70,000 and $177,500 for various programming languages.

Question: What is your current total compensation (salary, bonuses, and perks, before taxes and deductions)? Please enter a whole number in the box below, without any punctuation. If you are paid hourly, please estimate an equivalent weekly, monthly, or yearly salary. (source)

The following statistic compares the self-reported income from 46,693 professional programmers as conducted by StackOverflow.

💡 The average annual income of professional developers worldwide (US and non-US) is between $33,000 and $95,000 for various programming languages.

Here’s a screenshot of a more detailed overview of each programming language considered in the report:

Here’s what different database professionals earn:

Here’s an overview of different cloud solutions experts:

Here’s what professionals in web frameworks earn:

There are many other interesting frameworks—that pay well!

Look at those tools:

Okay, but what do you need to do to get there? What are the skill requirements and qualifications to make you become a professional developer in the area you desire?

Let’s find out next!

General Qualifications of Professionals

StackOverflow performs an annual survey asking professionals, coders, developers, researchers, and engineers various questions about their background and job satisfaction on their website.

Interestingly, when aggregating the data of the developers’ educational background, a good three quarters have an academic background.

Here’s the question asked by StackOverflow (source):

Which of the following best describes the highest level of formal education that you’ve completed?

However, if you don’t have a formal degree, don’t fear! Many of the respondents with degrees don’t have a degree in their field—so it may not be of much value for their coding careers anyways.

Also, about one out of four don’t have a formal degree and still succeeds in their field! You certainly don’t need a degree if you’re committed to your own success!

Freelancing vs Employment Status

The percentage of freelance developers increases steadily. The fraction of freelance developers has already reached 11.21%!

This indicates that more and more work will be done in a more flexible work environment—and fewer and fewer companies and clients want to hire inflexible talent.

Here are the stats from the StackOverflow developer survey (source):

Do you want to become a professional freelance developer and earn some money on the side or as your primary source of income?

Resource: Check out our freelance developer course—it’s the best freelance developer course in the world with the highest student success rate in the industry!

Other Programming Languages Used by Professional Developers

The StackOverflow developer survey collected 58000 responses about the following question (source):

Which programming, scripting, and markup languages have you done extensive development work in over the past year, and which do you want to work in over the next year?

These are the languages you want to focus on when starting out as a coder:

And don’t worry—if you feel stuck or struggle with a nasty bug. We all go through it. Here’s what SO survey respondents and professional developers do when they’re stuck:

What do you do when you get stuck on a problem? Select all that apply. (source)

To get started with some of the fundamentals and industry concepts, feel free to check out these articles:

Where to Go From Here?

Enough theory. Let’s get some practice!

Coders get paid six figures and more because they can solve problems more effectively using machine intelligence and automation.

To become more successful in coding, solve more real problems for real people. That’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

You build high-value coding skills by working on practical coding projects!

Do you want to stop learning with toy projects and focus on practical code projects that earn you money and solve real problems for people?

🚀 If your answer is YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

If you just want to learn about the freelancing opportunity, feel free to watch my free webinar “How to Build Your High-Income Skill Python” and learn how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

Reference

[1] The figure was generated using the following code snippet:

import matplotlib.pyplot as plt
import numpy as np
import math data = [98896, 112647, 100134, 126577, 121875, 96841, 113000, 107343, 85000] labels = ['Glassdoor.com', 'ZipRecruiter.com', 'Zippia.com', 'Indeed.com', 'Talent.com', 'Salary.com', 'BusinessOfApps.com', 'BuiltIn.com', 'Comparably.com'] median = np.median(data)
average = np.average(data)
print(median, average)
n = len(data) plt.plot(range(n), [median] * n, color='black', label='Median: $' + str(int(median)))
plt.plot(range(n), [average] * n, '--', color='red', label='Average: $' + str(int(average)))
plt.bar(range(len(data)), data)
plt.xticks(range(len(data)), labels, rotation='vertical', position = (0,0.45), color='white', weight='bold')
plt.ylabel('Average Income ($)')
plt.title('Android App Developer Annual Income - by Finxter')
plt.legend()
plt.show()
Posted on Leave a comment

iOS App Developer — Income and Opportunity

5/5 – (2 votes)

Before we learn about the money, let’s get this question out of the way:

What Does an iOS App Developer Do?

An iOS app developer is a programmer who focuses on software creation for Apple mobile devices such as iPhones or wearables such as Apple Watches. Most mobile app developers create smartphone apps for the iOS or watchOS mobile operating systems using the Swift programming language.

Learn More:

iOS App Developer Stats

For your motivation, I’ve compiled some interesting stats and facts about mobile app development:

  • The revenue of the mobile app market worldwide is mobile app revenue in 2022 is $437 billion USD. (Statista)
  • The number of iOS mobile app developers in the world is 2.8 million. (EvansData)
  • For comparison, the number of Android mobile app developers in the world is 5.9 million. (EvansData)
  • The average revenue per mobile app developer worldwide is $50,229 USD/year. (Finxter)
  • The average annual income of a mobile app developer in the US is $101,000 USD. (Finxter)
  • The average annual income of a mobile app developer in India is ₹5,17,819. (Glassdoor)

So, are you motivated? Great, let’s have a look on the skills you need next!

What Skills Does an iOS App Developer Need?

As an iOS app developer, your skillset varies depending on the concrete set of applications you’re working on. However, these skills will proof useful no matter what, and most successful mobile iOS app developers have these seven skills:

  1. General programming skills (e.g., Swift)
  2. Specific app framework skills (e.g., Flutter)
  3. Distributed systems skills
  4. Web development skills (e.g., HTML, CSS, JavaScript)
  5. Design skills (e.g., Photoshop)
  6. Security skills (e.g., SSL encryption)
  7. Soft skills (e.g., communication, presentation, marketing)

Of course, these are only the top seven most important skills from my point of view.

Mobile (iOS) App Developer vs Desktop (macOS) Developer

What’s the difference between a mobile iOS app developer and a desktop developer focusing on macOS?

  • An iOS developer creates applications for mobile operating systems iOS and watchOS.
  • A desktop developer creates applications for desktop-based operating systems like macOS.

Unlike desktop developers, mobile iOS app developers tend to focus more on utilizing native sensors such as NFC and GPS for location-based applications and more natural human-computer interaction means such as speech and touch.

Of course, there’s a two-way exchange of ideas and technologies because more and more desktop developers integrate ubiquitous computing technologies in their applications. And app developers use traditional “desktop” means of user interfaces such as virtual keyboards.

Now that you know about what it is, let’s have a look at what it earns next!

Annual Income

How much does an iOS App Developer make per year?

iOS developer income by source (United States)
Figure: Average Income of an iOS Developer in the US by Source. [1]

Compare the significant income of an iOS developer with the income of a general app developer. iOS developer make $10,000 more than general mobile app developers, on average:

Average Income of a Mobile App Developer in the US by Source
Figure: Average Income of a Mobile App Developer in the US by Source.

The average annual income of an iOS Developer in the United States is between $83,351 and $145,000 with an average of $110,331 and a statistical median of $111,716 per year.

This data is based on our meta-study of six (6) salary aggregators sources such as Glassdoor, ZipRecruiter, and PayScale.

Source Average Income
Glassdoor.com $98,986
ZipRecruiter.com $108,906
Zippia.com $100,289
Indeed.com $128,480
PayScale.com $91,749
Talent.com $145,000
Salary.com $83,351
NixUnited.com $114,614
BuiltIn.com $116,145
Comparably.com $115,794
Table: Average Income of an IOS Developer in the US by Source.

Let’s have a look at the hourly rate of Mobile App Developers next!

Hourly Rate

iOS Developers are well-paid on freelancing platforms such as Upwork or Fiverr.

If you decide to go the route as a freelance Mobile App Developer, you can expect to make between $40 and $120 per hour on Upwork (source). Assuming an annual workload of 2000 hours, you can expect to make between $80,000 and $240,000 per year.

⚡ Note: Do you want to create your own thriving coding business online? Feel free to check out our freelance developer course — the world’s #1 best-selling freelance developer course that specifically shows you how to succeed on Upwork and Fiverr!

Industry Demand

But is there enough demand? Let’s have a look at Google trends to find out how interest evolves over time (source):

Looks like the interest in becoming an iOS and watchOS developer slightly decreased over the last couple of years.

But don’t let this fool you—this makes an excellent opportunity for you as a freelance developer because people are searching for hiring iOS app developers like never before:

While the interest in iPhone app development stays constant, the demand for Apple mobile developers is growing continuously. This means that the gap in the market place increases, and you can expect hourly rates to increase in the years to come!

If demand for a scarce resource outstrips the supply growth, prices rise. Your prices. Your income. 😉

You can see that many freelancers now start creating apps for clients rather than creating apps for themselves—it’s just the more attractive market opportunity:

Learning Path, Skills, and Education Requirements

Do you want to become a Mobile App Developer? Here’s a step-by-step learning path I’d propose to get started with Mobile App :

The following video exemplifies one of the skills, Flutter, so you can get a quick glimpse into the development process with an app framework:

You can find many additional computer science courses on the Finxter Computer Science Academy (flatrate model).

But don’t wait too long to acquire practical experience!

Even if you have little skills, it’s best to get started as a freelance developer and learn as you work on real projects for clients — earning income as you learn and gaining motivation through real-world feedback.

🚀 Tip: An excellent start to turbo-charge your freelancing career (earning more in less time) is our Finxter Freelancer Course. The goal of the course is to pay for itself!

You can find more job descriptions for coders, programmers, and computer scientists in our detailed overview guide:

The following statistic shows the self-reported income from 9,649 US-based professional developers (source).

💡 The average annual income of professional developers in the US is between $70,000 and $177,500 for various programming languages.

Question: What is your current total compensation (salary, bonuses, and perks, before taxes and deductions)? Please enter a whole number in the box below, without any punctuation. If you are paid hourly, please estimate an equivalent weekly, monthly, or yearly salary. (source)

The following statistic compares the self-reported income from 46,693 professional programmers as conducted by StackOverflow.

💡 The average annual income of professional developers worldwide (US and non-US) is between $33,000 and $95,000 for various programming languages.

Here’s a screenshot of a more detailed overview of each programming language considered in the report:

Here’s what different database professionals earn:

Here’s an overview of different cloud solutions experts:

Here’s what professionals in web frameworks earn:

There are many other interesting frameworks—that pay well!

Look at those tools:

Okay, but what do you need to do to get there? What are the skill requirements and qualifications to make you become a professional developer in the area you desire?

Let’s find out next!

General Qualifications of Professionals

StackOverflow performs an annual survey asking professionals, coders, developers, researchers, and engineers various questions about their background and job satisfaction on their website.

Interestingly, when aggregating the data of the developers’ educational background, a good three quarters have an academic background.

Here’s the question asked by StackOverflow (source):

Which of the following best describes the highest level of formal education that you’ve completed?

However, if you don’t have a formal degree, don’t fear! Many of the respondents with degrees don’t have a degree in their field—so it may not be of much value for their coding careers anyways.

Also, about one out of four don’t have a formal degree and still succeeds in their field! You certainly don’t need a degree if you’re committed to your own success!

Freelancing vs Employment Status

The percentage of freelance developers increases steadily. The fraction of freelance developers has already reached 11.21%!

This indicates that more and more work will be done in a more flexible work environment—and fewer and fewer companies and clients want to hire inflexible talent.

Here are the stats from the StackOverflow developer survey (source):

Do you want to become a professional freelance developer and earn some money on the side or as your primary source of income?

Resource: Check out our freelance developer course—it’s the best freelance developer course in the world with the highest student success rate in the industry!

Other Programming Languages Used by Professional Developers

The StackOverflow developer survey collected 58000 responses about the following question (source):

Which programming, scripting, and markup languages have you done extensive development work in over the past year, and which do you want to work in over the next year?

These are the languages you want to focus on when starting out as a coder:

And don’t worry—if you feel stuck or struggle with a nasty bug. We all go through it. Here’s what SO survey respondents and professional developers do when they’re stuck:

What do you do when you get stuck on a problem? Select all that apply. (source)

To get started with some of the fundamentals and industry concepts, feel free to check out these articles:

Where to Go From Here?

Enough theory. Let’s get some practice!

Coders get paid six figures and more because they can solve problems more effectively using machine intelligence and automation.

To become more successful in coding, solve more real problems for real people. That’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

You build high-value coding skills by working on practical coding projects!

Do you want to stop learning with toy projects and focus on practical code projects that earn you money and solve real problems for people?

🚀 If your answer is YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

If you just want to learn about the freelancing opportunity, feel free to watch my free webinar “How to Build Your High-Income Skill Python” and learn how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

Reference

[1] The figure was generated using the following code snippet:

import matplotlib.pyplot as plt
import numpy as np
import math data = [98986, 108906, 100289, 128480, 91749, 145000, 83351, 114614, 116145, 115794] labels = ['Glassdoor.com', 'ZipRecruiter.com', 'Zippia.com', 'Indeed.com', 'PayScale.com', 'Talent.com', 'Salary.com', 'NixUnited.com', 'BuiltIn.com', 'Comparably.com'] median = np.median(data)
average = np.average(data)
print(median, average)
n = len(data) plt.plot(range(n), [median] * n, color='black', label='Median: $' + str(int(median)))
plt.plot(range(n), [average] * n, '--', color='red', label='Average: $' + str(int(average)))
plt.bar(range(len(data)), data)
plt.xticks(range(len(data)), labels, rotation='vertical', position = (0,0.45), color='white', weight='bold')
plt.ylabel('Average Income ($)')
plt.title('iOS App Developer Annual Income - by Finxter')
plt.legend()
plt.show()
Posted on Leave a comment

How to Read Specific Columns from CSV File in Python

Rate this post
A Quick Glance at The Solutions [Each solution stays for 5-10 secs.]

Problem: Given a CSV file, how to read only specific column(s) from the csv file? (Reading a specific column from a csv file will yield all the row values pertaining to that column.)

Example: Consier the following csv file (countries.csv):

Country,Capital,Population,Area
Germany,Berlin,"84,267,549","348,560"
France,Paris,"65,534,239","547,557"
Spain,Madrid,"46,787,468","498,800"
Italy,Rome,"60,301,346","294,140"
India,Delhi,"1,404,495,187","2,973,190"
USA,Washington,"334,506,463","9,147,420"
China,Beijing,"1,449,357,022","9,388,211"
Poland,Warsaw,"37,771,789","306,230"
Russia,Moscow,"146,047,418","16,376,870"
England,London,"68,529,747","241,930"

Question: How will you read the above csv file and display the following columns

  1. Country column along with the Capital column?
  2. All values in the population column?

Method 1: Using Pandas

Using the Pandas library is probably the best option if you are dealing with csv files. You can easily read a csv file and store an entire column within a variable.

Code:

import pandas as pd df = pd.read_csv("countries.csv")
country = df['Country']
# or
# country = df.Country
capital = df['Capital']
# or
# capital = df.Capital # displaying selected columns (Country and Capital)
for x, y in zip(country, capital): print(f"{x} {y}") # displaying a single column (Country)
print()
print(df['Population'])

Output:

Germany Berlin
France Paris
Spain Madrid
Italy Rome
India Delhi
USA Washington
China Beijing
Poland Warsaw
Russia Moscow
England London 0 84,267,549
1 65,534,239
2 46,787,468
3 60,301,346
4 1,404,495,187
5 334,506,463
6 1,449,357,022
7 37,771,789
8 146,047,418
9 68,529,747
Name: Population, dtype: object

Explanation:

  • Read the csv file using pd.read_csv() Pandas function.
  • Save all the information of the columns Country and Capital within independent variables using
    • country = df['Country']
      • Alternatively, you can also use country = df.Country
    • capital = df['Capital']
      • Alternatively, you can also use capital = df.Capital
  • To display the country names and their capitals simultaneously, you can bind the two columns, country and capital, using the zip() function and then display each country along with its capital using a for loop upon the zipped object.
  • To display all the values in the population column, you can simply use df['Population'].

TRIVIA
zip() is a built-in function in Python that takes an arbitrary number of iterables and binds them into a single iterable, a zip object. It combines the n-th value of each iterable argument into a tuple.
Read more about zip() here.

List-Based Indexing of a DataFrame

In case you are not comfortable with using zip() to display multiple columns at once, you have another option. You can simply use list-based indexing to accomplish your goal.

List-based indexing is a technique that allows you to pass multiple column names as a list within the square-bracket selector.

Example:

import pandas as pd df = pd.read_csv("countries.csv")
print()
print(df[['Country', 'Capital']])

Output:

 Country Capital
0 Germany Berlin
1 France Paris
2 Spain Madrid
3 Italy Rome
4 India Delhi
5 USA Washington
6 China Beijing
7 Poland Warsaw
8 Russia Moscow
9 England London

Method 2: Integer Based Indexing with iloc

Approach: The idea here is to use the df.iloc[rows, columns].values to access individual columns from the DataFrame using indexing. Note that the first column always has the index 0, while the second column has index 1, and so on.

  • rows is used to select individual rows. Use the slicing colon: to ensure all rows have been selected.
  • columns is used to select individual columns.
    • Use country = data.iloc[:, 0].values to save the values of the Country column.
    • capital = data.iloc[:, 1].values to save the values of the Capital column.
    • population = data.iloc[:, 2].values to save the values of the Population column.
import pandas as pd data = pd.read_csv('countries.csv')
country = data.iloc[:, 0].values
capital = data.iloc[:, 1].values
population = data.iloc[:, 2].values
# displaying selected columns
print(data[['Country', 'Capital']])
print()
# displaying a single column (Population)
print(population)

Output:

Country Capital
0 Germany Berlin
1 France Paris
2 Spain Madrid
3 Italy Rome
4 India Delhi
5 USA Washington
6 China Beijing
7 Poland Warsaw
8 Russia Moscow
9 England London ['84,267,549' '65,534,239' '46,787,468' '60,301,346' '1,404,495,187' '334,506,463' '1,449,357,022' '37,771,789' '146,047,418' '68,529,747']

Method 3: Name-Based Indexing with loc()

Instead of selecting the columns by their index, you can also select them by their name using the df.loc[] selecter.

The following example shows how to select the columns Country and Capital from the given DataFrame.

import pandas as pd data = pd.read_csv('countries.csv')
val = data.loc[:, ['Country', 'Capital']]
print(val)

Output:

Country Capital
0 Germany Berlin
1 France Paris
2 Spain Madrid
3 Italy Rome
4 India Delhi
5 USA Washington
6 China Beijing
7 Poland Warsaw
8 Russia Moscow
9 England London

Related Tutorial: Slicing Data from a Pandas DataFrame using .loc and .iloc

Method 4: Using csv Module

csv module is yet another spectacular option in Python that allows you to play with csv files. Let us have a look at the code that helps us to read the given csv file and then read specific columns from it:

import csv population = []
with open('countries.csv', newline='', encoding='utf-8-sig') as csvfile: data = csv.DictReader(csvfile) for r in data: print("Country", ":", "Capital") # append values from population column to population list population.append(r['Population']) # displaying specific columns (Country and Capital) print(r['Country'], ":", r['Capital']) # display the population list print(population)

Output:

Country : Capital
Germany : Berlin
Country : Capital
France : Paris
Country : Capital
Spain : Madrid
Country : Capital
Italy : Rome
Country : Capital
India : Delhi
Country : Capital
USA : Washington
Country : Capital
China : Beijing
Country : Capital
Poland : Warsaw
Country : Capital
Russia : Moscow
Country : Capital
England : London
['84,267,549', '65,534,239', '46,787,468', '60,301,346', '1,404,495,187', '334,506,463', '1,449,357,022', '37,771,789', '146,047,418', '68,529,747']

Explanation:

  • Import the csv module and open up the csv file. Ensure that you feed in the encoding argument as it helps to eliminate any unreadable characters that may occur in the given csv file.
    • with open('countries.csv', newline='', encoding='utf-8-sig') as csvfile
  • Allow Python to read the csv file as a dictionary using csv.Dictreader object.
  • Once the file has been read in the form of a dictionary, you can easily fetch the values from respective columns by using the keys within square bracket notation from the dictionary. Here each column represents the key within the given dictionary.

Bonus: Here’s a quick look at how the DictReader() class looks like:

import csv population = []
with open('countries.csv', newline='', encoding='utf-8-sig') as csvfile: data = csv.DictReader(csvfile) for row in data: print(row)

Output:

{'Country': 'Germany', 'Capital': 'Berlin', 'Population': '84,267,549', 'Area': '348,560'}
{'Country': 'France', 'Capital': 'Paris', 'Population': '65,534,239', 'Area': '547,557'}
{'Country': 'Spain', 'Capital': 'Madrid', 'Population': '46,787,468', 'Area': '498,800'}
{'Country': 'Italy', 'Capital': 'Rome', 'Population': '60,301,346', 'Area': '294,140'}
{'Country': 'India', 'Capital': 'Delhi', 'Population': '1,404,495,187', 'Area': '2,973,190'}
{'Country': 'USA', 'Capital': 'Washington', 'Population': '334,506,463', 'Area': '9,147,420'}
{'Country': 'China', 'Capital': 'Beijing', 'Population': '1,449,357,022', 'Area': '9,388,211'}
{'Country': 'Poland', 'Capital': 'Warsaw', 'Population': '37,771,789', 'Area': '306,230'}
{'Country': 'Russia', 'Capital': 'Moscow', 'Population': '146,047,418', 'Area': '16,376,870'}
{'Country': 'England', 'Capital': 'London', 'Population': '68,529,747', 'Area': '241,930'}

It is evident from the output that csv.DictReader() returns a dictionary for each row such that the column header is the key while the value in the row is the associated value in the dictionary.

Conclusion

To sum things up, there are majorly four different ways of accessing specific columns from a given csv file:

  • List-Based Indexing.
  • Integer-Based Indexing.
  • Name-Based Indexing.
  • Using csv modules DictReader class.

Feel free to use the one that suits you best. I hope this tutorial helped you. Please subscribe and stay tuned for more interesting tutorials. Happy learning!


Learn Pandas the Fun Way by Solving Code Puzzles

If you want to boost your Pandas skills, consider checking out my puzzle-based learning book Coffee Break Pandas (Amazon Link).

Coffee Break Pandas Book

It contains 74 hand-crafted Pandas puzzles including explanations. By solving each puzzle, you’ll get a score representing your skill level in Pandas. Can you become a Pandas Grandmaster?

Coffee Break Pandas offers a fun-based approach to data science mastery—and a truly gamified learning experience.

Posted on Leave a comment

Computer Science Researcher – Income & Opportunity

5/5 – (2 votes)

Before we learn about the money, let’s get this question out of the way:

What Does a Computer Science Research Scientist Do?

A computer science researcher and scientist identifies and answers open research questions in computer science. They apply scientific reasoning and research techniques to push the state-of-the-art forward in various fields such as machine learning, distributed systems, databases, algorithms, and data science.

These are some of the fields that are relevant for you as a computer science researcher:

Six of the most common daily activities of computer science researchers are:

  • reading research papers,
  • thinking about research questions and problems,
  • identifying research gaps and discussing them with their peers,
  • creating code and software systems for evaluation purposes,
  • writing research papers, and
  • presenting those scientific results at conferences and in journals.

How to Become a Computer Science Researcher?

The following section is based on my own experience and communications with hundreds of computer science researchers at various international conferences and various stages in their careers—from first year PhD students to prestigious computer science professors. My field of study is distributed systems.

A CS research scientist holds an advanced academic degree that’s formally required to work for a research institution such as a University. Thus, you should complete both the bachelor of science (BSc) and the master of science (MSc) in computer science or a related field to become a computer science researcher.

While the previous two steps, i.e., obtaining the BSc and MSc degrees, will be crucial on your path towards a computer science researcher, the following steps are a bit less strict.

First, it doesn’t harm to have good grades in your BSc and MSc degrees. However, you don’t need to have excellent grades for many reasons:

  • Income Potential in the Real World: Due to the high income potential of computer scientists — for example, as freelancers or highly-paid employees in Big Tech corporations — obtaining a research position in computer science is not as competitive as in other fields. When working as a PhD researcher myself a couple of years ago, I have seen many computer science researchers with average grades.
  • Variance of Quality Requirements in Universities: There are many top-notch Universities for computer science research such as Stanford or MIT with strong brands and outstanding researchers. It is very tough and potentially expensive to enter those Universities — even as a student. However, there are many 2nd and 3rd tier Universities that have much more demand for computer science researchers than supply. Getting a research position in a 2nd tier University may be as simple as applying for it after your successful completion of MSc in a computer science related field.
  • MSc Grades may not be available yet. When applying for a CS researching position, you often do so as a master of science student. This means that you don’t even know your final grade for the MSc degree which makes this grade irrelevant for your application as a CS researcher. Even if the grade may be available in your particular case, it is not for many other researchers so it’s not a must-have generally.

Second, any academic project (e.g., a published research paper) or even a writing project (e.g., having written a couple of online articles as a freelancer) can help you land the research position you desire. But again, that’s not a requirement and it will only increase your odds — all things being equal.

You can find many computer science courses on the Finxter Computer Science Academy (flatrate model).

But don’t wait too long to acquire practical experience!

Even if you have little skills, it’s best to get started as a freelance developer and learn as you work on real projects for clients — earning income as you learn and gaining motivation through real-world feedback.

🚀 Tip: An excellent start to turbo-charge your freelancing career (earning more in less time) is our Finxter Freelancer Course. The goal of the course is to pay for itself!

Let’s have a look at the income potential of a computer science researcher next.

Annual Income

How much does a Computer Science Researcher make per year?

The median annual income (=50th percentile) of a computer science researcher was $131,490 in May 2021. The bottom 10% (=10th percentile) of computer science researchers earned less than $74,210 and the top 10% (=90th percentile) earned more than $208,000.

Source: Bureau of Labor Statistics

The source also lists the income for different industries as a computer science researcher:

Computer Science Researcher Industry Annual Income
Private computer systems design and related services $161,870
Corporate software publishers and software houses $152,940
Research and development (R&D) in physical sciences, engineering, and life sciences $132,810
Federal government $112,310
Public and private universities, colleges, and professional schools $79,510
Table: Income of computer science researchers by industry.

Learnings: You make the least amount of money when working as a researcher at University—even though it can open the door to lucrative six-figure opportunities in the private sector (e.g., working in the R&D team for BigTech corporations such as Google, Facebook, and Netflix).

Let’s have a look at the hourly rate of Computer Science Researchers next!

Hourly Rate

Computer Science Researchers are well-paid on freelancing platforms such as Upwork or Fiverr.

If you decide to go the route as a freelance Computer Science Researcher, you can expect to make between $30 and $150 per hour on Upwork (source). Assuming an annual workload of 2000 hours, you can expect to make between $60,000 and $300,000 per year.

This data is consistent with the official Bureau of Labor statistics that lists the median pay of a computer science researcher at $63 per hour (annualized income of $126,000).

⚡ Note: Do you want to create your own thriving coding business online? Feel free to check out our freelance developer course — the world’s #1 best-selling freelance developer course that specifically shows you how to succeed on Upwork and Fiverr!

Industry Demand

But is there enough demand? Let’s have a look at Google trends to find out how interest evolves over time (source):

After an initial peak in 2004, the search trend has remain stable over the last two decades.

You can find more job descriptions for coders, programmers, and computer scientists in our detailed overview guide:

The following statistic shows the self-reported income from 9,649 US-based professional developers (source).

💡 The average annual income of professional developers in the US is between $70,000 and $177,500 for various programming languages.

Question: What is your current total compensation (salary, bonuses, and perks, before taxes and deductions)? Please enter a whole number in the box below, without any punctuation. If you are paid hourly, please estimate an equivalent weekly, monthly, or yearly salary. (source)

The following statistic compares the self-reported income from 46,693 professional programmers as conducted by StackOverflow.

💡 The average annual income of professional developers worldwide (US and non-US) is between $33,000 and $95,000 for various programming languages.

Here’s a screenshot of a more detailed overview of each programming language considered in the report:

Here’s what different database professionals earn:

Here’s an overview of different cloud solutions experts:

Here’s what professionals in web frameworks earn:

There are many other interesting frameworks—that pay well!

Look at those tools:

Okay, but what do you need to do to get there? What are the skill requirements and qualifications to make you become a professional developer in the area you desire?

Let’s find out next!

General Qualifications of Professionals

StackOverflow performs an annual survey asking professionals, coders, developers, researchers, and engineers various questions about their background and job satisfaction on their website.

Interestingly, when aggregating the data of the developers’ educational background, a good three quarters have an academic background.

Here’s the question asked by StackOverflow (source):

Which of the following best describes the highest level of formal education that you’ve completed?

However, if you don’t have a formal degree, don’t fear! Many of the respondents with degrees don’t have a degree in their field—so it may not be of much value for their coding careers anyways.

Also, about one out of four don’t have a formal degree and still succeeds in their field! You certainly don’t need a degree if you’re committed to your own success!

Freelancing vs Employment Status

The percentage of freelance developers increases steadily. The fraction of freelance developers has already reached 11.21%!

This indicates that more and more work will be done in a more flexible work environment—and fewer and fewer companies and clients want to hire inflexible talent.

Here are the stats from the StackOverflow developer survey (source):

Do you want to become a professional freelance developer and earn some money on the side or as your primary source of income?

Resource: Check out our freelance developer course—it’s the best freelance developer course in the world with the highest student success rate in the industry!

Other Programming Languages Used by Professional Developers

The StackOverflow developer survey collected 58000 responses about the following question (source):

Which programming, scripting, and markup languages have you done extensive development work in over the past year, and which do you want to work in over the next year?

These are the languages you want to focus on when starting out as a coder:

And don’t worry—if you feel stuck or struggle with a nasty bug. We all go through it. Here’s what SO survey respondents and professional developers do when they’re stuck:

What do you do when you get stuck on a problem? Select all that apply. (source)

To get started with some of the fundamentals and industry concepts, feel free to check out these articles:

Where to Go From Here?

Enough theory. Let’s get some practice!

Coders get paid six figures and more because they can solve problems more effectively using machine intelligence and automation.

To become more successful in coding, solve more real problems for real people. That’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

You build high-value coding skills by working on practical coding projects!

Do you want to stop learning with toy projects and focus on practical code projects that earn you money and solve real problems for people?

🚀 If your answer is YES!, consider becoming a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

If you just want to learn about the freelancing opportunity, feel free to watch my free webinar “How to Build Your High-Income Skill Python” and learn how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

Resources

Posted on Leave a comment

Pandas DataFrame Methods [Cheat Sheet]

Rate this post

The following table provides you with an overview of Pandas DataFrame methods — and where you can learn more about the specific method.

ALL LINKS OPEN IN A NEW TAB!

abs()
all()
any()
clip() https://blog.finxter.com/pandas-dataframe-clip-method/
corr() https://blog.finxter.com/pandas-dataframe-corr-method/
corrwith() https://blog.finxter.com/a-simple-recommendation-system-with-pandas/
count() https://blog.finxter.com/pandas-dataframe-count-method/
cov() https://blog.finxter.com/pandas-dataframe-cov-method/
cummax() https://blog.finxter.com/pandas-dataframe-cummax-method/
cummin() https://blog.finxter.com/pandas-dataframe-cummin-method/
cumprod() https://blog.finxter.com/pandas-dataframe-cumprod-method/
cumsum() https://blog.finxter.com/pandas-dataframe-cumsum-method/
describe() https://blog.finxter.com/pandas-dataframe-describe-method/
diff() https://blog.finxter.com/pandas-dataframe-diff-method/
eval() https://blog.finxter.com/pandas-dataframe-eval-method/
kurtosis() https://blog.finxter.com/pandas-dataframe-kurtosis-method/
mad() https://blog.finxter.com/pandas-dataframe-mad-method/
min() https://blog.finxter.com/pandas-dataframe-min-method/
max() https://blog.finxter.com/pandas-dataframe-max-method/
mean() https://blog.finxter.com/pandas-dataframe-mean-method/
median() https://blog.finxter.com/pandas-dataframe-median-method/
mode() https://blog.finxter.com/pandas-dataframe-mode-method/
pct_change() https://blog.finxter.com/pandas-dataframe-pct_change-method/
quantile() https://blog.finxter.com/pandas-dataframe-quantile-method/
rank() https://blog.finxter.com/pandas-dataframe-rank-method/
round() https://blog.finxter.com/pandas-dataframe-round-method/
prod() and product() https://blog.finxter.com/pandas-dataframe-prod-and-product-method/
add_prefix() https://blog.finxter.com/pandas-dataframe-add_prefix-method/
add_suffix() https://blog.finxter.com/pandas-dataframe-add_suffix-method/
align() https://blog.finxter.com/pandas-dataframe-align-method/
at_time() https://blog.finxter.com/pandas-dataframe-at_time-method/
between_time() https://blog.finxter.com/pandas-dataframe-between_time-method/
drop() https://blog.finxter.com/pandas-dataframe-drop-method/
drop_duplicates() https://blog.finxter.com/pandas-dataframe-drop_duplicates-method/
duplicated() https://blog.finxter.com/pandas-dataframe-duplicated-method/
equals() https://blog.finxter.com/pandas-dataframe-equals-method/
filter() https://blog.finxter.com/pandas-dataframe-filter-method/
first() https://blog.finxter.com/pandas-dataframe-first-method/
last() https://blog.finxter.com/pandas-dataframe-last-method/
head() and tail() https://blog.finxter.com/pandas-dataframe-head-method/
reset_index() https://blog.finxter.com/pandas-dataframe-reset_index-method/
sample() https://blog.finxter.com/pandas-dataframe-sample-method/
set_axis() https://blog.finxter.com/pandas-dataframe-set_axis-method/
set_index() https://blog.finxter.com/pandas-dataframe-set_index-method/
take() https://blog.finxter.com/pandas-dataframe-take-method/
truncate() https://blog.finxter.com/pandas-dataframe-truncate-method/
backfill() and bfill() https://blog.finxter.com/pandas-dataframe-backfill-and-bfill-method/
fillna() https://blog.finxter.com/pandas-dataframe-fillna-method/
dropna() https://blog.finxter.com/pandas-dataframe-dropna-method/
interpolate() https://blog.finxter.com/pandas-dataframe-interpolate-method/
isna() and isnull() https://blog.finxter.com/pandas-dataframe-isna-and-isnull-method/
notna() and notnull() https://blog.finxter.com/pandas-dataframe-notna-and-notnull-method/
pad() https://blog.finxter.com/pandas-dataframe-pad-method/
replace() https://blog.finxter.com/pandas-dataframe-replace-method/
drop_level() https://blog.finxter.com/pandas-dataframe-drop_level-method/
pivot() https://blog.finxter.com/pandas-dataframe-pivot-method/
pivot_table() https://blog.finxter.com/pandas-dataframe-pivot_table-method/
reorder_levels() https://blog.finxter.com/pandas-dataframe-reorder_levels-method/
sort_values() https://blog.finxter.com/pandas-dataframe-sort_values-method/
sort_index() https://blog.finxter.com/pandas-dataframe-sort_index-method/
nlargest() https://blog.finxter.com/pandas-dataframe-nlargest-method/
nsmallest() https://blog.finxter.com/pandas-dataframe-nsmallest-method/
swap_level() https://blog.finxter.com/pandas-dataframe-swap_level-method/
stack() https://blog.finxter.com/pandas-dataframe-stack-method/
unstack() https://blog.finxter.com/pandas-dataframe-unstack-method/
swap_axes() https://blog.finxter.com/pandas-dataframe-swap_axes-method/
melt() https://blog.finxter.com/pandas-dataframe-melt-method/
explode() https://blog.finxter.com/pandas-dataframe-explode-method/
squeeze() https://blog.finxter.com/pandas-dataframe-squeeze-method/
to_xarray() https://blog.finxter.com/pandas-dataframe-to_xarray-method/
t() and transpose() https://blog.finxter.com/pandas-dataframe-t-and-transpose-method/
append() https://blog.finxter.com/pandas-dataframe-append-method/
assign() https://blog.finxter.com/pandas-dataframe-assign-method/
compare() https://blog.finxter.com/pandas-dataframe-compare-method/
join() https://blog.finxter.com/pandas-dataframe-join-method/
merge() https://blog.finxter.com/pandas-dataframe-merge-method/
update() https://blog.finxter.com/pandas-dataframe-update-method/
asfreq() https://blog.finxter.com/pandas-dataframe-asfreq-method/
asof() https://blog.finxter.com/pandas-dataframe-asof-method/
shift() https://blog.finxter.com/pandas-dataframe-shift-method/
slice_shift() and tshift() https://blog.finxter.com/pandas-dataframe-slice_shift-and-tshift-method/
first_valid_index() https://blog.finxter.com/pandas-dataframe-first_valid_index-method/
last_valid_index() https://blog.finxter.com/pandas-dataframe-last_valid_index-method/
resample() https://blog.finxter.com/pandas-dataframe-resample-method/
to_period() https://blog.finxter.com/pandas-dataframe-to_period-method/
to_timestamp() https://blog.finxter.com/pandas-dataframe-to_timestamp-method/
tz_localize() https://blog.finxter.com/pandas-dataframe-tz_localize-method/
tz_convert() https://blog.finxter.com/pandas-dataframe-tz_convert-method/
plot() https://blog.finxter.com/pandas-dataframe-plot-method/
plot.area() https://blog.finxter.com/pandas-dataframe-plot-area-method/
plot.bar() https://blog.finxter.com/pandas-dataframe-plot-bar-method/
plot.barh() https://blog.finxter.com/pandas-dataframe-plot-barh-method/
plot.box() https://blog.finxter.com/pandas-dataframe-plot-box-method/
plot.density() https://blog.finxter.com/pandas-dataframe-plot-density-method/
plot.hexbin() https://blog.finxter.com/pandas-dataframe-plot-hexbin-method/
plot.hist() https://blog.finxter.com/pandas-dataframe-plot-hist-method/
plot.pie() https://blog.finxter.com/pandas-dataframe-plot-pie-method/
from_dict() https://blog.finxter.com/pandas-dataframe-from_dict-method/
to_dict() https://blog.finxter.com/pandas-dataframe-to_dict-method/
from_records() https://blog.finxter.com/pandas-dataframe-from_records-method/
to_records() https://blog.finxter.com/pandas-dataframe-to_records-method/
to_json() https://blog.finxter.com/pandas-dataframe-to_json-method/
to_pickles() https://blog.finxter.com/pandas-dataframe-to_pickle-method/
to_clipboard() https://blog.finxter.com/pandas-dataframe-to_clipboard-method/
to_html() https://blog.finxter.com/pandas-dataframe-to_html-method/
to_sql() https://blog.finxter.com/pandas-dataframe-to_sql-method/
to_csv() https://blog.finxter.com/pandas-dataframe-to_csv-method/
to_excel() https://blog.finxter.com/pandas-dataframe-to_excel-method/
to_markdown() https://blog.finxter.com/python-dataframe-to_markdown-method/
to_stata() https://blog.finxter.com/pandas-dataframe-to_stata-method/
to_hdf() https://blog.finxter.com/pandas-dataframe-to_hdf-method/
to_latex() https://blog.finxter.com/pandas-dataframe-to_latex-method/
to_xml() https://blog.finxter.com/pandas-dataframe-to_xml-method/
to_parquet() https://blog.finxter.com/pandas-dataframe-to_parquet-method/
to_feather() https://blog.finxter.com/pandas-dataframe-to_feather-method/
to_string() https://blog.finxter.com/pandas-dataframe-to_string-method/
to_bgq() https://blog.finxter.com/pandas-dataframe-to_gbq-method/
to_coo() https://blog.finxter.com/pandas-dataframe-to_coo-method/
Posted on Leave a comment

How to Check Your Internet Connection in Python?

5/5 – (1 vote)

Problem Formulation and Solution Overview

In this article, you’ll learn how to check an Internet Connection in Python.

Problem: Given a Python program. You want to check if your computer currently has access to the Internet so you can do some follow-up work.

Example:

  • If your computer has access, you want to print "Success".
  • Otherwise, you want to print "Failure".

Specifically, how to implement the function has_connection() in the following sample code snippet?

if check_connection(): print('Success!')
else: print('Failure!')

To make it more fun, we have the following running scenario:

Let’s assume you are a Python Coder working for AllTech. Lately, they have been having issues with their internet connections. You are tasked with writing code to check the connection and return a status/error message.

💬 Question: How would we write Python code to check to see if an internet connection has been established?

We can accomplish this task by one of the following options:


Preparation

Before any data manipulation can occur, one (1) new library will require installation.

  • The Requests library allows access to its many methods and makes data manipulation a breeze!

To install this library, navigate to an IDE terminal. At the command prompt ($), execute the code below. For the terminal used in this example, the command prompt is a dollar sign ($). Your terminal prompt may be different.


$ pip install requests

Hit the <Enter> key on the keyboard to start the installation process.

If the installation was successful, a message displays in the terminal indicating the same.


Feel free to view the PyCharm installation guide for the required library.


Add the following code to the top of each code snippet. This snippet will allow the code in this article to run error-free.

from urllib.request import urlopen as url
import requests
import socket 

Method 1: Use urlopen()

This example uses urlopen() to establish a connection to the URL shown below. In addition, two (2) parameters are passed: a valid URL and a timeout.

try: url('https://finxter.com/', timeout=3) print('Success')
except ConnectionError as e: print(f'Failure - {e}')

This code is wrapped inside a try/except statement. When run, the code drops inside the try statement and checks to see if a connection can be established to the indicated URL. This attempt waits three (3) seconds before timing out.

Depending on the connection status, a message indicating the same is output to the terminal.

Output

Success

Method 2: Use requests.get()

This example requires the use of the requests library and uses requests.get() to establish a connection to the URL shown below. A status code returns indicating Success or Failure.

res = requests.get('https://finxter.com/')
print(res) if (res.status_code): print('Success')
else: print('f'Failure')

This code accepts a URL and attempts to establish a connection to the same. The results of this connection save to res as an object.

<Response [200]>

This object must be referenced as indicated above to retrieve the status code. Then, the appropriate message is output to the terminal depending on this code.

Output

Success

Method 3: Use a Lambda

In the methods above, we used a few lines of code to establish a connection and display the appropriate result. This one-liner accomplishes the same task in one line!

# One-Liner to Check Internet Connection:
print((lambda a: 'Success' if 0 == a.system('ping finxter.com -w 4 > clear') else 'Failure')(__import__('os')))

This code pings the shown URL and, depending on the results, outputs the appropriate message to the terminal. The remarkable thing is how you can import a library on-the-fly!

Output

Success

Method 4: Use socket

This example requires the socket library and creates a function to establish a connection to the URL shown below. A Boolean value returns indicating True/False.

def check_connection(): try: host = socket.gethostbyname('www.google.com') s = socket.create_connection((host, 80), 2) return True except: return False res = check_connection()
print(res)

This code defines a new function, check_connection. Using a try/except statement attempts to connect to the indicated URL. Depending on the result, the function returns either True or False.

Finally, the function is called, the code runs, and the result outputs to the terminal.

Output

True

Summary

These four (4) methods to check the internet connection should give you enough information to select the best one for your coding requirements.

Good Luck & Happy Coding!


Posted on Leave a comment

5 Easy Ways to List Imported Modules in Python

5/5 – (1 vote)

Problem Formulation and Solution Overview

In this article, you’ll learn how to display the imported modules in Python.

As a Python Coder, you will encounter times when you need to view a list of all imported modules possessing a global or local scope. This article answers the question below.

💬 Question: How would we write Python code to display the imported modules?

We can accomplish this task by one of the following options:


Method 1: Use pip freeze

This method displays a list of all imported global module names and versions sorted, by default, in alphabetical order.

pip freeze

Navigate to the terminal window from an IDE and enter the above command. Then, hit the <Enter> key to execute. The output is sent to the terminal.

💡 Note: Your prompt may be different from the example shown above.

Output (snippet)

Your imported global module names and versions may differ from that shown below.

absl-py==1.0.0
anyio==3.5.0
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
arrow==1.2.2
asttokens==2.0.5
astunparse==1.6.3
attrs==18.2.0
Babel==2.10.1
backcall==0.2.0
beautifulsoup4==4.10.0
...
zope.interface==5.4.0]

Method 2: Use List Comprehension

This example uses the sys library with List Comprenehsion to return all imported local module names, by default, in an unsorted list.

import sys
results = [m.__name__ for m in sys.modules.values() if m]
results = sorted(results)
print(results)

This code loops through sys.modules.values() using __name__ (aka a dunder) and determines if the item is a locally scoped module. If so, the module name saves to results.

This code sorts the results variable and saves it back to itself for readability. These results are output to the terminal in list format.

Output (snippet)

Your imported local module names may differ from that shown below.

['main', '_abc', '_codecs', '_collections', '_distutils_hack', '_functools', '_imp', '_operator', '_signal', '_sitebuiltins', '_stat', '_thread', '_warnings', '_weakref', 'abc',...'zope']

Method 3: Use dir()

This example uses the dir() function to return all local module names in a sorted list format.

modules = dir()
print(modules)

The output below confirms this script displays only the names that apply to our local scope.

Output (snippet)

Your imported local module names may differ from that shown below.

['annotations', 'builtins', 'cached', 'doc', 'file', 'loader', 'name', 'package', 'spec']

Method 4: Use inspect.getmember() and a Lambda

This example uses inspect.getmember() and a Lambda to return the imported local modules in a sorted format.

import inspect
import os
m = inspect.getmembers(os)
res = filter(lambda x: inspect.ismodule(x[1]), m) for r in res: print(r)

This code returns the names of the imported local modules and their location on the system as an iterable object. A for the loop is used to iterate through this and output one/line.

Output

('abc', <module 'abc' from 'C:\\mypythoninstall\\lib\\abc.py'>)
('path', <module 'ntpath' from 'C:\\mypythoninstall\\lib\\ntpath.py'>)
('st', <module 'stat' from 'C:\\mypythoninstall\\lib\\stat.py'>)
('sys', <module 'sys' from 'C:\\mypythoninstall\\lib\\sys.py'>)

Bonus: Count Modules

If you want to determine the total number of imported modules, use the dir() and len() functions.

count = dir()
print(len(count))

This code references the imported local modules and uses len() to determine how many are imported. The output is sent to the terminal.

Output

Your count may differ from the output below.

11

Summary

These four (4) methods to list imported modules should give you enough information to select the best one for your coding requirements.

Good Luck & Happy Coding!