Tuesday, October 2, 2018

What's The Best Programming Language to Learn for Software Engineer?

When starting on the path of programming, it’s important you invest your time wisely in choosing to learn something that will both benefit you in the immediate future with visible results on your platform of choice, as well as getting you set up for any future languages. Your choice will depend upon a number of factors, so let’s take a look at their characteristics, ease of learning, and likelihood of earning you a living. I’ll also show you some code to display “hello world”, the first application many people write when learning a new language.
In this first part, we’ll be looking at languages used to program software – as in applications which run on the computer or mobile devices. Next time we’ll look at the increasingly significant area of web-programming languages, used to create dynamic websites and interactive browser-based user interfaces.
There are two previous articles in this series which discuss some fundamentals of any programming languages, so if you’re new to programming then be sure to read those too:
Here is the list of the most profitable programming languages to learn in 2016
Java is a full object-oriented language, strongly typed, with an extensive feature set focused on networking and cross-platform compatibility. Applications written in Java can run on virtually any OS – though the performance won’t be as good as something designed to run natively.
It is the language of choice for most Computer Science courses, and consequently almost everyone has at least a little Java programming experience. Android applications are written in Java too, though you can’t simply run a regular Java app on your Android mobile nor vice-versa.
Likelihood Of Making You Money
If you can make an app worth charging for on the Android marketplace, then the world is yours for the taking. There’s also a lot of enterprise-level Java jobs, but the competition is high and pay low.
Python is a widely used high-level programming language for general-purpose programming, created by Guido van Rossum and first released in 1991. An interpreted language, Python has a design philosophy which emphasizes code readability (notably using whitespace indentation to delimit code blocks rather than curly brackets or keywords), and a syntax which allows programmers to express concepts in fewer lines of code than possible in languages such as C++ or Java.[22][23] The language provides constructs intended to enable writing clear programs on both a small and large scale.[24]
Python features a dynamic type system and automatic memory management and supports multiple programming paradigms, including object-oriented, imperative, functional programming, and procedural styles. It has a large and comprehensive standard library.[25]
Python interpreters are available for many operating systems, allowing Python code to run on a wide variety of systems. CPython, the reference implementation of Python, is open source software[26] and has a community-based development model, as do nearly all of its variant implementations. CPython is managed by the non-profit Python Software Foundation.
. Ruby
Similar to Python, Ruby is simple, readable and for people who don’t have any kind of programming experience. Ruby is a dynamic, object-oriented scripting language that is used in the development of websites and mobile apps. It is the language that powers their framework, Ruby on Rails, which is behind websites such as Twitter, Groupon and GitHub. It is also mostly used for backend development, and popular sites such as Airbnb, Shopify, Bloomberg, Hulu, and Slideshare.
When learning Ruby, you don’t have to learn a billion new commands, like in some other coding languages. Its developer, Yukihiro Matsumoto, has designed it to be easy and practical.
It is easy to learn with a helpful 20 minute quick start guide on the official Ruby website. It is straightforward and easy to read with a large community behind it of programmers willing to answer questions. There are a lot of documentation available as well as great resources that will help you to understand Ruby from the very beginning.
Not to be confused with Java, JavaScript is a primarily client-side scripting language used for front-end development. Java is a programming language while JavaScript is a scripting language. JavaScript is the most commonly used programming language to create cool websites and games for the web. It is dynamic and is flexible to use on object-oriented programming. It derives much of its syntax from The C Language.
It runs on every single platform and is already in your browser for you to start learning, which means you need not install it. If you want to build anything for the web, then JavaScript must be on your list of programs to learn. However, JavaScript is also known to be a difficult language as it is untyped and thus is difficult to debug.
If learning JavaScript sounds fun to you, then JavaScript has some of the best online learning material and it lets you start learning straight away.
Though actually separate languages, they are often grouped together, as C++ is basically an enhanced version of C, adding object oriented features. C++ is the serious programmer’s language of choice, forming the basis of most computer games and most advanced Windows software. It’s high performance, but requires a lot more precision on the programmers part when it comes to memory management and consequently has a steep learning curve. Not recommended for absolute beginners.
Likelihood Of Making You Money
With less competition than Java, C++ programmers will always be in demand and paid well, especially in the games industry.
C#
Pronounced C sharp, this is Microsoft’s clone of Java (though the two have since diverged with more pronounced differences) – a general purpose object-oriented strongly-typed language. Performance is good, though not as fast as C++. Software written in C# requires .Net framework to run and is Windows-only.
Likelihood Of Making You Money
There’s a good number of corporate C# jobs out there for enterprise solutions, but you’re unlikely to make money on a single piece of software unlike mobile development. Still, it’s a fun language and easy to learn for beginners, certainly I’d recommend it if you’d like to focus on Windows only.
You can download Microsoft Visual Studio Express for free, which helps greatly with GUI designing and code completion. You can also use it for Visual Basic and many other Microsoft-branded programming languages.
Visual Basic
Another of Microsoft’s contributions, Visual Basic is an event-driven language focussed on simple GUI-based apps. Event-driven means that the code you write will generally be reacting to what the user does – what happens when they click that button, for example. It’s incredibly easy to learn and get a simple app up and running, but ultimately limited and perhaps not the best for actually learning fundamental programming concepts.
Objective-C / Cocoa
This is the Apple Mac language upon which most OSX and iOS applications are built. Technically, Objective-C is an extended version of C with object-oriented features, much like C++, but is nearly always combined with the Cocoa framework for building graphical user interfaces and higher level features on the Mac platform. You must also be careful with memory management.
The syntax and concepts you need to learn are quite complex compared to a language like Java or C#, but on the other hand, Apple provides a comprehensive free development environment (XCode) and tools which make the process of creating real, useable apps fairly easy. There’s also a wealth of written and video tutorials out there to guide you, so it’s certainly more accessible than C++. It’s basically your only choice for OSX and iOS development, but you’ll be able to write for both the Apple desktop and mobile environment with the one language.
Likelihood Of Making You Money
With a developer account ($99 yearly) and a killer app, you have the potential to make a lot – Apple has paid out $2 billion so far. App Store developers stand a better chance than Android developers for making money with paid apps, while Android developers tend to see more returns on in-app advertising.
That’s all the languages I’m going to cover today, and they form the majority of real-world software development on PCs, Macs and mobile environments. Before I get blasted in the comments, I’ve decided to include Python in the web-based list because that seems to be where it’s used most.
The truth is that once you have the basics down in any language, it’s relatively easy to learn another; just as knowing Chinese kanji makes reading and writing Japanese easier – programming languages often cross over and borrow from each other, sharing the same set of basic characteristics and syntaxes. Stay tuned for the next article in which I’ll look at web-based languages such as Javascript and PHP.

