8 Languages All Coders Should Know

intully.com

Computer programs are designed to solve problems for people. The more problems it can solve, the better. The more difficult problems it can solve, the better. Whether it’s entertainment, AI voice commands, self-driving cars, routing internet packets, or handling your thermostat, programming languages provide a schema through which coders can specify instructions to accomplish a task.

Not all programming languages are the same; they weren’t meant to be! There are some programming languages that serve a broad purpose and others with a more specific purpose. Python for instance is a very popular programming language that can be utilized to do a broad number of things while remaining simple and clean syntactically. However, because it is not specific to any area of technology, it may not always be the simplest solution for your problem.

Take C for instance. C is considered more lower-level than Python because it can do operations that are closer to the machine-level. Typically this is harder to handle and it takes more time. However, the ability to go down to the nitty-gritty details allows the coder to write much more efficient applications.

Another example is Lisp. Languages like Lisp, Haskell, and F# are categorized as functional programming. As as the name implies, they are composed of functions that very closely resemble pure mathematical functions. This allows them to be more problem-oriented and avoid the side affects of languages like Python which run imperatively. This style has been adopted into other programming languages including Python, JavaScript, Java, C# and C++.

Imperative languages (like C#, Python, Perl, and JavaScript) all have their own differences. Knowing each languages’ special characteristics is key to creating effective solutions and managing your codebase. Why? Leverage! It’s not about using a single language to solve every problem out there. It’s about breaking down the project into problems and solving it using good techniques, appropriate design patterns, best practices, and the right programming language.

Each language has it’s own history, philosophy, style, and features. This has a big influence on the coder when making design decisions for the application. For instance, C# and C sound similar and may even look syntactically similar, but writing applications in the the two languages are very different. C# is a object-oriented heavy language that is influenced by many modern styles of programming. C on the other hand does not have native support for object-oriented programming and involves a lot of the lower-level details and gives the user more power to control the computer’s hardware. C# is useful for desktop applications or even web development, but not as effective as C when it comes to writing software for embedded systems. Likewise, it would be painful to write dynamic web pages using C since it deals with more primitive constructs. There are congruent differences between Python, C++, and Java.

1. HTML

Modern HTML is not just a language, it is a standard that browsers use to render web pages. This full-blown standard not only gave birth to, but also gives meaning to JavaScript and CSS. It has a wide array of support for devices of different sizes. The experience that you gain when building full-on front-end SPA (web applications) translates to other front-end technologies like Mobile development and Desktop development. And best of all it’s been around since the birth of the internet making it resilient.

Knowing HTML will help you gain a better understanding of how users interact with your application. Concepts of UI (user interface) and UX (user experience) are all relevant here. As a matter of fact, they are very easy to prototype due to the simple nature of HTML. Furthermore, sophisticated concepts like design patterns, caching, and application routing can all be applied to HTML as well. It is constantly being refined; top companies are investing in this technology because it is driving their business. It is the technology that drives YouTube, FaceBook, Amazon, Google, and Live just to name a few. As a result, having knowledge of this technology will allow you to tap into the bleeding edge of front-end technology and frameworks. This experience is invaluable for solving sophisticated issues and building immersive applications that are robust, simple, and manageable.

2. JavaScript

This language has some very interesting roots. It started off being based off of LISP a functional programming language at the time. Functional programming (which is mentioned more #6) is a declarative style of programming unlike the imperative programming languages that we all know. Although JavaScript is mostly imperative, there are many features in JavaScript reveal it’s functional programming roots. Some of these features include first-class functions, tail-recursion support, and map-filter-reduce natively supported.

JavaScript has a huge resemblance to C-based languages like Java, C#, C++, and C. It has object-oriented support and is a dynamic typing language. JSON is also another very powerful aspect of JavaScript that is now in widespread use when dealing serializing data. Everything from models to configuration files can be notated using JSON. At it’s core, JavaScript uses lots of dictionaries.

But that’s not all! JavaScript is an interpreted language used on browsers so making cross platform applications with the HTML is not an issue. There is also an enormous node.js community allowing JavaScript to run outside of the context of a HTML environment. As a matter of fact, as of now, NPM is currently the largest Package Registry in the world, with over 350,000 packages. This means there are tons of tools and utilities to choose from when developing in JavaScript.

Perhaps the best part of JavaScript is that although it embodies the syntactic familiarity of compiled c-based languages, it also takes from a more practical, scripted roots. Interestingly, it takes practical approaches from the scripting world as well — yes, we’re talking Perl, Ruby, and Python. There is something about the speed of development of scripted language that is very attractive and JavaScript delivers this kind of experience in its own way through this language.

Best of all, JavaScript is has been around since the early days of the internet and has ever since consistently grown in popularity and usage. This is due to the fact that HTML standards that define JavaScript are constantly changing due to the massive demands from users and big tech companies.

3. CSS

This is the only language in this list that is purely for visual purposes.

I know what you’re thinking — What about HTML!? Well, to answer that question, you have to realize that HTML is a mark-up language and it is a standard — it ties together CSS and JavaScript and in modern frameworks like Angular, it can even embed logic. No, HTML is more than purely just a visual language, it more like an intermediary, a standard than just for purely visual purposes.

Back to CSS — this language is eloquently simple and has also withstood the test of time alongside JavaScript. It has evolved to adapt to mobile development UI’s, animation, and in it’s modern form, it is robust enough to write games purely in CSS and HTML.

Unlike JavaScript and HTML, there doesn’t seem to be many languages that resemble CSS. As a matter of fact, many modern languages have been influenced by CSS including the XAML from the .Net framework and QML from the C++ world.

One very important aspect of CSS is it forces you to think differently than many of the other programming languages. Styles can be applied to existing HTML schema or other HTML schema. One HTML page can be made to look hundreds or thousands of different ways without changing a single line of HTML. UI styling in CSS, compared to other languages, is painless — mastering this language will improve your UX and UI skills which will carryover to Android, XAML (desktop & mobile), and QML.

4. SQL

This language is popular for databases, specifically relational databases. But did you know that it is in the same category as HTML? That’s right, both SQL and HTML are declarative programming languages. So what does this mean and why is it useful? In essence, declarative languages allow users to define a criteria and allow the language by itself to figure how to honor the criteria.

Say that you have a table that contains 10,000 entries with 12 columns. Without SQL, you would have to do the following:

  • Load the file
  • Find out how many entries are there total
  • Iterate through the table based on the total
  • For reach entry, iterate again based on the number of columns (this is a nested loop)
  • Then you would have to construct a new structure to store the columns you selected.

This is a lot of work and it gets even more difficult when you need to join together different tables. With SQL you just have to specify the columns you want and which table you would like to join, then use a where clause where you specify the constraints to your query. Typically, many simple queries are done within a single line with a select, from, and where clause.

This is where the power of declarative programming languages lie. You give it the criteria, and it figures out the best way to fetch the data for you. Not only does this save you time, it abstracts away the details of how to grab the data. Why is this advantageous? Because the software can find ways to optimize how to fetch your query in more ways than you can imagine. Also, as the SQL software improves, upgrades can be made to the fetching speed.

So why learn SQL? Let’s start by saying that relational databases have been around for a long time and they are not going anywhere anytime soon. Sure there’s NoSQL, but did you know that the big SQL players like Microsoft SQL, MySQL, and Oracle support JSON fields? This means you can store documents as fields inside your table cells. It supports iterating through the documents and searching through them. This allows you to have the flexibility of a document-based (NoSQL) structure inside your table. Relational objects can be done in the large scale to tie things together, while documents can give you the flexibility of attributes which you can add or remove as you wish. I have used this approach extensively in my projects and it both simplifies the work and saves an enormous amounts of time. No longer do you have to stress about the rigidity of SQL schemas!

5. Python/Ruby/Perl

In the early days of the internet, Perl ruled on the back-end of many servers alongside CGI. This is because Perl is a very interesting language allowing for a great ability to manipulate text. It wasn’t until I had to work with legacy stack that I truly appreciated the advantage of Perl. You see the evolution of web development was not linear. It went through some weird phases before it decided that MVC was a good design pattern to use alongside web development.

It was the Ruby world that made MVC cool for web development. But how so? And why is it great for web development? The concept of MVC was not invented by Ruby, as a matter of fact, it was invented back in the 1970’s. However, before Ruby made MVC cool with web development many (though not all) frameworks that did web development were doing it outright wrong. from ASP.Net (not ASP.Net MVC that was came after Ruby’s MVC revolution), to Java, to PHP, the code was all over the place. It was through Ruby’s community which was a place that brought together and experimented with many different kinds of patterns and programming techniques. This gave way to evolution that happened and eventually MVC emerged.

Unlike other frameworks and languages, scripted languages like the three mentioned here are practical. This gives way to interesting and novel approaches to problem solving. This is not to say that you can’t do this with other languages like C, C++, C#, or Java, but it is a lot simpler with scripted language due to their dynamic faculties.

Lastly, script languages (specifically the three mentioned here) can be written conveniently to solve all kinds of tasks from simple applications to even web development and can run on most systems. They may not be the most efficient or even the most simplest solution, but they are very easy to use to prototype a solution or to bring a proof-of-concept to life at the very least.

6. Lisp/F#/Haskell

Functional programming plays a very important role in modern development. However, it is quite different from imperative programming, and in a lot of ways imperative programmers going straight into functional programming may find it — useless. So why does it play such a critical role in modern programming?

For starters, functional programming languages are also categorized as declarative a programming language. The role of functional programming is a world of pure functions closer to what is seen in mathematics. What this means is we can use this to avoid side effects which causes your program do something you didn’t originally intend it to do. Imperative programming languages are powerful, but they are also very complex because they have many subroutines for even a simple line of code such as a print statement. Functional programming deals more strictly with a closed environment when calling functions so it is more likely to avoid these problems.

Where is this useful?

In practice it is used in the following ways…

  • Database Transactions (ACID-compliant transactions)
  • Bank Operations/Transactions
  • Action-based Design Patterns: Actor model, Reactive programming, Redux
  • Linq, Clojure, F# are a result of functional programming

Regardless of the language or framework, you can approach the problem using functional programming to arrive at your solution. Map, filter, and reduce are classic building blocks of functional programming and are built into practically all of the modern imperative programming languages. Approaching it through the perspective of functional programming allows you to break it down and focus on identifying the problem and mapping a solution to it.

7. Java/C#/Go/C++

The languages in this section combine the power and efficiency while still retaining the expressiveness of imperative programming. If efficiency and speed were dimensions for picking your next framework, these languages would serve as very strong contenders and could outclass any other language listed in this article when it comes to the right balance between efficiency, expressiveness, and speed to development.

Learning these languages are typically harder because they follow a stricter set of rules, they have a greater depth to their language concepts, and they have a rich and modern framework to work with. As a result, the learning curve tends to be steeper so learning these languages may take longer to than the languages mentioned earlier. Furthermore, even once you’ve mastered the language, developing in these languages take more time because they call for careful planning before implementing due to the wide array of tools.

However, upon developing a mastery of these languages, the sky is really the limit. Other languages (like scripting languages or even lower-level languages like assembly and MIPS) typically use a subset the principles mentioned in the language of this section. A deep and thorough understanding of any one language mentioned in this section will provide you with a solid base to become a competent programmer.

There is an endless list of companies that run on C++. It drives the core back-end for many platforms like Youtube, Facebook, Google, Adobe, Microsoft, Amazon, and much more. C++ is a powerhouse when it comes to compiled software efficiency. It is precise and powerful. It has been around for a long time and its codebase is enormous. It can live in large scale computers or tiny embedded devices .

Java is another cross-platform demon used by Android, Airbnb, Netflix, Google, Amazon, Slack, and much more. Like C++, Java has been around for a while, but it is easier than C++ and lives in a wide variety of devices as well. Although it sacrifices some of it’s precision and efficiency, it makes up for it in terms of ease of use and compatibility. Unlike C++, Java’s code runs on a virtual machine so you wont have to recompile your code to run on different platforms and much more of your code is going to be compatible with different devices. It is also easier to learn and has a wider base of users. At the moment, Java is perhaps the most in-demand language in this section — and perhaps even on this list!

Many small businesses love C# because it offers the perks of Java, but incorporates very interesting and powerful language features like LINQ, extension methods, and XAML. In terms of innovation and novelty, C# is perhaps the most interesting one here. C# is very quick to adopt powerful features from the scripting world like the use of SQL-like syntax when using LINQ, the var keyword when declaring variables (yes! just like JavaScript), tuple pattern for multiple return values (like Python, Perl, Ruby), it was a very early adopter of the lamda expressions that is (now adopted by Java, C++, JavaScript, and GO), null-coalescing operators allow for streamline use of null handling, the ease of declaring properties can be done in a single line(mutators and accessors), and event handlers just to name a few. C# is a very sexy language and mixes the powerful concepts and paradigms from other languages to make development smooth, clean, and simple.

These programming languages scale very well and most professionals who have to build large scale applications will most likely know and use one of these languages. However, some programmers get lazy and like to stay with a single language for a very long time. They get comfortable and they forget to explore. This is very dangerous! The software world constantly changes and if you don’t continue to learn and improve your skills — you become obsolete. I have worked with experienced programmers who know a lot. They are competent and able to listen and understand to extract the critical requirements of the user and deliver them to the user. But, their solutions can be very rigid and often times, the user is unsatisfied due to inflexibility. By adopting newer philosophies, practices, and languages; you can write better code, simpler, and cleaner code that’s easier to manage. This would allow you to listen closer to your end-user be more flexible and provide them with a less compromising set of features.

There is no shortage of demand for programming languages mentioned in this section. If you have a deep understanding of anyone the language mentioned above, you will be very a valuable asset.

8. MIPS/Assembly

The languages mentioned in this section is lower level. It is closer to machine code and it takes the longest to develop. However, it could allow you the most efficiency for specialized tasks. It can also grant the the most precise control over the hardware components that you are coding for. Having knowledge in this type of language is very important for understanding the underlying code and the hardware. We all know how convenient shorthand code can be, but understanding the implications of each line of code and how it can affect efficiency is vital when developing large-scale applications. If you want to develop an awareness for how your code impacts run time and how much instructions are generated, learning these types of languages is a surefire way to gain this awareness.

— — —

Want More?

Newsletter: https://intully.com

Facebook Page: https://fb.com/intully

Facebook Community: https://fb.com/groups