Monday, September 24, 2018

Origin of c programming language


C was originally developed by Dennis Ritchie between 1969 and 1973 at Bell Labs,[6] and used to re-implement the Unix operating system.[7] It has since become one of the most widely used programming languages of all time,[8][9] with C compilers from various vendors available for the majority of existing computer architectures and operating systems. C has been standardized by the American National Standards Institute (ANSI) since 1989 (see ANSI C) and subsequently by the International Organization for Standardization (ISO).

C is an imperative procedural language. It was designed to be compiled using a relatively straightforward compiler, to provide low-level access to memory, to provide language constructs that map efficiently to machine instructions, and to require minimal run-time support. Despite its low-level capabilities, the language was designed to encourage cross-platform programming. A standards-compliant C program that is written with portability in mind can be compiled for a very wide variety of computer platforms and operating systems with few changes to its source code. The language has become available on a very wide range of platforms, from embedded microcontrollers to supercomputers.



Overview 
..Dennis Ritchie (right), the inventor of the C programming language, with Ken Thompson
Like most imperative languages in the ALGOL tradition, C has facilities for structured programming and allows lexical variable scope and recursion, while a static type system prevents many unintended operations. In C, all executable code is contained within subroutines, which are called "functions" (although not in the strict sense of functional programming). Function parameters are always passed by value. Pass-by-reference is simulated in C by explicitly passing pointer values. C program source text is free-format, using the semicolon as a statement terminator and curly braces for grouping blocks of statements.

The C language also exhibits the following characteristics:

There is a small, fixed number of keywords, including a full set of control flow primitives: for, if/else, while, switch, and do/while. User-defined names are not distinguished from keywords by any kind of sigil.
There are a large number of arithmetical and logical operators, such as +, +=, ++, &, ~, etc.
More than one assignment may be performed in a single statement.
Function return values can be ignored when not needed.
Typing is static, but weakly enforced: all data has a type, but implicit conversions may be performed.
Declaration syntax mimics usage context. C has no "define" keyword; instead, a statement beginning with the name of a type is taken as a declaration. There is no "function" keyword; instead, a function is indicated by the parentheses of an argument list.
User-defined (typedef) and compound types are possible.
Heterogeneous aggregate data types (struct) allow related data elements to be accessed and assigned as a unit.
Union is a structure with overlapping members; only the last member stored is valid.
Array indexing is a secondary notation, defined in terms of pointer arithmetic. Unlike structs, arrays are not first-class objects; they cannot be assigned or compared using single built-in operators. There is no "array" keyword, in use or definition; instead, square brackets indicate arrays syntactically, for example month[11].
Enumerated types are possible with the enum keyword. They are freely interconvertible with integers.
Strings are not a separate data type, but are conventionally implemented as null-terminated arrays of characters.
Low-level access to computer memory is possible by converting machine addresses to typed pointers.
Procedures (subroutines not returning values) are a special case of function, with an untyped return type void.
Functions may not be defined within the lexical scope of other functions.
Function and data pointers permit ad hoc run-time polymorphism.
A preprocessor performs macro definition, source code file inclusion, and conditional compilation.
There is a basic form of modularity: files can be compiled separately and linked together, with control over which functions and data objects are visible to other files via static and extern attributes.
Complex functionality such as I/O, string manipulation, and mathematical functions are consistently delegated to library routines.
While C does not include some features found in some other languages, such as object orientation or garbage collection, such features can be implemented or emulated in C, often by way of external libraries (e.g., the Boehm garbage collector or the GLib Object System).

Relations to other languages
Many later languages have borrowed directly or indirectly from C, including C++, C#, Unix's C shell, D, Go, Java, JavaScript, Limbo, LPC, Objective-C, Perl, PHP, Python, Rust, Swift, and Verilog (hardware description language)[5]. These languages have drawn many of their control structures and other basic features from C. Most of them (with Python being the most dramatic exception) are also very syntactically similar to C in general, and they tend to combine the recognizable expression and statement syntax of C with underlying type systems, data models, and semantics that can be radically different.

Friday, September 21, 2018

Grow your site in Five days

Two months ago, the Sumos were sitting around having tacos and whiskey (typical lunch here), and a question came up:
“If you had to grow a blog from scratch with no existing audience or mailing list, how would you grow it to 10,000 visitors per month, in just a few months?”
Over 350,000 sites have Sumo installed, but very few have reached this traffic tipping point. Maybe you’re still working to hit that 10,000 mark.
To help you get there, I want to show you how to grow blog traffic by sharing the strategy I used to increase traffic to my personal site, nateliason.com, to 50,000+ visits a month:
Screenshot of a google analytics graph
And I’m going to show how my site’s traffic increased steadily over the course of December, despite publishing only one article and not emailing my list:
Screenshot showing traffic and nat eliason
The reason I saw so much traffic with little time spent?
Yes, you’ve read unsatisfying articles about SEO before, but I’m going to show you the exact steps I follow to take advantage of it and actually get results.
I’ll walk you through how I’d use the same strategies that have worked on nateliason.com (and some other things that I’d do if I had more time for it) to grow a brand new website to 10,000 visitors a month, all through a focus on SEO.
And, as promised, I’ll talk about how I’d do it assuming I had no existing audience, no big blogs (like this one!) to link from, no connections in the industry, NADA.
  1. Pick the Topic
  2. Create an Initial Article List
  3. Prioritize Your Articles
  4. Pick Your Top 5-10 Articles
  5. Create a Schedule
  6. Create a List of Similar Blogs for Guest Posting
  7. Write The First Article
  8. Create a Content Upgrade
  9. Promote Your Article
  10. Create a List of Guest Topics
  11. Start Guest Posting
  12. Repeat Steps 7 through 11!

STEP 1: PICK THE TOPIC

(Skip this section if you already have your site built)
It’s popular to recommend going through Google, BuzzSumo, Facebook groups, etc. to try to find the perfect topic to build a high traffic site around… but it’s all a waste of time.
Why would you build a site about anything you’re not passionate about?
Meme of a cat planning to start a puppy training blog
For the sake of this article, I’m going to start a site called Nat Likes Tea at natlikestea.com.
I like tea, mention it at least once in most of my articles, and all the good “tea” puns are taken: honest tea, ingenuitea, insanitea…
Nat Likes Tea it is.

STEP 2: CREATE AN INITIAL ARTICLE LIST

With the topic in mind, I’d come up with an initial list of articles that I could write, and keep them all in a spreadsheet.
By doing this, I can make sure that I’m writing about the best topics to go after, not just picking things willy-nilly. The first couple ideas I have might be fine, but by spending some time to put all the options out there I can be sure that I’m spending my time as effectively as possible.
The easiest way to make this list is to come up with a few article styles, then mix and match styles and content to build a huge list.
For Nat Likes Tea (NLT from now on), I might have these categories:
Screenshot showing different content categories in a google spreadsheet
Then, I’d make a “generator” column like this one:
Screenshot showing content generators on a google spreadsheet
And then I’d use that with the “CONCATENATE” function to make up article topics:
GIF showing a spreadsheet being edited
And then add those to a new Worksheet for my topics:
Screenshot showing a google spreadsheet being used to plan marketing
Pro tip: If you paste them and get a REF error, do “Paste Values Only”
Then I’d repeat that for all the other combinations of things I could write about, until I have an initial list of possible topics:
Screenshot showing possible topics on a google spreadsheet
Now, I can start listing some of the more meta topics that I can think of. These are the ones that would be longer, more in-depth posts, and will likely have higher SEO value.
This is why you should write about something you’re already passionate about. It’s way easier to come up with these big meaty topics when you know the subject matter already, and odds are that friends have already asked you questions related to some of them:
Screenshot showing meaty topics that can be used for later
Then I just take those and add them to the list, and now we have our initial list of things I can write about!
Screenshot showing a plethora of topics for content on a google spreadheet, along with doge
All that’s left is lock myself in a Starbucks and start doing lines of ground coffee beans until they’re all written.
Or, for the sake of my nose and adrenal glands, we could prioritize them.

STEP 3: PRIORITIZE YOUR ARTICLES

Now that we have all of our possible topics, we need to figure out which ones it makes sense to focus on for our site (in order to get that sweet sweet SEO traffic), and which ones are fine to give to other people as guest posts.
To do that, we’re going to rank our posts by Depth, then SEO value.

RANKING BY DEPTH

I’m going to go through and assign a score of 1 to 3 for depth to each topic on the list:
  • 1: Shorter, fun, one-off post. Probably < 1,000 words
  • 2: Somewhere in the middle, 1,000-2,000 word guides
  • 3: Massively useful in-depth guide on a topic, likely 2,000+ words
Don’t sell any of your posts long, if they could fit into a bigger post (within reason) then they’re a 1 or 2.
Think of it like a pyramid, with your 3s as a base that the other article ideas build on top of or expand on.
Screenshot showing depth ranking on a google spreadsheet for planning content
Then, take all the posts you ranked a “1” and put them in another Worksheet labeled “Later Posts”:
Screenshot showing a google spreadsheet with a content plan

COMPARE SEO VALUE

With the 2s and 3s, we’re going to figure out how valuable they are from an SEO perspective. This means assessing how many visitors we could potentially get to them from Google as a result of people searching for those topics.
First, go to Google Keyword Planner.
Then, take a topic you came up with, and plug it in as you have it:
Screenshot showing the google keyword planner in use
See what the results are:
Screenshot showing the google keyword planner
In this case, there are almost no monthly searches for that topic, so we can plug some variations into that search bar at the top until we find a keyword (it’s a keyword even if there are multiple words) with a high volume:
Screenshot showing keyword search results on the keyword planner
GIF showing a military man saying "oooooh that
Now I just take that Keyword and the Keyword Volume, and add it to our spreadsheet:
Screenshot showing a google spreadsheet about content planning
As you’re researching, you’ll come up with more ideas. For example, when I was looking for a good keyword for “high caffeine teas,” I noticed that there was a lot of searches for the amount of caffeine in specific types of tea:
Screenshot showing keyword search results for water fasting
So I made a note to myself to add more topics around that later.
Screenshot showing search volume on a google spreadsheet
And then you just need to repeat this for all of your topics, or at least all of your “3” ranked ones.
Screenshot of a spreadsheet being used to plan content

DISQUALIFY TOUGH COMPETITION

Once I have my list of keywords, I’d go through and make sure that none of them are so competitive that I shouldn’t bother trying to rank for them (yet).
This does NOT mean to look at the competitiveness rating in Keyword Planner.
Screenshot showing how you can ignore tough competition
That competitiveness ranking is how competitive the ads are. Since we’re not buying ads, we don’t have to worry about how many other people are buying ads.
What I mean by competitiveness is who else is ranking for this keyword in Google right now.
All I have to do is take each keyword, plug it into Google, and see what comes up. I’ll also use the Moz Toolbar to tell me how highly ranked the pages are.
If there’s a few major sites competing on a keyword, I’ll highlight it in red, but if it looks like smaller sites that I can definitely compete against then I’ll move on.
Screenshot showing competitors on google search
You might see results from social media, Amazon, and other “big” sites in the results, but don’t let those scare you off.
Since these sites cover such a wide variety of topics you can still compete with them, and if all you’re seeing are social media results that’s a good sign that no one has written a good article on the topic.

STEP 4: PICK YOUR TOP 5-10 TOPICS

With your list of topics (excluding the ones that seem too competitive), it’s time to pick the 5-10 that you’ll put on your site.
With just 5-10 articles, you can easily reach 10k visitors a month. I currently get ~2,500 visitors per day from just 4 of my articles, so if just one of your articles reaches that level then you’ll have hit the goal.
In this case, I would go with:
  • Drink these teas for weight loss
  • A guide to the different types of tea
  • Tea vs. Coffee
  • Best tea for your skin
  • The best decaf teas
  • New to Tea? Start here
  • The best low caffeine teas to go to sleep
They’re all not too competitive, have a large enough search volume to each get me 5,000+ visitors a month (anything over 1,000 is a safe bet), and they’re topics I want to write about.

Important note: the “keyword volume” is not an absolute, it’s only an indicator. For example, the keyword “water fasting results” has a monthly keyword volume of 2,400, but my article targeting “water fasting results” gets 15,000-30,000 visitors a month.

This is because 80% or more of searches are unique. They’re long highly-specific searches (e.g. “what happens to your body if you don’t eat and only drink water for 5 days”) that are rarely repeated, and Google just makes its best guess to match those to easier keywords.
10,000 visitors per month is roughly 333 per day, so each article only needs to get 30-60 visits per day. Not a crazy high bar.
In fact, you can plug in how many posts you want to write to see what traffic amount you need on the spreadsheet. Just set your monthly goal and how many posts you want to write:
Screenshot showing a google spreadsheet outlining how many articles need to be writtenf or a goal
Just so you know though, it won’t be an even spread. A few articles will get substantially more traffic than others (the 80/20 rule at work), so when you’re picking topics, pick ones that could be massively popular (volume of 1,000/month or higher).
Here’s the relative traffic amounts for the top 20 articles on my site to give you an idea:
Piechart showing relative traffic counts for different articles

STEP 5: MAKE A SCHEDULE

Before you start writing, create a schedule in Google Calendar for how often you’ll publish, both on your site and other sites.
Aim for a minimum of two posts per month on your site, and one post a week on other sites. If you want to post more, put more time into posting on other sites. That’ll have a bigger ROI for you in the short term.
But the most important thing is that once you make the schedule… stick to it. Lock it in, and make sure that you’re getting your articles out when you say you will. That’s the only way you succeed at this.
Screenshot showing the schedule for articles for a blog

STEP 6: CREATE A LIST OF SIMILAR BLOGS FOR GUEST POSTING

We’re almost to the writing! I promise! This is the last step before you buckle down with your typewriter.
You need a list of blogs that you can guest post on, and that you want to link back to you. The reason we’re doing this now is that once you have your list, you can include links to other people’s sites in your articles to earn good karma with them.
Think about it. What’s more appealing:
“Hey I just linked to your article about XYZ from my article about ABC. Seems like we have a lot of topics in common, would love to put something together for your audience about DEF if that’s interesting to you :)”
Or
“Hey can I write stuff on your site to promote my site?”
Obviously the first one, since you’ve already done them a favor by giving them a link whether or not they let you guest post!
And ideally, you’re doing this over separate emails (so one that says “hey I linked to you” then a follow up later asking about guest posting), which means that in your first communication you’re not asking for anything, just making their life better.
Add a worksheet like this one to your content plan:
Screenshot showing a content planning worksheet
And fill it in with the blogs in a similar niche as you.
The best ways to find these blogs is to:
  • See what comes up in Google right now for your topics
  • Search on BuzzSumo for posts that performed well related to your topic
  • Search on Twitter for people sharing articles from related blogs
If you’re having trouble finding their email addresses, Connectifier or Email Huntercan usually take care of it for you.
Now, with list in hand, it’s time to start writing :)